Bläddra i källkod

Merge pull request #4660 from yanmowudi/master

update swm320 libraries
Bernard Xiong 4 år sedan
förälder
incheckning
06b5b0c840
45 ändrade filer med 5998 tillägg och 5919 borttagningar
  1. 8 7
      bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h
  2. 21 21
      bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s
  3. 1 1
      bsp/swm320/libraries/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s
  4. 1 1
      bsp/swm320/libraries/CMSIS/DeviceSupport/startup/iar/startup_SWM320.s
  5. 35 16
      bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c
  6. 388 373
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c
  7. 72 74
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h
  8. 443 528
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c
  9. 110 112
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h
  10. 29 30
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c
  11. 18 21
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h
  12. 83 81
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c
  13. 10 13
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h
  14. 86 86
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c
  15. 12 14
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h
  16. 60 46
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c
  17. 1 5
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h
  18. 288 289
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c
  19. 16 18
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h
  20. 168 164
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c
  21. 22 22
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h
  22. 95 102
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c
  23. 58 68
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h
  24. 136 121
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c
  25. 18 22
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h
  26. 198 199
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c
  27. 415 423
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h
  28. 643 550
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c
  29. 48 49
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h
  30. 281 275
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c
  31. 58 58
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h
  32. 547 515
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c
  33. 101 107
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h
  34. 83 70
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c
  35. 71 72
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h
  36. 338 338
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c
  37. 73 76
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h
  38. 35 32
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c
  39. 22 24
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h
  40. 349 344
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c
  41. 16 19
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h
  42. 393 379
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c
  43. 64 68
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h
  44. 74 75
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c
  45. 10 11
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h

+ 8 - 7
bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h

@@ -1716,7 +1716,8 @@ typedef struct
 
     __IO uint32_t LINCR;
 
-    union {
+    union
+    {
         __IO uint32_t CTSCR;
 
         __IO uint32_t RTSCR;
@@ -2690,7 +2691,7 @@ typedef struct
 
     __I uint32_t SR; //Status Register
 
-    __I uint32_t IF; //Interrupt Flag
+    __I uint32_t IF; //Interrupt Flag,读取清零
 
     __IO uint32_t IE; //Interrupt Enable
 
@@ -2712,7 +2713,8 @@ typedef struct
 
     __IO uint32_t TXERR; //TX错误计数
 
-    union {
+    union
+    {
         struct
         {                         //在复位时可读写,正常工作模式下不可访问
             __IO uint32_t ACR[4]; //Acceptance Check Register, 验收寄存器
@@ -2722,7 +2724,8 @@ typedef struct
             uint32_t RESERVED[5];
         } FILTER;
 
-        union { //在正常工作模式下可读写,复位时不可访问
+        union
+        { //在正常工作模式下可读写,复位时不可访问
             struct
             {
                 __O uint32_t INFO;
@@ -2869,8 +2872,6 @@ typedef struct
     __IO uint32_t PRECMDV; //在MPU接口中,发送数据前,RS拉低的那一拍,数据总线上的值
 } LCD_TypeDef;
 
-#define LCD_START_MPUEN_Pos 0 //0 RGB接口    1 MPU接口
-#define LCD_START_MPUEN_Msk (0x01 << LCD_START_MPUEN_Pos)
 #define LCD_START_GO_Pos 1 //写1开始传输数据,数据传输结束后自动清零
 #define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos)
 #define LCD_START_BURST_Pos 2
@@ -3120,7 +3121,7 @@ typedef struct
 {
     __IO uint32_t DATA;
     __IO uint32_t ADDR;
-    __IO uint32_t _ERASE; //和mmcsd_cmd.h(59)名字冲突,这里修改为_ERASE
+    __IO uint32_t ERASE;
     __IO uint32_t CACHE;
     __IO uint32_t CFG0;
     __IO uint32_t CFG1;

+ 21 - 21
bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s

@@ -1,10 +1,10 @@
 ;******************************************************************************************************************************************
-; 文件名称:	startup_SWM320.s
-; 功能说明:	SWM2400单片机的启动文件
-; 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-; 注意事项:
-; 版本日期: V1.1.0		2017年10月25日
-; 升级记录:
+; 鏂囦欢鍚嶇О:	startup_SWM320.s
+; 鍔熻兘璇存槑:	SWM2400鍗曠墖鏈虹殑鍚�姩鏂囦欢
+; 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+; 娉ㄦ剰浜嬮」:
+; 鐗堟湰鏃ユ湡: V1.1.0		2017骞�10鏈�25鏃�
+; 鍗囩骇璁板綍:
 ;
 ;
 ;******************************************************************************************************************************************
@@ -79,7 +79,7 @@ __Vectors       DCD     __initial_sp               ; Top of Stack
                 DCD     GPIOA5_Handler
                 DCD     GPIOA6_Handler
                 DCD     GPIOA7_Handler
-				DCD     GPIOB0_Handler
+                DCD     GPIOB0_Handler
                 DCD     GPIOB1_Handler
                 DCD     GPIOB2_Handler
                 DCD     GPIOB3_Handler
@@ -103,19 +103,19 @@ __Vectors       DCD     __initial_sp               ; Top of Stack
                 DCD     GPIOM5_Handler
                 DCD     GPIOM6_Handler
                 DCD     GPIOM7_Handler
-				DCD     DMA_Handler
+                DCD     DMA_Handler
                 DCD     LCD_Handler
                 DCD     NORFLC_Handler
-				DCD		CAN_Handler
+                DCD     CAN_Handler
                 DCD     PULSE_Handler
                 DCD     WDT_Handler
                 DCD     PWM_Handler
                 DCD     UART0_Handler
-				DCD     UART1_Handler
-				DCD     UART2_Handler
-				DCD     UART3_Handler
-				DCD     0
-				DCD     I2C0_Handler
+                DCD     UART1_Handler
+                DCD     UART2_Handler
+                DCD     UART3_Handler
+                DCD     0
+                DCD     I2C0_Handler
                 DCD     I2C1_Handler
                 DCD     SPI0_Handler
                 DCD     ADC0_Handler
@@ -130,13 +130,13 @@ __Vectors       DCD     __initial_sp               ; Top of Stack
                 DCD     GPIOP_Handler
                 DCD     ADC1_Handler
                 DCD     FPU_Handler
-				DCD     SPI1_Handler
-				DCD     TIMR0_Handler
-				DCD     TIMR1_Handler
-				DCD     TIMR2_Handler
-				DCD     TIMR3_Handler
-				DCD     TIMR4_Handler
-				DCD     TIMR5_Handler
+                DCD     SPI1_Handler
+                DCD     TIMR0_Handler
+                DCD     TIMR1_Handler
+                DCD     TIMR2_Handler
+                DCD     TIMR3_Handler
+                DCD     TIMR4_Handler
+                DCD     TIMR5_Handler
                          
 __Vectors_End
 

+ 1 - 1
bsp/swm320/libraries/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s

@@ -113,7 +113,7 @@ __isr_vector:
     .long     TIMR4_Handler
     .long     TIMR5_Handler
 
-	.section .text.Reset_Handler
+    .section .text.Reset_Handler
     .align 2
     .globl    Reset_Handler
     .type     Reset_Handler, %function

+ 1 - 1
bsp/swm320/libraries/CMSIS/DeviceSupport/startup/iar/startup_SWM320.s

@@ -84,7 +84,7 @@ __vector_table
         DCD     DMA_Handler
         DCD     LCD_Handler
         DCD     NORFLC_Handler
-        DCD	CAN_Handler
+        DCD     CAN_Handler
         DCD     PULSE_Handler
         DCD     WDT_Handler
         DCD     PWM_Handler

+ 35 - 16
bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c

@@ -1,18 +1,18 @@
-/******************************************************************************************************************************************
+/****************************************************************************************************************************************** 
 * 文件名称:	system_SWM320.c
 * 功能说明:	SWM320单片机的时钟设置
 * 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
 * 注意事项:
 * 版本日期: V1.1.0		2017年10月25日
-* 升级记录:
+* 升级记录: 
 *
 *
 *******************************************************************************************************************************************
 * @attention
 *
-* 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, SYNWIT SHALL NOT BE HELD LIABLE
-* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+* 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, SYNWIT 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 CONN-
 * -ECTION WITH THEIR PRODUCTS.
 *
@@ -43,7 +43,7 @@
 
 /********************************** PLL 设定 **********************************************
  * VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
- * PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
+ * PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV         
  *****************************************************************************************/
 #define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
 
@@ -60,12 +60,12 @@
 uint32_t SystemCoreClock = __HSI;         //System Clock Frequency (Core Clock)
 uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second
 
-/******************************************************************************************************************************************
-* 函数名称:
+/****************************************************************************************************************************************** 
+* 函数名称: 
 * 功能说明: This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed
-* 输    入:
-* 输    出:
-* 注意事项:
+* 输    入: 
+* 输    出: 
+* 注意事项: 
 ******************************************************************************************************************************************/
 void SystemCoreClockUpdate(void)
 {
@@ -114,17 +114,19 @@ void SystemCoreClockUpdate(void)
     CyclesPerUs = SystemCoreClock / 1000000;
 }
 
-/******************************************************************************************************************************************
-* 函数名称:
+/****************************************************************************************************************************************** 
+* 函数名称: 
 * 功能说明: The necessary initializaiton of systerm
-* 输    入:
-* 输    出:
-* 注意事项:
+* 输    入: 
+* 输    出: 
+* 注意事项: 
 ******************************************************************************************************************************************/
 void SystemInit(void)
 {
     SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos);
 
+    Flash_Param_at_xMHz(120);
+
     switch (SYS_CLK)
     {
     case SYS_CLK_20MHz: //0 内部高频20MHz RC振荡器
@@ -152,6 +154,23 @@ void SystemInit(void)
     SYS->CLKDIV |= (SYS_CLK_DIV << SYS_CLKDIV_SYS_Pos);
 
     SystemCoreClockUpdate();
+
+    if (SystemCoreClock > 80000000)
+    {
+        Flash_Param_at_xMHz(120);
+    }
+    else if (SystemCoreClock > 40000000)
+    {
+        Flash_Param_at_xMHz(80);
+    }
+    else if (SystemCoreClock > 30000000)
+    {
+        Flash_Param_at_xMHz(40);
+    }
+    else
+    {
+        Flash_Param_at_xMHz(30);
+    }
 }
 
 void switchCLK_20MHz(void)

+ 388 - 373
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備:	SWM320_adc.c
-* 髡夔佽隴:	SWM320等⑵儂腔ADC杅耀蛌遙け髡夔Й雄踱
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐:
-* 唳掛゜ヽ: V1.1.0		2017爛10堎25゜
-* 汔撰暮翹: 
+* ��辣�滨妍:	SWM320_adc.c
+* �蠘�霂湔�:	SWM320�閧��箇�ADC�唳芋頧祆揢�典��賡店�典�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★:
+* ��𧋦�交�: V1.1.0		2017撟�10��25��
+* ��漣霈啣�: 
 *******************************************************************************************************************************************
 * @attention
 *
@@ -19,492 +19,507 @@
 #include "SWM320.h"
 #include "SWM320_adc.h"
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備: ADC_Init()
-* 髡夔佽隴:	ADC耀杅蛌遙け場宎趙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ衄虴硉婦嬤ADC0﹜ADC1
-*			ADC_InitStructure * initStruct		婦漪ADC跪眈壽隅硉腔賦凳极
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍: ADC_Init()
+* �蠘�霂湔�:	ADC璅⊥㺭頧祆揢�典�憪见�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗峕����澆��括DC0��DC1
+*			ADC_InitStructure * initStruct		��鉄ADC��㮾�喳��潛�蝏𤘪�雿�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
+void ADC_Init(ADC_TypeDef *ADCx, ADC_InitStructure *initStruct)
 {
-	switch((uint32_t)ADCx)
-	{
-	case ((uint32_t)ADC0):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_ADC0_Pos);
-		break;
-	
-	case ((uint32_t)ADC1):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_ADC1_Pos);
-		break;
-	}
-	
-	ADC_Close(ADCx);		//珨虳壽瑩敵湔け硐夔婓ADC壽敕奀扢离
-	
-	if(initStruct->clk_src == ADC_CLKSRC_HRC)
-	{
-		ADCx->CTRL |= (1 << ADC_CTRL_CLKSRC_Pos);
-		
-		ADCx->CTRL2 &= ~ADC_CTRL2_CLKDIV_Msk;
-		ADCx->CTRL2 |= (initStruct->clk_div << ADC_CTRL2_CLKDIV_Pos);
-	}
-	else
-	{
-		if(SYS->PLLCR & SYS_PLLCR_OFF_Msk) PLLInit();
-		
-		ADCx->CTRL &= ~(1 << ADC_CTRL_CLKSRC_Pos);
-		
-		SYS->PLLDIV &= ~SYS_PLLDIV_ADVCO_Msk;
-		SYS->PLLDIV |= ((initStruct->clk_src - 2) << SYS_PLLDIV_ADVCO_Pos);
-		
-		SYS->PLLDIV &= ~SYS_PLLDIV_ADDIV_Msk;
-		SYS->PLLDIV |= (initStruct->clk_div << SYS_PLLDIV_ADDIV_Pos);
-	}
-	
-	ADCx->CALIBSET = (ADCx == ADC0) ? SYS->BKP[0] : SYS->BKP[1];
-	ADCx->CALIBEN  = (1 << ADC_CALIBEN_OFFSET_Pos) | (1 << ADC_CALIBEN_K_Pos);
-	
-	ADCx->CTRL2 &= ~(ADC_CTRL2_ADCEVCM_Msk | ADC_CTRL2_PGAIVCM_Msk | ADC_CTRL2_PGAGAIN_Msk | ADC_CTRL2_PGAVCM_Msk);
-	ADCx->CTRL2 |= (0                    << ADC_CTRL2_ADCEVCM_Pos) |
-	               (initStruct->pga_ref  << ADC_CTRL2_PGAIVCM_Pos) |
-				   (6                    << ADC_CTRL2_PGAGAIN_Pos) |
-				   ((uint32_t)6          << ADC_CTRL2_PGAVCM_Pos);
-	
-	ADCx->CTRL &= ~(               0xFF << ADC_CTRL_CH0_Pos);
-	ADCx->CTRL |= (initStruct->channels << ADC_CTRL_CH0_Pos);
-	
-	ADCx->CTRL &= ~(ADC_CTRL_AVG_Msk | ADC_CTRL_TRIG_Msk | ADC_CTRL_CONT_Msk);
-	ADCx->CTRL |= (initStruct->samplAvg << ADC_CTRL_AVG_Pos)  |
-				  (initStruct->trig_src << ADC_CTRL_TRIG_Pos) |
-				  (initStruct->Continue << ADC_CTRL_CONT_Pos);
-	
-	ADCx->IF = 0xFFFFFFFF;	//ラ壺笢剿梓祩
-	
-	ADCx->IE &= ~(ADC_IE_CH0EOC_Msk | ADC_IE_CH1EOC_Msk | ADC_IE_CH2EOC_Msk | ADC_IE_CH3EOC_Msk |
-				  ADC_IE_CH4EOC_Msk | ADC_IE_CH5EOC_Msk | ADC_IE_CH6EOC_Msk | ADC_IE_CH7EOC_Msk);
-	ADCx->IE |= (((initStruct->EOC_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6EOC_Pos) |
-				(((initStruct->EOC_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7EOC_Pos);
-				
-	ADCx->IE &= ~(ADC_IE_CH0OVF_Msk | ADC_IE_CH1OVF_Msk | ADC_IE_CH2OVF_Msk | ADC_IE_CH3OVF_Msk |
-				  ADC_IE_CH4OVF_Msk | ADC_IE_CH5OVF_Msk | ADC_IE_CH6OVF_Msk | ADC_IE_CH7OVF_Msk);
-	ADCx->IE |= (((initStruct->OVF_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6OVF_Pos) |
-				(((initStruct->OVF_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7OVF_Pos);
-	
-	ADCx->IE &= ~(ADC_IE_CH0HFULL_Msk | ADC_IE_CH1HFULL_Msk | ADC_IE_CH2HFULL_Msk | ADC_IE_CH3HFULL_Msk |
-				  ADC_IE_CH4HFULL_Msk | ADC_IE_CH5HFULL_Msk | ADC_IE_CH6HFULL_Msk | ADC_IE_CH7HFULL_Msk);
-	ADCx->IE |= (((initStruct->HFULL_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6HFULL_Pos) |
-				(((initStruct->HFULL_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7HFULL_Pos);
-	
-	ADCx->IE &= ~(uint32_t)(ADC_IE_CH0FULL_Msk | ADC_IE_CH1FULL_Msk | ADC_IE_CH2FULL_Msk | ADC_IE_CH3FULL_Msk |
-				  ADC_IE_CH4FULL_Msk | ADC_IE_CH5FULL_Msk | ADC_IE_CH6FULL_Msk | ADC_IE_CH7FULL_Msk);
-	ADCx->IE |= (((initStruct->FULL_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6FULL_Pos) |
-				(((initStruct->FULL_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7FULL_Pos);
-	
-	switch((uint32_t)ADCx)
-	{
-	case ((uint32_t)ADC0):		
-		if(initStruct->EOC_IEn | initStruct->OVF_IEn | initStruct->HFULL_IEn | initStruct->FULL_IEn)
-		{
-			NVIC_EnableIRQ(ADC0_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(ADC0_IRQn);
-		}
-		break;
-	
-	case ((uint32_t)ADC1):		
-		if(initStruct->EOC_IEn | initStruct->OVF_IEn | initStruct->HFULL_IEn | initStruct->FULL_IEn)
-		{
-			NVIC_EnableIRQ(ADC1_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(ADC1_IRQn);
-		}
-		break;
-	}
+    switch ((uint32_t)ADCx)
+    {
+    case ((uint32_t)ADC0):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_ADC0_Pos);
+        break;
+
+    case ((uint32_t)ADC1):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_ADC1_Pos);
+        break;
+    }
+
+    ADC_Close(ADCx); //銝�鈭𥕦��桀�摮睃膥�芾��杗DC�喲𡡒�嗉挽蝵�
+
+    if (initStruct->clk_src == ADC_CLKSRC_HRC)
+    {
+        ADCx->CTRL |= (1 << ADC_CTRL_CLKSRC_Pos);
+
+        ADCx->CTRL2 &= ~ADC_CTRL2_CLKDIV_Msk;
+        ADCx->CTRL2 |= (initStruct->clk_div << ADC_CTRL2_CLKDIV_Pos);
+    }
+    else
+    {
+        if (SYS->PLLCR & SYS_PLLCR_OFF_Msk)
+            PLLInit();
+
+        ADCx->CTRL &= ~(1 << ADC_CTRL_CLKSRC_Pos);
+
+        SYS->PLLDIV &= ~SYS_PLLDIV_ADVCO_Msk;
+        SYS->PLLDIV |= ((initStruct->clk_src - 2) << SYS_PLLDIV_ADVCO_Pos);
+
+        SYS->PLLDIV &= ~SYS_PLLDIV_ADDIV_Msk;
+        SYS->PLLDIV |= (initStruct->clk_div << SYS_PLLDIV_ADDIV_Pos);
+    }
+
+    ADCx->CALIBSET = (ADCx == ADC0) ? SYS->BKP[0] : SYS->BKP[1];
+    ADCx->CALIBEN = (1 << ADC_CALIBEN_OFFSET_Pos) | (1 << ADC_CALIBEN_K_Pos);
+
+    ADCx->CTRL2 &= ~(ADC_CTRL2_ADCEVCM_Msk | ADC_CTRL2_PGAIVCM_Msk | ADC_CTRL2_PGAGAIN_Msk | ADC_CTRL2_PGAVCM_Msk);
+    ADCx->CTRL2 |= (0 << ADC_CTRL2_ADCEVCM_Pos) |
+                   (initStruct->pga_ref << ADC_CTRL2_PGAIVCM_Pos) |
+                   (6 << ADC_CTRL2_PGAGAIN_Pos) |
+                   ((uint32_t)6 << ADC_CTRL2_PGAVCM_Pos);
+
+    ADCx->CTRL &= ~(0xFF << ADC_CTRL_CH0_Pos);
+    ADCx->CTRL |= (initStruct->channels << ADC_CTRL_CH0_Pos);
+
+    ADCx->CTRL &= ~(ADC_CTRL_AVG_Msk | ADC_CTRL_TRIG_Msk | ADC_CTRL_CONT_Msk);
+    ADCx->CTRL |= (initStruct->samplAvg << ADC_CTRL_AVG_Pos) |
+                  (initStruct->trig_src << ADC_CTRL_TRIG_Pos) |
+                  (initStruct->Continue << ADC_CTRL_CONT_Pos);
+
+    ADCx->IF = 0xFFFFFFFF; //皜�膄銝剜鱏���
+
+    ADCx->IE &= ~(ADC_IE_CH0EOC_Msk | ADC_IE_CH1EOC_Msk | ADC_IE_CH2EOC_Msk | ADC_IE_CH3EOC_Msk |
+                  ADC_IE_CH4EOC_Msk | ADC_IE_CH5EOC_Msk | ADC_IE_CH6EOC_Msk | ADC_IE_CH7EOC_Msk);
+    ADCx->IE |= (((initStruct->EOC_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6EOC_Pos) |
+                (((initStruct->EOC_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7EOC_Pos);
+
+    ADCx->IE &= ~(ADC_IE_CH0OVF_Msk | ADC_IE_CH1OVF_Msk | ADC_IE_CH2OVF_Msk | ADC_IE_CH3OVF_Msk |
+                  ADC_IE_CH4OVF_Msk | ADC_IE_CH5OVF_Msk | ADC_IE_CH6OVF_Msk | ADC_IE_CH7OVF_Msk);
+    ADCx->IE |= (((initStruct->OVF_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6OVF_Pos) |
+                (((initStruct->OVF_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7OVF_Pos);
+
+    ADCx->IE &= ~(ADC_IE_CH0HFULL_Msk | ADC_IE_CH1HFULL_Msk | ADC_IE_CH2HFULL_Msk | ADC_IE_CH3HFULL_Msk |
+                  ADC_IE_CH4HFULL_Msk | ADC_IE_CH5HFULL_Msk | ADC_IE_CH6HFULL_Msk | ADC_IE_CH7HFULL_Msk);
+    ADCx->IE |= (((initStruct->HFULL_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6HFULL_Pos) |
+                (((initStruct->HFULL_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7HFULL_Pos);
+
+    ADCx->IE &= ~(uint32_t)(ADC_IE_CH0FULL_Msk | ADC_IE_CH1FULL_Msk | ADC_IE_CH2FULL_Msk | ADC_IE_CH3FULL_Msk |
+                            ADC_IE_CH4FULL_Msk | ADC_IE_CH5FULL_Msk | ADC_IE_CH6FULL_Msk | ADC_IE_CH7FULL_Msk);
+    ADCx->IE |= (((initStruct->FULL_IEn & ADC_CH0) ? 1 : 0) << ADC_IE_CH0FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH1) ? 1 : 0) << ADC_IE_CH1FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH2) ? 1 : 0) << ADC_IE_CH2FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH3) ? 1 : 0) << ADC_IE_CH3FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH4) ? 1 : 0) << ADC_IE_CH4FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH5) ? 1 : 0) << ADC_IE_CH5FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH6) ? 1 : 0) << ADC_IE_CH6FULL_Pos) |
+                (((initStruct->FULL_IEn & ADC_CH7) ? 1 : 0) << ADC_IE_CH7FULL_Pos);
+
+    switch ((uint32_t)ADCx)
+    {
+    case ((uint32_t)ADC0):
+        if (initStruct->EOC_IEn | initStruct->OVF_IEn | initStruct->HFULL_IEn | initStruct->FULL_IEn)
+        {
+            NVIC_EnableIRQ(ADC0_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(ADC0_IRQn);
+        }
+        break;
+
+    case ((uint32_t)ADC1):
+        if (initStruct->EOC_IEn | initStruct->OVF_IEn | initStruct->HFULL_IEn | initStruct->FULL_IEn)
+        {
+            NVIC_EnableIRQ(ADC1_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(ADC1_IRQn);
+        }
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_Open()
-* 髡夔佽隴:	ADC羲ぎㄛ褫眕⻏璃ぎ雄﹜麼茞璃揖楷ADC蛌遙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_Open()
+* �蠘�霂湔�:	ADC撘��荔��臭誑頧臭辣�臬𢆡���蝖砌辣閫血�ADC頧祆揢
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_Open(ADC_TypeDef * ADCx)
+void ADC_Open(ADC_TypeDef *ADCx)
 {
-	ADCx->CTRL |= (0x01 << ADC_CTRL_EN_Pos);
+    ADCx->CTRL |= (0x01 << ADC_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_Close()
-* 髡夔佽隴:	ADC壽敕ㄛ拸楊⻏璃ぎ雄﹜麼茞璃揖楷ADC蛌遙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_Close()
+* �蠘�霂湔�:	ADC�喲𡡒嚗峕�瘜閗蔓隞嗅鍳�具���蝖砌辣閫血�ADC頧祆揢
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_Close(ADC_TypeDef * ADCx)
+void ADC_Close(ADC_TypeDef *ADCx)
 {
-	ADCx->CTRL &= ~(0x01 << ADC_CTRL_EN_Pos);
+    ADCx->CTRL &= ~(0x01 << ADC_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_Start()
-* 髡夔佽隴:	⻏璃揖楷耀宒狟ぎ雄ADC蛌遙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_Start()
+* �蠘�霂湔�:	頧臭辣閫血�璅∪�銝见鍳�杗DC頧祆揢
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_Start(ADC_TypeDef * ADCx)
+void ADC_Start(ADC_TypeDef *ADCx)
 {
-	ADCx->START |= (0x01 << ADC_START_GO_Pos);
+    ADCx->START |= (0x01 << ADC_START_GO_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_Stop()
-* 髡夔佽隴:	⻏璃揖楷耀宒狟礿砦ADC蛌遙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_Stop()
+* �蠘�霂湔�:	頧臭辣閫血�璅∪�銝见�甇∕DC頧祆揢
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_Stop(ADC_TypeDef * ADCx)
-{									 
-	ADCx->START &= ~(0x01 << ADC_START_GO_Pos);
+void ADC_Stop(ADC_TypeDef *ADCx)
+{
+    ADCx->START &= ~(0x01 << ADC_START_GO_Pos);
 }
 
 static uint32_t chn2idx(uint32_t chn)
 {
-	uint32_t idx = 0;
-	
-	switch(chn)
-	{
-		case 0x01: idx = 0; break;
-		case 0x02: idx = 1; break;
-		case 0x04: idx = 2; break;
-		case 0x08: idx = 3; break;
-		case 0x10: idx = 4; break;
-		case 0x20: idx = 5; break;
-		case 0x40: idx = 6; break;
-		case 0x80: idx = 7; break;
-	}
-	
-	return idx;
+    uint32_t idx = 0;
+
+    switch (chn)
+    {
+    case 0x01:
+        idx = 0;
+        break;
+    case 0x02:
+        idx = 1;
+        break;
+    case 0x04:
+        idx = 2;
+        break;
+    case 0x08:
+        idx = 3;
+        break;
+    case 0x10:
+        idx = 4;
+        break;
+    case 0x20:
+        idx = 5;
+        break;
+    case 0x40:
+        idx = 6;
+        break;
+    case 0x80:
+        idx = 7;
+        break;
+    }
+
+    return idx;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_Read()
-* 髡夔佽隴:	植硌隅籵耋黍龰蛌遙賦彆
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁黍龰蛌遙賦彆腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				黍龰善腔蛌遙賦彆
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_Read()
+* �蠘�霂湔�:	隞擧�摰𡁻�𡁻�霂餃�頧祆揢蝏𤘪�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�粉�𤥁蓮�Y��𦦵��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				霂餃��啁�頧祆揢蝏𤘪�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_Read(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t dat = 0;
-	uint32_t idx = chn2idx(chn);
-	
-	dat = ADCx->CH[idx].DATA;
-	
-	ADCx->CH[idx].STAT = 0x01;		//ラ壺EOC梓祩
-	
-	return dat;
+    uint32_t dat = 0;
+    uint32_t idx = chn2idx(chn);
+
+    dat = ADCx->CH[idx].DATA;
+
+    ADCx->CH[idx].STAT = 0x01; //皜�膄EOC���
+
+    return dat;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IsEOC()
-* 髡夔佽隴:	硌隅籵耋岆瘁End Of Conversion
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁脤戙袨怓腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				1 蜆籵耋俇傖賸蛌遙    0 蜆籵耋帤俇傖蛌遙
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IsEOC()
+* �蠘�霂湔�:	����𡁻��臬炏End Of Conversion
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�䰻霂Y𠶖����𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				1 霂仿�𡁻�摰峕�鈭�蓮��    0 霂仿�𡁻��芸��鞱蓮��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_IsEOC(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	return (ADCx->CH[idx].STAT & ADC_STAT_EOC_Msk) ? 1 : 0;
+    uint32_t idx = chn2idx(chn);
+
+    return (ADCx->CH[idx].STAT & ADC_STAT_EOC_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_ChnSelect()
-* 髡夔佽隴:	ADC籵耋恁籵ㄛ耀杅蛌遙頗婓恁籵腔籵耋奻甡棒粒欴蛌遙
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chns			猁恁籵腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7摯[郪磁ㄗ撈※偌弇麼§堍呾ㄘ
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_ChnSelect()
+* �蠘�霂湔�:	ADC�𡁻��厰�𡄯�璅⊥㺭頧祆揢隡𡁜銁�厰�𡁶��𡁻�銝𠹺�甈⊿��瑁蓮��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chns			閬��厰�𡁶��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7�𠰴�蝏��嚗�朖�𨀣�雿齿��肽�蝞梹�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns)
+void ADC_ChnSelect(ADC_TypeDef *ADCx, uint32_t chns)
 {
-	ADCx->CTRL &= ~(0xFF << ADC_CTRL_CH0_Pos);
-	ADCx->CTRL |=  (chns << ADC_CTRL_CH0_Pos);
+    ADCx->CTRL &= ~(0xFF << ADC_CTRL_CH0_Pos);
+    ADCx->CTRL |= (chns << ADC_CTRL_CH0_Pos);
 }
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntEOCEn()
-* 髡夔佽隴:	蛌遙俇傖笢剿妏夔
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntEOCEn()
+* �蠘�霂湔�:	頧祆揢摰峕�銝剜鱏雿輯�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntEOCEn(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE |= (0x01 << (idx*4));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE |= (0x01 << (idx * 4));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntEOCDis()
-* 髡夔佽隴:	蛌遙俇傖笢剿輦砦
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntEOCDis()
+* �蠘�霂湔�:	頧祆揢摰峕�銝剜鱏蝳�迫
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntEOCDis(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE &= ~(0x01 << (idx*4));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE &= ~(0x01 << (idx * 4));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntEOCClr()
-* 髡夔佽隴:	蛌遙俇傖笢剿梓祩ラ壺
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntEOCClr()
+* �蠘�霂湔�:	頧祆揢摰峕�銝剜鱏���皜�膄
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntEOCClr(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IF = (0x01 << (idx*4));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IF = (0x01 << (idx * 4));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntEOCStat()
-* 髡夔佽隴:	蛌遙俇傖笢剿袨怓
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁脤戙腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				1 蜆籵耋俇傖賸蛌遙    0 蜆籵耋帤俇傖蛌遙
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntEOCStat()
+* �蠘�霂湔�:	頧祆揢摰峕�銝剜鱏�嗆��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�䰻霂Y��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				1 霂仿�𡁻�摰峕�鈭�蓮��    0 霂仿�𡁻��芸��鞱蓮��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_IntEOCStat(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	return (ADCx->IF & (0x01 << (idx*4))) ? 1 : 0;
+    uint32_t idx = chn2idx(chn);
+
+    return (ADCx->IF & (0x01 << (idx * 4))) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntOVFEn()
-* 髡夔佽隴:	杅擂祛堤笢剿妏夔
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntOVFEn()
+* �蠘�霂湔�:	�唳旿皞W枂銝剜鱏雿輯�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntOVFEn(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE |= (0x01 << (idx*4+1));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE |= (0x01 << (idx * 4 + 1));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntOVFDis()
-* 髡夔佽隴:	杅擂祛堤笢剿輦砦
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntOVFDis()
+* �蠘�霂湔�:	�唳旿皞W枂銝剜鱏蝳�迫
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntOVFDis(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE &= ~(0x01 << (idx*4+1));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE &= ~(0x01 << (idx * 4 + 1));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntOVFClr()
-* 髡夔佽隴:	杅擂祛堤笢剿梓祩ラ壺
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntOVFClr()
+* �蠘�霂湔�:	�唳旿皞W枂銝剜鱏���皜�膄
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntOVFClr(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IF = (0x01 << (idx*4+1));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IF = (0x01 << (idx * 4 + 1));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntOVFStat()
-* 髡夔佽隴:	杅擂祛堤笢剿袨怓
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁脤戙腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				1 蜆籵耋俇傖賸蛌遙    0 蜆籵耋帤俇傖蛌遙
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntOVFStat()
+* �蠘�霂湔�:	�唳旿皞W枂銝剜鱏�嗆��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�䰻霂Y��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				1 霂仿�𡁻�摰峕�鈭�蓮��    0 霂仿�𡁻��芸��鞱蓮��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_IntOVFStat(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	return (ADCx->IF & (0x01 << (idx*4+1))) ? 1 : 0;
+    uint32_t idx = chn2idx(chn);
+
+    return (ADCx->IF & (0x01 << (idx * 4 + 1))) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntHFULLEn()
-* 髡夔佽隴:	FIFO圉雛笢剿妏夔
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntHFULLEn()
+* �蠘�霂湔�:	FIFO�𦠜說銝剜鱏雿輯�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntHFULLEn(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE |= (0x01 << (idx*4+2));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE |= (0x01 << (idx * 4 + 2));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntHFULLDis()
-* 髡夔佽隴:	FIFO圉雛笢剿輦砦
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntHFULLDis()
+* �蠘�霂湔�:	FIFO�𦠜說銝剜鱏蝳�迫
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntHFULLDis(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE &= ~(0x01 << (idx*4+2));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE &= ~(0x01 << (idx * 4 + 2));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntHFULLClr()
-* 髡夔佽隴:	FIFO圉雛笢剿梓祩ラ壺
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntHFULLClr()
+* �蠘�霂湔�:	FIFO�𦠜說銝剜鱏���皜�膄
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntHFULLClr(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IF = (0x01 << (idx*4+2));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IF = (0x01 << (idx * 4 + 2));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntHFULLStat()
-* 髡夔佽隴:	FIFO圉雛笢剿袨怓
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁脤戙腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				1 蜆籵耋俇傖賸蛌遙    0 蜆籵耋帤俇傖蛌遙
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntHFULLStat()
+* �蠘�霂湔�:	FIFO�𦠜說銝剜鱏�嗆��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�䰻霂Y��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				1 霂仿�𡁻�摰峕�鈭�蓮��    0 霂仿�𡁻��芸��鞱蓮��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_IntHFULLStat(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	return (ADCx->IF & (0x01 << (idx*4+2))) ? 1 : 0;
+    uint32_t idx = chn2idx(chn);
+
+    return (ADCx->IF & (0x01 << (idx * 4 + 2))) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntFULLEn()
-* 髡夔佽隴:	FIFO雛笢剿妏夔
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntFULLEn()
+* �蠘�霂湔�:	FIFO皛∩葉�凋蝙��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntFULLEn(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE |= (0x01 << (idx*4+3));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE |= (0x01 << (idx * 4 + 3));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntFULLDis()
-* 髡夔佽隴:	FIFO雛笢剿輦砦
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntFULLDis()
+* �蠘�霂湔�:	FIFO皛∩葉�剔�甇�
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntFULLDis(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IE &= ~(0x01 << (idx*4+3));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IE &= ~(0x01 << (idx * 4 + 3));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntFULLClr()
-* 髡夔佽隴:	FIFO雛笢剿梓祩ラ壺
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁扢离腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntFULLClr()
+* �蠘�霂湔�:	FIFO皛∩葉�剜�敹埈���
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�挽蝵桃��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
+void ADC_IntFULLClr(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	ADCx->IF = (0x01 << (idx*4+3));
+    uint32_t idx = chn2idx(chn);
+
+    ADCx->IF = (0x01 << (idx * 4 + 3));
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	ADC_IntFULLStat()
-* 髡夔佽隴:	FIFO雛笢剿袨怓
-* 怀    ⻌: ADC_TypeDef * ADCx		硌隅猁掩扢离腔ADCㄛ褫龰硉婦嬤ADC
-*			uint32_t chn			猁脤戙腔籵耋ㄛ衄虴硉ADC_CH0﹜ADC_CH1﹜... ... ﹜ADC_CH7		
-* 怀    堤: uint32_t				1 蜆籵耋俇傖賸蛌遙    0 蜆籵耋帤俇傖蛌遙
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	ADC_IntFULLStat()
+* �蠘�霂湔�:	FIFO皛∩葉�剔𠶖��
+* 颲�    ��: ADC_TypeDef * ADCx		���閬�◤霈曄蔭��DC嚗�虾�硋�澆��括DC
+*			uint32_t chn			閬�䰻霂Y��𡁻�嚗峕����劈DC_CH0��DC_CH1��... ... ��DC_CH7		
+* 颲�    ��: uint32_t				1 霂仿�𡁻�摰峕�鈭�蓮��    0 霂仿�𡁻��芸��鞱蓮��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
+uint32_t ADC_IntFULLStat(ADC_TypeDef *ADCx, uint32_t chn)
 {
-	uint32_t idx = chn2idx(chn);
-	
-	return (ADCx->IF & (0x01 << (idx*4+3))) ? 1 : 0;
+    uint32_t idx = chn2idx(chn);
+
+    return (ADCx->IF & (0x01 << (idx * 4 + 3))) ? 1 : 0;
 }

+ 72 - 74
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h

@@ -1,79 +1,77 @@
 #ifndef __SWM320_ADC_H__
-#define	__SWM320_ADC_H__
-
-typedef struct {
-	uint8_t clk_src;		//ADC转换时钟源:ADC_CLKSRC_HRC、ADC_CLKSRC_VCO_DIV16、ADC_CLKSRC_VCO_DIV32、ADC_CLKSRC_VCO_DIV32
-	uint8_t clk_div;		//ADC转换时钟分频,取值1--31
-	uint8_t pga_ref;		//PGA基准:PGA_REF_INTERNAL、PGA_REF_EXTERNAL
-	uint8_t channels;		//ADC转换通道选中,ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
-	uint8_t samplAvg;		//采样取平均,触发启动ADC转换后,ADC在一个通道上连续采样、转换多次,并将它们的平均值作为该通道转换结果
-	uint8_t trig_src;		//ADC触发方式:ADC_TRIGSRC_SW、ADC_TRIGSRC_PWM、ADC_TRIGSRC_TIMR2、ADC_TRIGSRC_TIMR3
-	uint8_t Continue;		//在软件触发模式下:1 连续转换模式,启动后一直采样、转换,直到软件清除START位
-							//                  0 单次转换模式,转换完成后START位自动清除停止转换
-	uint8_t EOC_IEn;		//EOC中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
-	uint8_t OVF_IEn;		//OVF中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
-	uint8_t HFULL_IEn;		//FIFO半满中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
-	uint8_t FULL_IEn;		//FIFO  满中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
+#define __SWM320_ADC_H__
+
+typedef struct
+{
+    uint8_t clk_src;   //ADC杞�崲鏃堕挓婧愶細ADC_CLKSRC_HRC銆丄DC_CLKSRC_VCO_DIV16銆丄DC_CLKSRC_VCO_DIV32銆丄DC_CLKSRC_VCO_DIV32
+    uint8_t clk_div;   //ADC杞�崲鏃堕挓鍒嗛�锛屽彇鍊�1--31
+    uint8_t pga_ref;   //PGA鍩哄噯锛歅GA_REF_INTERNAL銆丳GA_REF_EXTERNAL
+    uint8_t channels;  //ADC杞�崲閫氶亾閫変腑锛孉DC_CH0銆丄DC_CH1銆�... ... 銆丄DC_CH7鍙婂叾缁勫悎锛堝嵆鈥滄寜浣嶆垨鈥濊繍绠楋級
+    uint8_t samplAvg;  //閲囨牱鍙栧钩鍧囷紝瑙﹀彂鍚�姩ADC杞�崲鍚庯紝ADC鍦ㄤ竴涓�€氶亾涓婅繛缁�噰鏍枫€佽浆鎹㈠�娆★紝骞跺皢瀹冧滑鐨勫钩鍧囧€间綔涓鸿�閫氶亾杞�崲缁撴灉
+    uint8_t trig_src;  //ADC瑙﹀彂鏂瑰紡锛欰DC_TRIGSRC_SW銆丄DC_TRIGSRC_PWM銆丄DC_TRIGSRC_TIMR2銆丄DC_TRIGSRC_TIMR3
+    uint8_t Continue;  //鍦ㄨ蒋浠惰Е鍙戞ā寮忎笅锛�1 杩炵画杞�崲妯″紡锛屽惎鍔ㄥ悗涓€鐩撮噰鏍枫€佽浆鎹�紝鐩村埌杞�欢娓呴櫎START浣�
+                       //                  0 鍗曟�杞�崲妯″紡锛岃浆鎹㈠畬鎴愬悗START浣嶈嚜鍔ㄦ竻闄ゅ仠姝㈣浆鎹�
+    uint8_t EOC_IEn;   //EOC涓�柇浣胯兘锛屽彲閽堝�姣忎釜閫氶亾璁剧疆锛屽叾鏈夋晥鍊间负ADC_CH0銆丄DC_CH1銆�... ... 銆丄DC_CH7鍙婂叾缁勫悎锛堝嵆鈥滄寜浣嶆垨鈥濊繍绠楋級
+    uint8_t OVF_IEn;   //OVF涓�柇浣胯兘锛屽彲閽堝�姣忎釜閫氶亾璁剧疆锛屽叾鏈夋晥鍊间负ADC_CH0銆丄DC_CH1銆�... ... 銆丄DC_CH7鍙婂叾缁勫悎锛堝嵆鈥滄寜浣嶆垨鈥濊繍绠楋級
+    uint8_t HFULL_IEn; //FIFO鍗婃弧涓�柇浣胯兘锛屽彲閽堝�姣忎釜閫氶亾璁剧疆锛屽叾鏈夋晥鍊间负ADC_CH0銆丄DC_CH1銆�... ... 銆丄DC_CH7鍙婂叾缁勫悎锛堝嵆鈥滄寜浣嶆垨鈥濊繍绠楋級
+    uint8_t FULL_IEn;  //FIFO  婊′腑鏂�娇鑳斤紝鍙�拡瀵规瘡涓�€氶亾璁剧疆锛屽叾鏈夋晥鍊间负ADC_CH0銆丄DC_CH1銆�... ... 銆丄DC_CH7鍙婂叾缁勫悎锛堝嵆鈥滄寜浣嶆垨鈥濊繍绠楋級
 } ADC_InitStructure;
 
-#define ADC_CH0		0x01
-#define ADC_CH1		0x02
-#define ADC_CH2		0x04
-#define ADC_CH3		0x08
-#define ADC_CH4		0x10
-#define ADC_CH5		0x20
-#define ADC_CH6		0x40
-#define ADC_CH7		0x80
-
-#define ADC_CLKSRC_HRC			1
-#define ADC_CLKSRC_VCO_DIV16	2
-#define ADC_CLKSRC_VCO_DIV32	3
-#define ADC_CLKSRC_VCO_DIV64	4
-
-#define ADC_AVG_SAMPLE1			0	
-#define ADC_AVG_SAMPLE2			1	//一次启动连续采样、转换2次,并计算两次结果的平均值作为转换结果
-#define ADC_AVG_SAMPLE4			3
-#define ADC_AVG_SAMPLE8			7
-#define ADC_AVG_SAMPLE16		15
-
-#define ADC_TRIGSRC_SW			0	//软件触发,即ADC->START.GO写1启动转换
-#define ADC_TRIGSRC_PWM			1
-
-#define PGA_REF_INTERNAL		1	//PGA输入共模电平由内部电路产生,ADC_REFP和ADC_REFN可悬空
-#define PGA_REF_EXTERNAL		0	//PGA输入共模电平由外部引脚提供,(ADC_REFP + ADC_REFN) 电平值须与量程相同
-
-
-void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct);		//ADC模数转换器初始化
-void ADC_Open(ADC_TypeDef * ADCx);							//ADC开启,可以软件启动、或硬件触发ADC转换
-void ADC_Close(ADC_TypeDef * ADCx);							//ADC关闭,无法软件启动、或硬件触发ADC转换
-void ADC_Start(ADC_TypeDef * ADCx);							//启动指定ADC,开始模数转换
-void ADC_Stop(ADC_TypeDef * ADCx);							//关闭指定ADC,停止模数转换
-
-uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn);		//从指定通道读取转换结果
-uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn);		//指定通道是否End Of Conversion
-
-void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns);
-
-
-void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn);		//转换完成中断使能
-void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn);		//转换完成中断禁止
-void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn);		//转换完成中断标志清除
-uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn);	//转换完成中断状态
-
-void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn);		//数据溢出中断使能
-void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn);		//数据溢出中断禁止
-void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn);		//数据溢出中断标志清除
-uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn);	//数据溢出中断状态
-
-void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO半满中断使能
-void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO半满中断禁止
-void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO半满中断标志清除
-uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn);//FIFO半满中断状态
-
-void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO满中断使能
-void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO满中断禁止
-void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn);		//FIFO满中断标志清除
-uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn);	//FIFO满中断状态
-
+#define ADC_CH0 0x01
+#define ADC_CH1 0x02
+#define ADC_CH2 0x04
+#define ADC_CH3 0x08
+#define ADC_CH4 0x10
+#define ADC_CH5 0x20
+#define ADC_CH6 0x40
+#define ADC_CH7 0x80
+
+#define ADC_CLKSRC_HRC 1
+#define ADC_CLKSRC_VCO_DIV16 2
+#define ADC_CLKSRC_VCO_DIV32 3
+#define ADC_CLKSRC_VCO_DIV64 4
+
+#define ADC_AVG_SAMPLE1 0
+#define ADC_AVG_SAMPLE2 1 //涓€娆″惎鍔ㄨ繛缁�噰鏍枫€佽浆鎹�2娆★紝骞惰�绠椾袱娆$粨鏋滅殑骞冲潎鍊间綔涓鸿浆鎹㈢粨鏋�
+#define ADC_AVG_SAMPLE4 3
+#define ADC_AVG_SAMPLE8 7
+#define ADC_AVG_SAMPLE16 15
+
+#define ADC_TRIGSRC_SW 0 //杞�欢瑙﹀彂锛屽嵆ADC->START.GO鍐�1鍚�姩杞�崲
+#define ADC_TRIGSRC_PWM 1
+
+#define PGA_REF_INTERNAL 1 //PGA杈撳叆鍏辨ā鐢靛钩鐢卞唴閮ㄧ數璺�骇鐢燂紝ADC_REFP鍜孉DC_REFN鍙�偓绌�
+#define PGA_REF_EXTERNAL 0 //PGA杈撳叆鍏辨ā鐢靛钩鐢卞�閮ㄥ紩鑴氭彁渚涳紝(ADC_REFP + ADC_REFN) 鐢靛钩鍊奸』涓庨噺绋嬬浉鍚�
+
+void ADC_Init(ADC_TypeDef *ADCx, ADC_InitStructure *initStruct); //ADC妯℃暟杞�崲鍣ㄥ垵濮嬪寲
+void ADC_Open(ADC_TypeDef *ADCx);                                //ADC寮€鍚�紝鍙�互杞�欢鍚�姩銆佹垨纭�欢瑙﹀彂ADC杞�崲
+void ADC_Close(ADC_TypeDef *ADCx);                               //ADC鍏抽棴锛屾棤娉曡蒋浠跺惎鍔ㄣ€佹垨纭�欢瑙﹀彂ADC杞�崲
+void ADC_Start(ADC_TypeDef *ADCx);                               //鍚�姩鎸囧畾ADC锛屽紑濮嬫ā鏁拌浆鎹�
+void ADC_Stop(ADC_TypeDef *ADCx);                                //鍏抽棴鎸囧畾ADC锛屽仠姝㈡ā鏁拌浆鎹�
+
+uint32_t ADC_Read(ADC_TypeDef *ADCx, uint32_t chn);  //浠庢寚瀹氶€氶亾璇诲彇杞�崲缁撴灉
+uint32_t ADC_IsEOC(ADC_TypeDef *ADCx, uint32_t chn); //鎸囧畾閫氶亾鏄�惁End Of Conversion
+
+void ADC_ChnSelect(ADC_TypeDef *ADCx, uint32_t chns);
+
+void ADC_IntEOCEn(ADC_TypeDef *ADCx, uint32_t chn);       //杞�崲瀹屾垚涓�柇浣胯兘
+void ADC_IntEOCDis(ADC_TypeDef *ADCx, uint32_t chn);      //杞�崲瀹屾垚涓�柇绂佹�
+void ADC_IntEOCClr(ADC_TypeDef *ADCx, uint32_t chn);      //杞�崲瀹屾垚涓�柇鏍囧織娓呴櫎
+uint32_t ADC_IntEOCStat(ADC_TypeDef *ADCx, uint32_t chn); //杞�崲瀹屾垚涓�柇鐘舵€�
+
+void ADC_IntOVFEn(ADC_TypeDef *ADCx, uint32_t chn);       //鏁版嵁婧㈠嚭涓�柇浣胯兘
+void ADC_IntOVFDis(ADC_TypeDef *ADCx, uint32_t chn);      //鏁版嵁婧㈠嚭涓�柇绂佹�
+void ADC_IntOVFClr(ADC_TypeDef *ADCx, uint32_t chn);      //鏁版嵁婧㈠嚭涓�柇鏍囧織娓呴櫎
+uint32_t ADC_IntOVFStat(ADC_TypeDef *ADCx, uint32_t chn); //鏁版嵁婧㈠嚭涓�柇鐘舵€�
+
+void ADC_IntHFULLEn(ADC_TypeDef *ADCx, uint32_t chn);       //FIFO鍗婃弧涓�柇浣胯兘
+void ADC_IntHFULLDis(ADC_TypeDef *ADCx, uint32_t chn);      //FIFO鍗婃弧涓�柇绂佹�
+void ADC_IntHFULLClr(ADC_TypeDef *ADCx, uint32_t chn);      //FIFO鍗婃弧涓�柇鏍囧織娓呴櫎
+uint32_t ADC_IntHFULLStat(ADC_TypeDef *ADCx, uint32_t chn); //FIFO鍗婃弧涓�柇鐘舵€�
+
+void ADC_IntFULLEn(ADC_TypeDef *ADCx, uint32_t chn);       //FIFO婊′腑鏂�娇鑳�
+void ADC_IntFULLDis(ADC_TypeDef *ADCx, uint32_t chn);      //FIFO婊′腑鏂��姝�
+void ADC_IntFULLClr(ADC_TypeDef *ADCx, uint32_t chn);      //FIFO婊′腑鏂�爣蹇楁竻闄�
+uint32_t ADC_IntFULLStat(ADC_TypeDef *ADCx, uint32_t chn); //FIFO婊′腑鏂�姸鎬�
 
 #endif //__SWM320_ADC_H__

+ 443 - 528
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称: SWM320_can.c
-* 功能说明:	SWM320单片机的CAN模块驱动库
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项: 
-* 版本日期:	V1.1.0		2017年10月25日
-* 升级记录: 
+* 鏂囦欢鍚嶇О: SWM320_can.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑CAN妯″潡椹卞姩搴�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」: 
+* 鐗堟湰鏃ユ湡:	V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,668 +21,583 @@
 #include "SWM320.h"
 #include "SWM320_can.h"
 
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_Init()
-* 功能说明:	CAN接口初始化
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			CAN_InitStructure * initStruct    包含CAN接口相关设定值的结构体
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_Init(CAN_TypeDef * CANx, CAN_InitStructure * initStruct)
-{	
-	switch((uint32_t)CANx)
-	{
-	case ((uint32_t)CAN):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_CAN_Pos);
-		break;
-	}
-	
-	CAN_Close(CANx);	//一些关键寄存器只能在CAN关闭时设置
-	
-	CANx->CR &= ~(CAN_CR_LOM_Msk | CAN_CR_STM_Msk | CAN_CR_AFM_Msk);
-	CANx->CR |= (initStruct->Mode << CAN_CR_LOM_Pos) |
-				(initStruct->FilterMode << CAN_CR_AFM_Pos);
-	
-	CANx->FILTER.AMR[3] = initStruct->FilterMask32b & 0xFF;
-	CANx->FILTER.AMR[2] = (initStruct->FilterMask32b >>  8) & 0xFF;
-	CANx->FILTER.AMR[1] = (initStruct->FilterMask32b >> 16) & 0xFF;
-	CANx->FILTER.AMR[0] = (initStruct->FilterMask32b >> 24) & 0xFF;
-	
-	CANx->FILTER.ACR[3] = initStruct->FilterCheck32b & 0xFF;
-	CANx->FILTER.ACR[2] = (initStruct->FilterCheck32b >>  8) & 0xFF;
-	CANx->FILTER.ACR[1] = (initStruct->FilterCheck32b >> 16) & 0xFF;
-	CANx->FILTER.ACR[0] = (initStruct->FilterCheck32b >> 24) & 0xFF;
-	
-	CANx->BT1 = (0 << CAN_BT1_SAM_Pos) |
-				(initStruct->CAN_BS1 << CAN_BT1_TSEG1_Pos) |
-				(initStruct->CAN_BS2 << CAN_BT1_TSEG2_Pos);
-	
-	CANx->BT0 = (initStruct->CAN_SJW << CAN_BT0_SJW_Pos) |
-				((SystemCoreClock/2/initStruct->Baudrate/(1 + (initStruct->CAN_BS1 + 1) + (initStruct->CAN_BS2 + 1)) - 1) << CAN_BT0_BRP_Pos);
-	
-	CANx->RXERR = 0;	//只能在复位模式下清除
-	CANx->TXERR = 0;
-	
-	CANx->IE = (initStruct->RXNotEmptyIEn << CAN_IE_RXDA_Pos)    |
-			   (initStruct->RXOverflowIEn << CAN_IE_RXOV_Pos)    |
-			   (initStruct->ArbitrLostIEn << CAN_IE_ARBLOST_Pos) |
-			   (initStruct->ErrPassiveIEn << CAN_IE_ERRPASS_Pos);
-	
-	switch((uint32_t)CANx)
-	{
-	case ((uint32_t)CAN):
-		if(initStruct->RXNotEmptyIEn | initStruct->RXOverflowIEn | initStruct->ArbitrLostIEn | initStruct->ErrPassiveIEn)
-		{
-			NVIC_EnableIRQ(CAN_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(CAN_IRQn);
-		}
-		break;
-	}
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_Open()
-* 功能说明:	CAN接口打开
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_Open(CAN_TypeDef * CANx)
-{
-	CANx->CR &= ~(0x01 << CAN_CR_RST_Pos);	//退出复位模式,进入工作模式
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_Close()
-* 功能说明:	CAN接口关闭
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_Close(CAN_TypeDef * CANx)
-{
-	CANx->CR |= (0x01 << CAN_CR_RST_Pos);	//进入复位模式,不能发送和接收数据
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_Transmit()
-* 功能说明:	CAN发送数据
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			uint32_t format		CAN_FRAME_STD 标准帧    CAN_FRAME_EXT 扩展帧
-*			uint32_t id			消息ID
-*			uint8_t data[]		要发送的数据
-*			uint32_t size		要发送的数据的个数
-*			uint32_t once		只发送一次,即使发送失败(仲裁丢失、发送出错、NAK)也不尝试重发
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_Transmit(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once)
-{
-	uint32_t i;
-	
-	if(format == CAN_FRAME_STD)
-	{
-		CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos)  |
-							 (0 << CAN_INFO_RTR_Pos) |
-							 (size << CAN_INFO_DLC_Pos);
-		
-		CANx->TXFRAME.DATA[0] = id >> 3;
-		CANx->TXFRAME.DATA[1] = id << 5;
-		
-		for(i = 0; i < size; i++)
-		{
-			CANx->TXFRAME.DATA[i+2] = data[i];
-		}
-	}
-	else //if(format == CAN_FRAME_EXT)
-	{
-		CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos)  |
-							 (0 << CAN_INFO_RTR_Pos) |
-							 (size << CAN_INFO_DLC_Pos);
-		
-		CANx->TXFRAME.DATA[0] = id >> 21;
-		CANx->TXFRAME.DATA[1] = id >> 13;
-		CANx->TXFRAME.DATA[2] = id >>  5;
-		CANx->TXFRAME.DATA[3] = id <<  3;
-		
-		for(i = 0; i < size; i++)
-		{
-			CANx->TXFRAME.DATA[i+4] = data[i];
-		}
-	}
-	
-	if(CANx->CR & CAN_CR_STM_Msk)
-	{
-		CANx->CMD = (1 << CAN_CMD_SRR_Pos);
-	}
-	else
-	{
-		if(once == 0)
-		{
-			CANx->CMD = (1 << CAN_CMD_TXREQ_Pos);
-		}
-		else
-		{
-			CANx->CMD = (1 << CAN_CMD_TXREQ_Pos) | (1 << CAN_CMD_ABTTX_Pos);
-		}
-	}
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_TransmitRequest()
-* 功能说明:	CAN发送远程请求,请求远程节点发送数据
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			uint32_t format		CAN_FRAME_STD 标准帧    CAN_FRAME_EXT 扩展帧
-*			uint32_t id			消息ID
-*			uint32_t once		只发送一次,即使发送失败(仲裁丢失、发送出错、NAK)也不尝试重发
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_TransmitRequest(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint32_t once)
-{
-	if(format == CAN_FRAME_STD)
-	{
-		CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos)  |
-							 (1 << CAN_INFO_RTR_Pos) |
-							 (0 << CAN_INFO_DLC_Pos);
-		
-		CANx->TXFRAME.DATA[0] = id >> 3;
-		CANx->TXFRAME.DATA[1] = id << 5;
-	}
-	else //if(format == CAN_FRAME_EXT)
-	{
-		CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos)  |
-							 (1 << CAN_INFO_RTR_Pos) |
-							 (0 << CAN_INFO_DLC_Pos);
-		
-		CANx->TXFRAME.DATA[0] = id >> 21;
-		CANx->TXFRAME.DATA[1] = id >> 13;
-		CANx->TXFRAME.DATA[2] = id >>  5;
-		CANx->TXFRAME.DATA[3] = id <<  3;
-	}
-	
-	if(once == 0)
-	{
-		CANx->CMD = (1 << CAN_CMD_TXREQ_Pos);
-	}
-	else
-	{
-		CANx->CMD = (1 << CAN_CMD_TXREQ_Pos) | (1 << CAN_CMD_ABTTX_Pos);
-	}
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_Receive()
-* 功能说明:	CAN接收数据
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			CAN_RXMessage *msg	接收到的消息存储在此结构体变量中
-* 输    出: 无
-* 注意事项: 无
-******************************************************************************************************************************************/
-void CAN_Receive(CAN_TypeDef * CANx, CAN_RXMessage *msg)
-{
-	uint32_t i;
-	msg->format = (CANx->RXFRAME.INFO & CAN_INFO_FF_Msk) >> CAN_INFO_FF_Pos;
-	
-	msg->remote = (CANx->RXFRAME.INFO & CAN_INFO_RTR_Msk) >> CAN_INFO_RTR_Pos;
-	msg->size = (CANx->RXFRAME.INFO & CAN_INFO_DLC_Msk) >> CAN_INFO_DLC_Pos;
-	
-	if(msg->format == CAN_FRAME_STD)
-	{
-		msg->id = (CANx->RXFRAME.DATA[0] << 3) | (CANx->RXFRAME.DATA[1] >> 5);
-		
-		for(i = 0; i < msg->size; i++)
-		{
-			msg->data[i] = CANx->RXFRAME.DATA[i+2];
-		}
-	}
-	else //if(msg->format == CAN_FRAME_EXT)
-	{
-		msg->id = (CANx->RXFRAME.DATA[0] << 21) | (CANx->RXFRAME.DATA[1] << 13) | (CANx->RXFRAME.DATA[2] << 5) | (CANx->RXFRAME.DATA[3] >> 3);
-		
-		for(i = 0; i < msg->size; i++)
-		{
-			msg->data[i] = CANx->RXFRAME.DATA[i+4];
-		}
-	}
-	
-	CANx->CMD = (1 << CAN_CMD_RRB_Pos);
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_TXComplete()
-* 功能说明:	发送是否完成
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已经完成    0 还未完成
-* 注意事项: 发送被Abort也会触发发送完成,但不会触发发送成功
-******************************************************************************************************************************************/
-uint32_t CAN_TXComplete(CAN_TypeDef * CANx)
-{
-	return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_TXSuccess()
-* 功能说明:	发送是否成功
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 发送成功    0 发送失败
-* 注意事项: 无
-******************************************************************************************************************************************/
-uint32_t CAN_TXSuccess(CAN_TypeDef * CANx)
-{
-	return (CANx->SR & CAN_SR_TXOK_Msk) ? 1 : 0;
-}
-
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_AbortTransmit()
-* 功能说明:	终止发送
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 正在进行的发送无法终止,但执行此命令后若发送失败不会再重发
+* 鍑芥暟鍚嶇О:	CAN_Init()
+* 鍔熻兘璇存槑:	CAN鎺ュ彛鍒濆�鍖�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			CAN_InitStructure * initStruct    鍖呭惈CAN鎺ュ彛鐩稿叧璁惧畾鍊肩殑缁撴瀯浣�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_AbortTransmit(CAN_TypeDef * CANx)
+void CAN_Init(CAN_TypeDef *CANx, CAN_InitStructure *initStruct)
 {
-	CANx->CMD = (1 << CAN_CMD_ABTTX_Pos);
-}
+    switch ((uint32_t)CANx)
+    {
+    case ((uint32_t)CAN):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_CAN_Pos);
+        break;
+    }
 
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_TXBufferReady()
-* 功能说明:	TX Buffer是否准备好可以写入消息
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已准备好    0 未准备好
-* 注意事项: 无
-******************************************************************************************************************************************/
-uint32_t CAN_TXBufferReady(CAN_TypeDef * CANx)
-{
-	return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
-}
+    CAN_Close(CANx); //涓€浜涘叧閿�瘎瀛樺櫒鍙�兘鍦–AN鍏抽棴鏃惰�缃�
 
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_RXDataAvailable()
-* 功能说明:	RX FIFO中是否有数据可读出
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 有数据可读出    0 没有数据
-* 注意事项: 无
+    CANx->CR &= ~(CAN_CR_LOM_Msk | CAN_CR_STM_Msk | CAN_CR_AFM_Msk);
+    CANx->CR |= (initStruct->Mode << CAN_CR_LOM_Pos) |
+                (initStruct->FilterMode << CAN_CR_AFM_Pos);
+
+    CANx->FILTER.AMR[3] = initStruct->FilterMask32b & 0xFF;
+    CANx->FILTER.AMR[2] = (initStruct->FilterMask32b >> 8) & 0xFF;
+    CANx->FILTER.AMR[1] = (initStruct->FilterMask32b >> 16) & 0xFF;
+    CANx->FILTER.AMR[0] = (initStruct->FilterMask32b >> 24) & 0xFF;
+
+    CANx->FILTER.ACR[3] = initStruct->FilterCheck32b & 0xFF;
+    CANx->FILTER.ACR[2] = (initStruct->FilterCheck32b >> 8) & 0xFF;
+    CANx->FILTER.ACR[1] = (initStruct->FilterCheck32b >> 16) & 0xFF;
+    CANx->FILTER.ACR[0] = (initStruct->FilterCheck32b >> 24) & 0xFF;
+
+    CANx->BT1 = (0 << CAN_BT1_SAM_Pos) |
+                (initStruct->CAN_BS1 << CAN_BT1_TSEG1_Pos) |
+                (initStruct->CAN_BS2 << CAN_BT1_TSEG2_Pos);
+
+    CANx->BT0 = (initStruct->CAN_SJW << CAN_BT0_SJW_Pos) |
+                ((SystemCoreClock / 2 / initStruct->Baudrate / (1 + (initStruct->CAN_BS1 + 1) + (initStruct->CAN_BS2 + 1)) - 1) << CAN_BT0_BRP_Pos);
+
+    CANx->RXERR = 0; //鍙�兘鍦ㄥ�浣嶆ā寮忎笅娓呴櫎
+    CANx->TXERR = 0;
+
+    CANx->IE = (initStruct->RXNotEmptyIEn << CAN_IE_RXDA_Pos) |
+               (initStruct->RXOverflowIEn << CAN_IE_RXOV_Pos) |
+               (initStruct->ArbitrLostIEn << CAN_IE_ARBLOST_Pos) |
+               (initStruct->ErrPassiveIEn << CAN_IE_ERRPASS_Pos);
+
+    switch ((uint32_t)CANx)
+    {
+    case ((uint32_t)CAN):
+        if (initStruct->RXNotEmptyIEn | initStruct->RXOverflowIEn | initStruct->ArbitrLostIEn | initStruct->ErrPassiveIEn)
+        {
+            NVIC_EnableIRQ(CAN_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(CAN_IRQn);
+        }
+        break;
+    }
+}
+
+/****************************************************************************************************************************************** 
+* 鍑芥暟鍚嶇О:	CAN_Open()
+* 鍔熻兘璇存槑:	CAN鎺ュ彛鎵撳紑
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
+******************************************************************************************************************************************/
+void CAN_Open(CAN_TypeDef *CANx)
+{
+    CANx->CR &= ~(0x01 << CAN_CR_RST_Pos); //閫€鍑哄�浣嶆ā寮忥紝杩涘叆宸ヤ綔妯″紡
+}
+
+/****************************************************************************************************************************************** 
+* 鍑芥暟鍚嶇О:	CAN_Close()
+* 鍔熻兘璇存槑:	CAN鎺ュ彛鍏抽棴
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
+******************************************************************************************************************************************/
+void CAN_Close(CAN_TypeDef *CANx)
+{
+    CANx->CR |= (0x01 << CAN_CR_RST_Pos); //杩涘叆澶嶄綅妯″紡锛屼笉鑳藉彂閫佸拰鎺ユ敹鏁版嵁
+}
+
+/****************************************************************************************************************************************** 
+* 鍑芥暟鍚嶇О:	CAN_Transmit()
+* 鍔熻兘璇存槑:	CAN鍙戦€佹暟鎹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			uint32_t format		CAN_FRAME_STD 鏍囧噯甯�    CAN_FRAME_EXT 鎵╁睍甯�
+*			uint32_t id			娑堟伅ID
+*			uint8_t data[]		瑕佸彂閫佺殑鏁版嵁
+*			uint32_t size		瑕佸彂閫佺殑鏁版嵁鐨勪釜鏁�
+*			uint32_t once		鍙�彂閫佷竴娆★紝鍗充娇鍙戦€佸け璐ワ紙浠茶�涓㈠け銆佸彂閫佸嚭閿欍€丯AK锛変篃涓嶅皾璇曢噸鍙�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
+******************************************************************************************************************************************/
+void CAN_Transmit(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once)
+{
+    uint32_t i;
+
+    if (format == CAN_FRAME_STD)
+    {
+        CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos) |
+                             (0 << CAN_INFO_RTR_Pos) |
+                             (size << CAN_INFO_DLC_Pos);
+
+        CANx->TXFRAME.DATA[0] = id >> 3;
+        CANx->TXFRAME.DATA[1] = id << 5;
+
+        for (i = 0; i < size; i++)
+        {
+            CANx->TXFRAME.DATA[i + 2] = data[i];
+        }
+    }
+    else //if(format == CAN_FRAME_EXT)
+    {
+        CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos) |
+                             (0 << CAN_INFO_RTR_Pos) |
+                             (size << CAN_INFO_DLC_Pos);
+
+        CANx->TXFRAME.DATA[0] = id >> 21;
+        CANx->TXFRAME.DATA[1] = id >> 13;
+        CANx->TXFRAME.DATA[2] = id >> 5;
+        CANx->TXFRAME.DATA[3] = id << 3;
+
+        for (i = 0; i < size; i++)
+        {
+            CANx->TXFRAME.DATA[i + 4] = data[i];
+        }
+    }
+
+    if (CANx->CR & CAN_CR_STM_Msk)
+    {
+        CANx->CMD = (1 << CAN_CMD_SRR_Pos);
+    }
+    else
+    {
+        if (once == 0)
+        {
+            CANx->CMD = (1 << CAN_CMD_TXREQ_Pos);
+        }
+        else
+        {
+            CANx->CMD = (1 << CAN_CMD_TXREQ_Pos) | (1 << CAN_CMD_ABTTX_Pos);
+        }
+    }
+}
+
+/****************************************************************************************************************************************** 
+* 鍑芥暟鍚嶇О:	CAN_TransmitRequest()
+* 鍔熻兘璇存槑:	CAN鍙戦€佽繙绋嬭�姹傦紝璇锋眰杩滅▼鑺傜偣鍙戦€佹暟鎹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			uint32_t format		CAN_FRAME_STD 鏍囧噯甯�    CAN_FRAME_EXT 鎵╁睍甯�
+*			uint32_t id			娑堟伅ID
+*			uint32_t once		鍙�彂閫佷竴娆★紝鍗充娇鍙戦€佸け璐ワ紙浠茶�涓㈠け銆佸彂閫佸嚭閿欍€丯AK锛変篃涓嶅皾璇曢噸鍙�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_RXDataAvailable(CAN_TypeDef * CANx)
+void CAN_TransmitRequest(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint32_t once)
 {
-	return (CANx->SR & CAN_SR_RXDA_Msk) ? 1 : 0;
+    if (format == CAN_FRAME_STD)
+    {
+        CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos) |
+                             (1 << CAN_INFO_RTR_Pos) |
+                             (0 << CAN_INFO_DLC_Pos);
+
+        CANx->TXFRAME.DATA[0] = id >> 3;
+        CANx->TXFRAME.DATA[1] = id << 5;
+    }
+    else //if(format == CAN_FRAME_EXT)
+    {
+        CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos) |
+                             (1 << CAN_INFO_RTR_Pos) |
+                             (0 << CAN_INFO_DLC_Pos);
+
+        CANx->TXFRAME.DATA[0] = id >> 21;
+        CANx->TXFRAME.DATA[1] = id >> 13;
+        CANx->TXFRAME.DATA[2] = id >> 5;
+        CANx->TXFRAME.DATA[3] = id << 3;
+    }
+
+    if (once == 0)
+    {
+        CANx->CMD = (1 << CAN_CMD_TXREQ_Pos);
+    }
+    else
+    {
+        CANx->CMD = (1 << CAN_CMD_TXREQ_Pos) | (1 << CAN_CMD_ABTTX_Pos);
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_SetBaudrate()
-* 功能说明:	设置波特率
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			uint32_t baudrate	波特率,即位传输速率
-*			uint32_t CAN_BS1	CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq
-*			uint32_t CAN_BS2	CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq
-*			uint32_t CAN_SJW	CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq
-* 输    出: 无
-* 注意事项: 设置前需要先调用CAN_Close()关闭CAN模块
+* 鍑芥暟鍚嶇О:	CAN_Receive()
+* 鍔熻兘璇存槑:	CAN鎺ユ敹鏁版嵁
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			CAN_RXMessage *msg	鎺ユ敹鍒扮殑娑堟伅瀛樺偍鍦ㄦ�缁撴瀯浣撳彉閲忎腑
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_SetBaudrate(CAN_TypeDef * CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW)
+void CAN_Receive(CAN_TypeDef *CANx, CAN_RXMessage *msg)
 {
-	CANx->BT1 = (0 << CAN_BT1_SAM_Pos) |
-				(CAN_BS1 << CAN_BT1_TSEG1_Pos) |
-				(CAN_BS2 << CAN_BT1_TSEG2_Pos);
-	
-	CANx->BT0 = (CAN_SJW << CAN_BT0_SJW_Pos) |
-				((SystemCoreClock/2/baudrate/(1 + (CAN_BS1 + 1) + (CAN_BS2 + 1)) - 1) << CAN_BT0_BRP_Pos);
+    uint32_t i;
+    msg->format = (CANx->RXFRAME.INFO & CAN_INFO_FF_Msk) >> CAN_INFO_FF_Pos;
+
+    msg->remote = (CANx->RXFRAME.INFO & CAN_INFO_RTR_Msk) >> CAN_INFO_RTR_Pos;
+    msg->size = (CANx->RXFRAME.INFO & CAN_INFO_DLC_Msk) >> CAN_INFO_DLC_Pos;
+
+    if (msg->format == CAN_FRAME_STD)
+    {
+        msg->id = (CANx->RXFRAME.DATA[0] << 3) | (CANx->RXFRAME.DATA[1] >> 5);
+
+        for (i = 0; i < msg->size; i++)
+        {
+            msg->data[i] = CANx->RXFRAME.DATA[i + 2];
+        }
+    }
+    else //if(msg->format == CAN_FRAME_EXT)
+    {
+        msg->id = (CANx->RXFRAME.DATA[0] << 21) | (CANx->RXFRAME.DATA[1] << 13) | (CANx->RXFRAME.DATA[2] << 5) | (CANx->RXFRAME.DATA[3] >> 3);
+
+        for (i = 0; i < msg->size; i++)
+        {
+            msg->data[i] = CANx->RXFRAME.DATA[i + 4];
+        }
+    }
+
+    CANx->CMD = (1 << CAN_CMD_RRB_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_SetFilter32b()
-* 功能说明:	设置接收滤波器,1个32位滤波器
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			uint32_t check		与mask一起决定了接收到的Message是否是自己需要的:check & (~mask) == ID & (~mask)的Message通过过滤
-*			uint32_t mask
-* 输    出: 无
-* 注意事项: 设置前需要先调用CAN_Close()关闭CAN模块
-******************************************************************************************************************************************/
-void CAN_SetFilter32b(CAN_TypeDef * CANx, uint32_t check, uint32_t mask)
-{
-	CANx->CR &= ~CAN_CR_AFM_Msk;
-	CANx->CR |= (CAN_FILTER_32b << CAN_CR_AFM_Pos);
-	
-	CANx->FILTER.AMR[3] =  mask & 0xFF;
-	CANx->FILTER.AMR[2] = (mask >>  8) & 0xFF;
-	CANx->FILTER.AMR[1] = (mask >> 16) & 0xFF;
-	CANx->FILTER.AMR[0] = (mask >> 24) & 0xFF;
-	
-	CANx->FILTER.ACR[3] =  check & 0xFF;
-	CANx->FILTER.ACR[2] = (check >>  8) & 0xFF;
-	CANx->FILTER.ACR[1] = (check >> 16) & 0xFF;
-	CANx->FILTER.ACR[0] = (check >> 24) & 0xFF;
-}
-
-/****************************************************************************************************************************************** 
-* 函数名称:	CAN_SetFilter16b()
-* 功能说明:	设置接收滤波器,2个16位滤波器
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-*			uint16_t check1		与mask一起决定了接收到的Message是否是自己需要的:check & (~mask) == ID & (~mask)的Message通过过滤
-*			uint16_t mask1
-*			uint16_t check2
-*			uint16_t mask2
-* 输    出: 无
-* 注意事项: 设置前需要先调用CAN_Close()关闭CAN模块
+* 鍑芥暟鍚嶇О:	CAN_TXComplete()
+* 鍔熻兘璇存槑:	鍙戦€佹槸鍚﹀畬鎴�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: uint32_t			1 宸茬粡瀹屾垚    0 杩樻湭瀹屾垚
+* 娉ㄦ剰浜嬮」: 鍙戦€佽�Abort涔熶細瑙﹀彂鍙戦€佸畬鎴愶紝浣嗕笉浼氳Е鍙戝彂閫佹垚鍔�
 ******************************************************************************************************************************************/
-void CAN_SetFilter16b(CAN_TypeDef * CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2)
+uint32_t CAN_TXComplete(CAN_TypeDef *CANx)
 {
-	CANx->CR &= ~CAN_CR_AFM_Msk;
-	CANx->CR |= (CAN_FILTER_16b << CAN_CR_AFM_Pos);
-	
-	CANx->FILTER.AMR[3] =  mask1 & 0xFF;
-	CANx->FILTER.AMR[2] = (mask1 >>  8) & 0xFF;
-	CANx->FILTER.AMR[1] =  mask2 & 0xFF;
-	CANx->FILTER.AMR[0] = (mask2 >>  8) & 0xFF;
-	
-	CANx->FILTER.ACR[3] =  check1 & 0xFF;
-	CANx->FILTER.ACR[2] = (check1 >>  8) & 0xFF;
-	CANx->FILTER.ACR[1] =  check2 & 0xFF;
-	CANx->FILTER.ACR[0] = (check2 >>  8) & 0xFF;
+    return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXNotEmptyEn()
-* 功能说明:	当RX FIFO中有数据时(非空)触发中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_TXSuccess()
+* 鍔熻兘璇存槑:	鍙戦€佹槸鍚︽垚鍔�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: uint32_t			1 鍙戦€佹垚鍔�    0 鍙戦€佸け璐�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTRXNotEmptyEn(CAN_TypeDef * CANx)
+uint32_t CAN_TXSuccess(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_RXDA_Pos);
+    return (CANx->SR & CAN_SR_TXOK_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXNotEmptyDis()
-* 功能说明:	当RX FIFO中有数据时(非空)触发中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_AbortTransmit()
+* 鍔熻兘璇存槑:	缁堟�鍙戦€�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 姝e湪杩涜�鐨勫彂閫佹棤娉曠粓姝�紝浣嗘墽琛屾�鍛戒护鍚庤嫢鍙戦€佸け璐ヤ笉浼氬啀閲嶅彂
 ******************************************************************************************************************************************/
-void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx)
+void CAN_AbortTransmit(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_RXDA_Pos);
+    CANx->CMD = (1 << CAN_CMD_ABTTX_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXNotEmptyStat()
-* 功能说明:	RX FIFO非空中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_TXBufferReady()
+* 鍔熻兘璇存槑:	TX Buffer鏄�惁鍑嗗�濂藉彲浠ュ啓鍏ユ秷鎭�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: uint32_t			1 宸插噯澶囧ソ    0 鏈�噯澶囧ソ
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx)
+uint32_t CAN_TXBufferReady(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_RXDA_Msk) ? 1 : 0;
+    return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTTXBufEmptyEn()
-* 功能说明:	当TX Buffer空时触发中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_RXDataAvailable()
+* 鍔熻兘璇存槑:	RX FIFO涓�槸鍚︽湁鏁版嵁鍙��鍑�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: uint32_t			1 鏈夋暟鎹�彲璇诲嚭    0 娌℃湁鏁版嵁
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx)
+uint32_t CAN_RXDataAvailable(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_TXBR_Pos);
+    return (CANx->SR & CAN_SR_RXDA_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTTXBufEmptyDis()
-* 功能说明:	当TX Buffer空时触发中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_SetBaudrate()
+* 鍔熻兘璇存槑:	璁剧疆娉㈢壒鐜�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			uint32_t baudrate	娉㈢壒鐜囷紝鍗充綅浼犺緭閫熺巼
+*			uint32_t CAN_BS1	CAN_BS1_1tq銆丆AN_BS1_2tq銆�... ... 銆丆AN_BS1_16tq
+*			uint32_t CAN_BS2	CAN_BS2_1tq銆丆AN_BS2_2tq銆�... ... 銆丆AN_BS2_8tq
+*			uint32_t CAN_SJW	CAN_SJW_1tq銆丆AN_SJW_2tq銆丆AN_SJW_3tq銆丆AN_SJW_4tq
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 璁剧疆鍓嶉渶瑕佸厛璋冪敤CAN_Close()鍏抽棴CAN妯″潡
 ******************************************************************************************************************************************/
-void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx)
+void CAN_SetBaudrate(CAN_TypeDef *CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW)
 {
-	CANx->IE &= ~(1 << CAN_IE_TXBR_Pos);
+    CANx->BT1 = (0 << CAN_BT1_SAM_Pos) |
+                (CAN_BS1 << CAN_BT1_TSEG1_Pos) |
+                (CAN_BS2 << CAN_BT1_TSEG2_Pos);
+
+    CANx->BT0 = (CAN_SJW << CAN_BT0_SJW_Pos) |
+                ((SystemCoreClock / 2 / baudrate / (1 + (CAN_BS1 + 1) + (CAN_BS2 + 1)) - 1) << CAN_BT0_BRP_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTTXBufEmptyStat()
-* 功能说明:	TX Buffer空中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_SetFilter32b()
+* 鍔熻兘璇存槑:	璁剧疆鎺ユ敹婊ゆ尝鍣�紝1涓�32浣嶆护娉㈠櫒
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			uint32_t check		涓巑ask涓€璧峰喅瀹氫簡鎺ユ敹鍒扮殑Message鏄�惁鏄�嚜宸遍渶瑕佺殑锛歝heck & (~mask) == ID & (~mask)鐨凪essage閫氳繃杩囨护
+*			uint32_t mask
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 璁剧疆鍓嶉渶瑕佸厛璋冪敤CAN_Close()鍏抽棴CAN妯″潡
 ******************************************************************************************************************************************/
-uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx)
+void CAN_SetFilter32b(CAN_TypeDef *CANx, uint32_t check, uint32_t mask)
 {
-	return (CANx->IF & CAN_IF_TXBR_Msk) ? 1 : 0;
+    CANx->CR &= ~CAN_CR_AFM_Msk;
+    CANx->CR |= (CAN_FILTER_32b << CAN_CR_AFM_Pos);
+
+    CANx->FILTER.AMR[3] = mask & 0xFF;
+    CANx->FILTER.AMR[2] = (mask >> 8) & 0xFF;
+    CANx->FILTER.AMR[1] = (mask >> 16) & 0xFF;
+    CANx->FILTER.AMR[0] = (mask >> 24) & 0xFF;
+
+    CANx->FILTER.ACR[3] = check & 0xFF;
+    CANx->FILTER.ACR[2] = (check >> 8) & 0xFF;
+    CANx->FILTER.ACR[1] = (check >> 16) & 0xFF;
+    CANx->FILTER.ACR[0] = (check >> 24) & 0xFF;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrWarningEn()
-* 功能说明:	TXERR/RXERR计数值达到Error Warning Limit时触发中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_SetFilter16b()
+* 鍔熻兘璇存槑:	璁剧疆鎺ユ敹婊ゆ尝鍣�紝2涓�16浣嶆护娉㈠櫒
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+*			uint16_t check1		涓巑ask涓€璧峰喅瀹氫簡鎺ユ敹鍒扮殑Message鏄�惁鏄�嚜宸遍渶瑕佺殑锛歝heck & (~mask) == ID & (~mask)鐨凪essage閫氳繃杩囨护
+*			uint16_t mask1
+*			uint16_t check2
+*			uint16_t mask2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 璁剧疆鍓嶉渶瑕佸厛璋冪敤CAN_Close()鍏抽棴CAN妯″潡
 ******************************************************************************************************************************************/
-void CAN_INTErrWarningEn(CAN_TypeDef * CANx)
+void CAN_SetFilter16b(CAN_TypeDef *CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2)
 {
-	CANx->IE |= (1 << CAN_IE_ERRWARN_Pos);
+    CANx->CR &= ~CAN_CR_AFM_Msk;
+    CANx->CR |= (CAN_FILTER_16b << CAN_CR_AFM_Pos);
+
+    CANx->FILTER.AMR[3] = mask1 & 0xFF;
+    CANx->FILTER.AMR[2] = (mask1 >> 8) & 0xFF;
+    CANx->FILTER.AMR[1] = mask2 & 0xFF;
+    CANx->FILTER.AMR[0] = (mask2 >> 8) & 0xFF;
+
+    CANx->FILTER.ACR[3] = check1 & 0xFF;
+    CANx->FILTER.ACR[2] = (check1 >> 8) & 0xFF;
+    CANx->FILTER.ACR[1] = check2 & 0xFF;
+    CANx->FILTER.ACR[0] = (check2 >> 8) & 0xFF;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrWarningDis()
-* 功能说明:	TXERR/RXERR计数值达到Error Warning Limit时触发中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTRXNotEmptyEn()
+* 鍔熻兘璇存槑:	褰揜X FIFO涓�湁鏁版嵁鏃讹紙闈炵┖锛夎Е鍙戜腑鏂�娇鑳�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTErrWarningDis(CAN_TypeDef * CANx)
+void CAN_INTRXNotEmptyEn(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos);
+    CANx->IE |= (1 << CAN_IE_RXDA_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrWarningStat()
-* 功能说明:	TXERR/RXERR计数值达到Error Warning Limit中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTRXNotEmptyDis()
+* 鍔熻兘璇存槑:	褰揜X FIFO涓�湁鏁版嵁鏃讹紙闈炵┖锛夎Е鍙戜腑鏂��姝�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx)
+void CAN_INTRXNotEmptyDis(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_ERRWARN_Msk) ? 1 : 0;
+    CANx->IE &= ~(1 << CAN_IE_RXDA_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXOverflowEn()
-* 功能说明:	RX FIFO 溢出时触发中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTTXBufEmptyEn()
+* 鍔熻兘璇存槑:	褰揟X Buffer绌烘椂瑙﹀彂涓�柇浣胯兘
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowEn(CAN_TypeDef * CANx)
+void CAN_INTTXBufEmptyEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_RXOV_Pos);
+    CANx->IE |= (1 << CAN_IE_TXBR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXOverflowDis()
-* 功能说明:	RX FIFO 溢出时触发中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTTXBufEmptyDis()
+* 鍔熻兘璇存槑:	褰揟X Buffer绌烘椂瑙﹀彂涓�柇绂佹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowDis(CAN_TypeDef * CANx)
+void CAN_INTTXBufEmptyDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_RXOV_Pos);
+    CANx->IE &= ~(1 << CAN_IE_TXBR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXOverflowStat()
-* 功能说明:	RX FIFO 溢出中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTErrWarningEn()
+* 鍔熻兘璇存槑:	TXERR/RXERR璁℃暟鍊艰揪鍒癊rror Warning Limit鏃惰Е鍙戜腑鏂�娇鑳�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx)
+void CAN_INTErrWarningEn(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_RXOV_Msk) ? 1 : 0;
+    CANx->IE |= (1 << CAN_IE_ERRWARN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTRXOverflowClear()
-* 功能说明:	RX FIFO 溢出中断清除
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTErrWarningDis()
+* 鍔熻兘璇存槑:	TXERR/RXERR璁℃暟鍊艰揪鍒癊rror Warning Limit鏃惰Е鍙戜腑鏂��姝�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowClear(CAN_TypeDef * CANx)
+void CAN_INTErrWarningDis(CAN_TypeDef *CANx)
 {
-	CANx->CMD = (1 << CAN_CMD_CLROV_Pos);
+    CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTWakeupEn()
-* 功能说明:	唤醒事件触发中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTRXOverflowEn()
+* 鍔熻兘璇存槑:	RX FIFO 婧㈠嚭鏃惰Е鍙戜腑鏂�娇鑳�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTWakeupEn(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_WKUP_Pos);
+    CANx->IE |= (1 << CAN_IE_RXOV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTWakeupDis()
-* 功能说明:	唤醒事件触发中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTRXOverflowDis()
+* 鍔熻兘璇存槑:	RX FIFO 婧㈠嚭鏃惰Е鍙戜腑鏂��姝�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTWakeupDis(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_WKUP_Pos);
+    CANx->IE &= ~(1 << CAN_IE_RXOV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTWakeupStat()
-* 功能说明:	唤醒事件中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTRXOverflowClear()
+* 鍔熻兘璇存槑:	RX FIFO 婧㈠嚭涓�柇娓呴櫎
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowClear(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_WKUP_Msk) ? 1 : 0;
+    CANx->CMD = (1 << CAN_CMD_CLROV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrPassiveEn()
-* 功能说明:	TXERR/RXERR计数值达到127时中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTWakeupEn()
+* 鍔熻兘璇存槑:	鍞ら啋浜嬩欢瑙﹀彂涓�柇浣胯兘
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTErrPassiveEn(CAN_TypeDef * CANx)
+void CAN_INTWakeupEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_ERRPASS_Pos);
+    CANx->IE |= (1 << CAN_IE_WKUP_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrPassiveDis()
-* 功能说明:	TXERR/RXERR计数值达到127时中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTWakeupDis()
+* 鍔熻兘璇存槑:	鍞ら啋浜嬩欢瑙﹀彂涓�柇绂佹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTErrPassiveDis(CAN_TypeDef * CANx)
+void CAN_INTWakeupDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos);
+    CANx->IE &= ~(1 << CAN_IE_WKUP_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTErrPassiveStat()
-* 功能说明:	TXERR/RXERR计数值达到127中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTErrPassiveEn()
+* 鍔熻兘璇存槑:	TXERR/RXERR璁℃暟鍊艰揪鍒�127鏃朵腑鏂�娇鑳�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx)
+void CAN_INTErrPassiveEn(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_ERRPASS_Msk) ? 1 : 0;
+    CANx->IE |= (1 << CAN_IE_ERRPASS_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTArbitrLostEn()
-* 功能说明:	仲裁失败中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTErrPassiveDis()
+* 鍔熻兘璇存槑:	TXERR/RXERR璁℃暟鍊艰揪鍒�127鏃朵腑鏂��姝�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTArbitrLostEn(CAN_TypeDef * CANx)
+void CAN_INTErrPassiveDis(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_ARBLOST_Pos);
+    CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTArbitrLostDis()
-* 功能说明:	仲裁失败中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTArbitrLostEn()
+* 鍔熻兘璇存槑:	浠茶�澶辫触涓�柇浣胯兘
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTArbitrLostDis(CAN_TypeDef * CANx)
+void CAN_INTArbitrLostEn(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ARBLOST_Pos);
+    CANx->IE |= (1 << CAN_IE_ARBLOST_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTArbitrLostStat()
-* 功能说明:	仲裁失败中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTArbitrLostDis()
+* 鍔熻兘璇存槑:	浠茶�澶辫触涓�柇绂佹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx)
+void CAN_INTArbitrLostDis(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_ARBLOST_Msk) ? 1 : 0;
+    CANx->IE &= ~(1 << CAN_IE_ARBLOST_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTBusErrorEn()
-* 功能说明:	总线错误中断使能
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTBusErrorEn()
+* 鍔熻兘璇存槑:	鎬荤嚎閿欒�涓�柇浣胯兘
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTBusErrorEn(CAN_TypeDef * CANx)
+void CAN_INTBusErrorEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_BUSERR_Pos);
+    CANx->IE |= (1 << CAN_IE_BUSERR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTBusErrorDis()
-* 功能说明:	总线错误中断禁止
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTBusErrorDis()
+* 鍔熻兘璇存槑:	鎬荤嚎閿欒�涓�柇绂佹�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void CAN_INTBusErrorDis(CAN_TypeDef * CANx)
+void CAN_INTBusErrorDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_BUSERR_Pos);
+    CANx->IE &= ~(1 << CAN_IE_BUSERR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	CAN_INTBusErrorStat()
-* 功能说明:	总线错误中断是否触发
-* 输    入: CAN_TypeDef * CANx	指定要被设置的CAN接口,有效值包括CAN
-* 输    出: uint32_t			1 已触发    0 未触发
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	CAN_INTStat()
+* 鍔熻兘璇存槑:	鏌ヨ�涓�柇鐘舵€�
+* 杈�    鍏�: CAN_TypeDef * CANx	鎸囧畾瑕佽�璁剧疆鐨凜AN鎺ュ彛锛屾湁鏁堝€煎寘鎷珻AN
+* 杈�    鍑�: uint32_t			褰撳墠涓�柇鐘舵€�
+* 娉ㄦ剰浜嬮」: CANx->IF璇诲彇娓呴浂锛屽洜姝ゅ湪涓�柇ISR涓�彧鑳借�鍙栦竴娆★紝涓嶈兘澶氭�璇诲彇
 ******************************************************************************************************************************************/
-uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx)
+uint32_t CAN_INTStat(CAN_TypeDef *CANx)
 {
-	return (CANx->IF & CAN_IF_BUSERR_Msk) ? 1 : 0;
+    return CANx->IF;
 }

+ 110 - 112
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h

@@ -1,136 +1,134 @@
 #ifndef __SWM320_CAN_H__
 #define __SWM320_CAN_H__
 
-#define CAN_FRAME_STD	0
-#define CAN_FRAME_EXT	1
-
-typedef struct {
-	uint8_t  Mode;			//CAN_MODE_NORMAL、CAN_MODE_LISTEN、CAN_MODE_SELFTEST
-	uint8_t  CAN_BS1;		//CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq
-	uint8_t  CAN_BS2;		//CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq
-	uint8_t  CAN_SJW;		//CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq
-	uint32_t Baudrate;		//波特率,即位传输速率,取值1--1000000
-	uint8_t  FilterMode;	//CAN_FILTER_16b、CAN_FILTER_32b
-	union {
-		uint32_t FilterMask32b;		//FilterCheck & (~FilterMask) == ID & (~FilterMask)的Message通过过滤
-		struct {					// 0 must match    1 don't care
-			uint16_t FilterMask16b1;
-			uint16_t FilterMask16b2;
-		};
-	};
-	union {
-		uint32_t FilterCheck32b;
-		struct {
-			uint16_t FilterCheck16b1;
-			uint16_t FilterCheck16b2;
-		};
-	};
-	uint8_t  RXNotEmptyIEn;		//接收FIFO非空,有数据可读
-	uint8_t  RXOverflowIEn;		//接收FIFO溢出,有数据丢失
-	uint8_t  ArbitrLostIEn;		//控制器丢失仲裁变成接收方
-	uint8_t  ErrPassiveIEn;		//接收/发送错误计数值达到127
+#define CAN_FRAME_STD 0
+#define CAN_FRAME_EXT 1
+
+typedef struct
+{
+    uint8_t Mode;       //CAN_MODE_NORMAL銆丆AN_MODE_LISTEN銆丆AN_MODE_SELFTEST
+    uint8_t CAN_BS1;    //CAN_BS1_1tq銆丆AN_BS1_2tq銆�... ... 銆丆AN_BS1_16tq
+    uint8_t CAN_BS2;    //CAN_BS2_1tq銆丆AN_BS2_2tq銆�... ... 銆丆AN_BS2_8tq
+    uint8_t CAN_SJW;    //CAN_SJW_1tq銆丆AN_SJW_2tq銆丆AN_SJW_3tq銆丆AN_SJW_4tq
+    uint32_t Baudrate;  //娉㈢壒鐜囷紝鍗充綅浼犺緭閫熺巼锛屽彇鍊�1--1000000
+    uint8_t FilterMode; //CAN_FILTER_16b銆丆AN_FILTER_32b
+    union
+    {
+        uint32_t FilterMask32b; //FilterCheck & (~FilterMask) == ID & (~FilterMask)鐨凪essage閫氳繃杩囨护
+        struct
+        { // 0 must match    1 don't care
+            uint16_t FilterMask16b1;
+            uint16_t FilterMask16b2;
+        };
+    };
+    union
+    {
+        uint32_t FilterCheck32b;
+        struct
+        {
+            uint16_t FilterCheck16b1;
+            uint16_t FilterCheck16b2;
+        };
+    };
+    uint8_t RXNotEmptyIEn; //鎺ユ敹FIFO闈炵┖锛屾湁鏁版嵁鍙��
+    uint8_t RXOverflowIEn; //鎺ユ敹FIFO婧㈠嚭锛屾湁鏁版嵁涓㈠け
+    uint8_t ArbitrLostIEn; //鎺у埗鍣ㄤ涪澶变徊瑁佸彉鎴愭帴鏀舵柟
+    uint8_t ErrPassiveIEn; //鎺ユ敹/鍙戦€侀敊璇��鏁板€艰揪鍒�127
 } CAN_InitStructure;
 
-#define CAN_MODE_NORMAL		0	//常规模式
-#define CAN_MODE_LISTEN		1	//监听模式
-#define CAN_MODE_SELFTEST	2	//自测模式
-
-#define CAN_BS1_1tq			0
-#define CAN_BS1_2tq			1
-#define CAN_BS1_3tq			2
-#define CAN_BS1_4tq			3
-#define CAN_BS1_5tq			4
-#define CAN_BS1_6tq			5
-#define CAN_BS1_7tq			6
-#define CAN_BS1_8tq			7
-#define CAN_BS1_9tq			8
-#define CAN_BS1_10tq		9
-#define CAN_BS1_11tq		10
-#define CAN_BS1_12tq		11
-#define CAN_BS1_13tq		12
-#define CAN_BS1_14tq		13
-#define CAN_BS1_15tq		14
-#define CAN_BS1_16tq		15
-
-#define CAN_BS2_1tq			0
-#define CAN_BS2_2tq			1
-#define CAN_BS2_3tq			2
-#define CAN_BS2_4tq			3
-#define CAN_BS2_5tq			4
-#define CAN_BS2_6tq			5
-#define CAN_BS2_7tq			6
-#define CAN_BS2_8tq			7
-
-#define CAN_SJW_1tq			0
-#define CAN_SJW_2tq			1
-#define CAN_SJW_3tq			2
-#define CAN_SJW_4tq			3
-
-#define CAN_FILTER_16b		0	//两个16位过滤器
-#define CAN_FILTER_32b		1	//一个32位过滤器
-
-typedef struct {
-	uint32_t id;		//消息ID
-	uint8_t  format;	//帧格式:CAN_FRAME_STD、CAN_FRAME_EXT
-	uint8_t  remote;	//消息是否为远程帧
-	uint8_t  size;		//接收到的数据个数
-	uint8_t  data[8];	//接收到的数据
+#define CAN_MODE_NORMAL 0   //甯歌�妯″紡
+#define CAN_MODE_LISTEN 1   //鐩戝惉妯″紡
+#define CAN_MODE_SELFTEST 2 //鑷�祴妯″紡
+
+#define CAN_BS1_1tq 0
+#define CAN_BS1_2tq 1
+#define CAN_BS1_3tq 2
+#define CAN_BS1_4tq 3
+#define CAN_BS1_5tq 4
+#define CAN_BS1_6tq 5
+#define CAN_BS1_7tq 6
+#define CAN_BS1_8tq 7
+#define CAN_BS1_9tq 8
+#define CAN_BS1_10tq 9
+#define CAN_BS1_11tq 10
+#define CAN_BS1_12tq 11
+#define CAN_BS1_13tq 12
+#define CAN_BS1_14tq 13
+#define CAN_BS1_15tq 14
+#define CAN_BS1_16tq 15
+
+#define CAN_BS2_1tq 0
+#define CAN_BS2_2tq 1
+#define CAN_BS2_3tq 2
+#define CAN_BS2_4tq 3
+#define CAN_BS2_5tq 4
+#define CAN_BS2_6tq 5
+#define CAN_BS2_7tq 6
+#define CAN_BS2_8tq 7
+
+#define CAN_SJW_1tq 0
+#define CAN_SJW_2tq 1
+#define CAN_SJW_3tq 2
+#define CAN_SJW_4tq 3
+
+#define CAN_FILTER_16b 0 //涓や釜16浣嶈繃婊ゅ櫒
+#define CAN_FILTER_32b 1 //涓€涓�32浣嶈繃婊ゅ櫒
+
+typedef struct
+{
+    uint32_t id;     //娑堟伅ID
+    uint8_t format;  //甯ф牸寮忥細CAN_FRAME_STD銆丆AN_FRAME_EXT
+    uint8_t remote;  //娑堟伅鏄�惁涓鸿繙绋嬪抚
+    uint8_t size;    //鎺ユ敹鍒扮殑鏁版嵁涓�暟
+    uint8_t data[8]; //鎺ユ敹鍒扮殑鏁版嵁
 } CAN_RXMessage;
 
+void CAN_Init(CAN_TypeDef *CANx, CAN_InitStructure *initStruct);
+void CAN_Open(CAN_TypeDef *CANx);
+void CAN_Close(CAN_TypeDef *CANx);
 
-void CAN_Init(CAN_TypeDef * CANx, CAN_InitStructure * initStruct);
-void CAN_Open(CAN_TypeDef * CANx);
-void CAN_Close(CAN_TypeDef * CANx);
+void CAN_Transmit(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once);
+void CAN_TransmitRequest(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint32_t once);
+void CAN_Receive(CAN_TypeDef *CANx, CAN_RXMessage *msg);
 
-void CAN_Transmit(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once);
-void CAN_TransmitRequest(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint32_t once);
-void CAN_Receive(CAN_TypeDef * CANx, CAN_RXMessage *msg);
+uint32_t CAN_TXComplete(CAN_TypeDef *CANx);
+uint32_t CAN_TXSuccess(CAN_TypeDef *CANx);
 
-uint32_t CAN_TXComplete(CAN_TypeDef * CANx);
-uint32_t CAN_TXSuccess(CAN_TypeDef * CANx);
+void CAN_AbortTransmit(CAN_TypeDef *CANx);
 
-void CAN_AbortTransmit(CAN_TypeDef * CANx);
+uint32_t CAN_TXBufferReady(CAN_TypeDef *CANx);
+uint32_t CAN_RXDataAvailable(CAN_TypeDef *CANx);
 
-uint32_t CAN_TXBufferReady(CAN_TypeDef * CANx);
-uint32_t CAN_RXDataAvailable(CAN_TypeDef * CANx);
+void CAN_SetBaudrate(CAN_TypeDef *CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW);
 
-void CAN_SetBaudrate(CAN_TypeDef * CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW);
+void CAN_SetFilter32b(CAN_TypeDef *CANx, uint32_t check, uint32_t mask);
+void CAN_SetFilter16b(CAN_TypeDef *CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2);
 
-void CAN_SetFilter32b(CAN_TypeDef * CANx, uint32_t check, uint32_t mask);
-void CAN_SetFilter16b(CAN_TypeDef * CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2);
+void CAN_INTRXNotEmptyEn(CAN_TypeDef *CANx);
+void CAN_INTRXNotEmptyDis(CAN_TypeDef *CANx);
 
+void CAN_INTTXBufEmptyEn(CAN_TypeDef *CANx);
+void CAN_INTTXBufEmptyDis(CAN_TypeDef *CANx);
 
-void CAN_INTRXNotEmptyEn(CAN_TypeDef * CANx);
-void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx);
+void CAN_INTErrWarningEn(CAN_TypeDef *CANx);
+void CAN_INTErrWarningDis(CAN_TypeDef *CANx);
 
-void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx);
-void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx);
+void CAN_INTRXOverflowEn(CAN_TypeDef *CANx);
+void CAN_INTRXOverflowDis(CAN_TypeDef *CANx);
+void CAN_INTRXOverflowClear(CAN_TypeDef *CANx);
 
-void CAN_INTErrWarningEn(CAN_TypeDef * CANx);
-void CAN_INTErrWarningDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx);
+void CAN_INTWakeupEn(CAN_TypeDef *CANx);
+void CAN_INTWakeupDis(CAN_TypeDef *CANx);
 
-void CAN_INTRXOverflowEn(CAN_TypeDef * CANx);
-void CAN_INTRXOverflowDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx);
-void CAN_INTRXOverflowClear(CAN_TypeDef * CANx);
+void CAN_INTErrPassiveEn(CAN_TypeDef *CANx);
+void CAN_INTErrPassiveDis(CAN_TypeDef *CANx);
 
-void CAN_INTWakeupEn(CAN_TypeDef * CANx);
-void CAN_INTWakeupDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx);
+void CAN_INTArbitrLostEn(CAN_TypeDef *CANx);
+void CAN_INTArbitrLostDis(CAN_TypeDef *CANx);
 
-void CAN_INTErrPassiveEn(CAN_TypeDef * CANx);
-void CAN_INTErrPassiveDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx);
+void CAN_INTBusErrorEn(CAN_TypeDef *CANx);
+void CAN_INTBusErrorDis(CAN_TypeDef *CANx);
 
-void CAN_INTArbitrLostEn(CAN_TypeDef * CANx);
-void CAN_INTArbitrLostDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx);
-
-void CAN_INTBusErrorEn(CAN_TypeDef * CANx);
-void CAN_INTBusErrorDis(CAN_TypeDef * CANx);
-uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx);
+uint32_t CAN_INTStat(CAN_TypeDef *CANx);
 
 #endif //__SWM320_CAN_H__

+ 29 - 30
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備: SWM320_crc.c
-* 髡夔佽隴:	SWM320等⑵儂腔CRC耀輸Й雄踱
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐: 
-* 唳掛゜ヽ:	V1.1.0		2017爛10堎25゜
-* 汔撰暮翹: 
+* ��辣�滨妍: SWM320_crc.c
+* �蠘�霂湔�:	SWM320�閧��箇�CRC璅∪�撽勗𢆡摨�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★: 
+* ��𧋦�交�:	V1.1.0		2017撟�10��25��
+* ��漣霈啣�: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,31 +21,30 @@
 #include "SWM320.h"
 #include "SWM320_crc.h"
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CRC_Init()
-* 髡夔佽隴:	CRC 場宎趙
-* 怀    ⻌: CRC_TypeDef * CRCx	硌隅猁掩扢离腔CRC諉諳ㄛ衄虴硉婦嬤CRC
-*			uint32_t mode		馱釬耀宒ㄛ衄虴硉衄ㄩCRC32_IN32﹜CRC32_IN16﹜CRC32_IN8﹜CRC16_IN16﹜CRC16_IN8
-*			uint32_t out_not	怀堤賦彆岆瘁龰毀
-*			uint32_t out_rev	怀堤賦彆岆瘁楹蛌
-*			uint32_t ini_val	CRC場宎硉
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CRC_Init()
+* �蠘�霂湔�:	CRC �嘥���
+* 颲�    ��: CRC_TypeDef * CRCx	���閬�◤霈曄蔭��RC�亙藁嚗峕����澆��拴RC
+*			uint32_t mode		撌乩�璅∪�嚗峕����潭�嚗鋴RC32_IN32��RC32_IN16��RC32_IN8��RC16_IN16��RC16_IN8
+*			uint32_t out_not	颲枏枂蝏𤘪��臬炏�硋�
+*			uint32_t out_rev	颲枏枂蝏𤘪��臬炏蝧餉蓮
+*			uint32_t ini_val	CRC�嘥���
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CRC_Init(CRC_TypeDef * CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val)
+void CRC_Init(CRC_TypeDef *CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val)
 {
-	switch((uint32_t)CRCx)
-	{
-	case ((uint32_t)CRC):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_CRC_Pos);
-		break;
-	}
-	
-	CRCx->CR = (1 << CRC_CR_EN_Pos) |
-			   (mode << CRC_CR_CRC16_Pos) |
-			   (out_not << CRC_CR_ONOT_Pos) |
-			   (out_rev << CRC_CR_OREV_Pos);
-	
-	CRCx->INIVAL = ini_val;
+    switch ((uint32_t)CRCx)
+    {
+    case ((uint32_t)CRC):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_CRC_Pos);
+        break;
+    }
+
+    CRCx->CR = (1 << CRC_CR_EN_Pos) |
+               (mode << CRC_CR_CRC16_Pos) |
+               (out_not << CRC_CR_ONOT_Pos) |
+               (out_rev << CRC_CR_OREV_Pos);
+
+    CRCx->INIVAL = ini_val;
 }

+ 18 - 21
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h

@@ -1,39 +1,36 @@
 #ifndef __SWM320_CRC_H__
 #define __SWM320_CRC_H__
 
+#define CRC32_IN32 0 //CRC32算法,输入数�32�
+#define CRC32_IN16 2 //CRC32算法,输入数�16�
+#define CRC32_IN8 4  //CRC32算法,输入数� 8�
+#define CRC16_IN16 3 //CRC16算法,输入数�16�
+#define CRC16_IN8 5  //CRC16算法,输入数� 8�
 
-#define CRC32_IN32	0	//CRC32Ëã·¨£¬ÊäÈëÊý¾Ý32λ
-#define CRC32_IN16	2	//CRC32Ëã·¨£¬ÊäÈëÊý¾Ý16λ
-#define CRC32_IN8	4	//CRC32Ëã·¨£¬ÊäÈëÊý¾Ý 8λ
-#define CRC16_IN16	3	//CRC16Ëã·¨£¬ÊäÈëÊý¾Ý16λ
-#define CRC16_IN8	5	//CRC16Ëã·¨£¬ÊäÈëÊý¾Ý 8λ
-
-
-void CRC_Init(CRC_TypeDef * CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val);
-
+void CRC_Init(CRC_TypeDef *CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val);
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	CRC_Write()
-* ¹¦ÄÜ˵Ã÷:	CRCдÈëÊý¾Ý
-* Êä    Èë: uint32_t data		ҪдÈëµÄÊý¾Ý
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	CRC_Write()
+* 功能说明:	CRC写入数�
+* 输    入: uint32_t data		�写入的数�
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
 static __INLINE void CRC_Write(uint32_t data)
 {
-	CRC->DATAIN = data;
+    CRC->DATAIN = data;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	CRC_Result()
-* ¹¦ÄÜ˵Ã÷:	»ñÈ¡CRC¼ÆËã½á¹û
-* Êä    Èë: ÎÞ
-* Êä    ³ö: uint32_t			CRC ¼ÆËã½á¹û
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	CRC_Result()
+* 功能说明:	获�CRC计算结果
+* 输    入: 无
+* 输    出: uint32_t			CRC 计算结果
+* 注�事项: 无
 ******************************************************************************************************************************************/
 static __INLINE uint32_t CRC_Result(void)
 {
-	return CRC->RESULT;
+    return CRC->RESULT;
 }
 
 #endif //__SWM320_CRC_H__

+ 83 - 81
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称: SWM320_dma.c
-* 功能说明:	SWM320单片机的DMA功能驱动库
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项: 
-* 版本日期:	V1.1.0		2017年10月25日
-* 升级记录:  
+* 鏂囦欢鍚嶇О: SWM320_dma.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑DMA鍔熻兘椹卞姩搴�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」: 
+* 鐗堟湰鏃ユ湡:	V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍:  
 *
 *
 *******************************************************************************************************************************************
@@ -22,117 +22,119 @@
 #include "SWM320_dma.h"
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CHM_Config()
-* 功能说明:	DMA通道配置,用于存储器间(如Flash和RAM间)搬运数据
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-*			uint32_t src_addr		源地址,必须字对齐,即地址的最低2位必须是00
-*			uint32_t src_addr_incr	0 固定地址    1 地址递增
-*			uint32_t dst_addr		目的地址,必须字对齐,即地址的最低2位必须是00
-*			uint32_t dst_addr_incr	0 固定地址    1 地址递增
-*			uint32_t num_word		要搬运的数据字数,最大1024
-*			uint32_t int_en			中断使能,1 数据搬运完成后产生中断    0 数据搬运完成后不产生中断
-* 输    出: 无
-* 注意事项: 搬运数据量以字为单元,不是字节
+* 鍑芥暟鍚嶇О: DMA_CHM_Config()
+* 鍔熻兘璇存槑:	DMA閫氶亾閰嶇疆锛岀敤浜庡瓨鍌ㄥ櫒闂达紙濡侳lash鍜孯AM闂达級鎼�繍鏁版嵁
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+*			uint32_t src_addr		婧愬湴鍧€锛屽繀椤诲瓧瀵归綈锛屽嵆鍦板潃鐨勬渶浣�2浣嶅繀椤绘槸00
+*			uint32_t src_addr_incr	0 鍥哄畾鍦板潃    1 鍦板潃閫掑�
+*			uint32_t dst_addr		鐩�殑鍦板潃锛屽繀椤诲瓧瀵归綈锛屽嵆鍦板潃鐨勬渶浣�2浣嶅繀椤绘槸00
+*			uint32_t dst_addr_incr	0 鍥哄畾鍦板潃    1 鍦板潃閫掑�
+*			uint32_t num_word		瑕佹惉杩愮殑鏁版嵁瀛楁暟锛屾渶澶�1024
+*			uint32_t int_en			涓�柇浣胯兘锛�1 鏁版嵁鎼�繍瀹屾垚鍚庝骇鐢熶腑鏂�    0 鏁版嵁鎼�繍瀹屾垚鍚庝笉浜х敓涓�柇
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鎼�繍鏁版嵁閲忎互瀛椾负鍗曞厓锛屼笉鏄�瓧鑺�
 ******************************************************************************************************************************************/
 void DMA_CHM_Config(uint32_t chn, uint32_t src_addr, uint32_t src_addr_incr, uint32_t dst_addr, uint32_t dst_addr_incr, uint32_t num_word, uint32_t int_en)
 {
-	DMA->EN = 1;			//每个通道都有自己独立的开关控制,所以总开关可以是一直开启的
-	
-	DMA_CH_Close(chn);		//配置前先关闭该通道
-	
-	DMA->CH[chn].SRC = src_addr;
-	DMA->CH[chn].DST = dst_addr;
-	
-	DMA->CH[chn].CR = ((num_word*4-1) << DMA_CR_LEN_Pos) |
-					  (0 << DMA_CR_AUTORE_Pos);
-	
-	DMA->CH[chn].AM = (src_addr_incr << DMA_AM_SRCAM_Pos) |
-					  (dst_addr_incr << DMA_AM_DSTAM_Pos) |
-					  (0 << DMA_AM_BURST_Pos);
-	
-	DMA->IF  = (1 << chn);		//清除中断标志
-	DMA->IE |= (1 << chn);
-	if(int_en)	DMA->IM &= ~(1 << chn);
-	else		DMA->IM |=  (1 << chn);
-	
-	if(int_en)
-	{
-		NVIC_EnableIRQ(DMA_IRQn);
-	}
-	else
-	{
-		//不能调用NVIC_DisalbeIRQ(DMA_IRQn),因为其他通道可能使用DMA中断
-	}
+    DMA->EN = 1; //姣忎釜閫氶亾閮芥湁鑷�繁鐙�珛鐨勫紑鍏虫帶鍒讹紝鎵€浠ユ€诲紑鍏冲彲浠ユ槸涓€鐩村紑鍚�殑
+
+    DMA_CH_Close(chn); //閰嶇疆鍓嶅厛鍏抽棴璇ラ€氶亾
+
+    DMA->CH[chn].SRC = src_addr;
+    DMA->CH[chn].DST = dst_addr;
+
+    DMA->CH[chn].CR = ((num_word * 4 - 1) << DMA_CR_LEN_Pos) |
+                      (0 << DMA_CR_AUTORE_Pos);
+
+    DMA->CH[chn].AM = (src_addr_incr << DMA_AM_SRCAM_Pos) |
+                      (dst_addr_incr << DMA_AM_DSTAM_Pos) |
+                      (0 << DMA_AM_BURST_Pos);
+
+    DMA->IF = (1 << chn); //娓呴櫎涓�柇鏍囧織
+    DMA->IE |= (1 << chn);
+    if (int_en)
+        DMA->IM &= ~(1 << chn);
+    else
+        DMA->IM |= (1 << chn);
+
+    if (int_en)
+    {
+        NVIC_EnableIRQ(DMA_IRQn);
+    }
+    else
+    {
+        //涓嶈兘璋冪敤NVIC_DisalbeIRQ(DMA_IRQn)锛屽洜涓哄叾浠栭€氶亾鍙�兘浣跨敤DMA涓�柇
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_Open()
-* 功能说明:	DMA通道打开
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_Open()
+* 鍔熻兘璇存槑:	DMA閫氶亾鎵撳紑
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 void DMA_CH_Open(uint32_t chn)
 {
-	DMA->CH[chn].CR |= (1 << DMA_CR_TXEN_Pos);
+    DMA->CH[chn].CR |= (1 << DMA_CR_TXEN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_Close()
-* 功能说明:	DMA通道关闭
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_Close()
+* 鍔熻兘璇存槑:	DMA閫氶亾鍏抽棴
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 void DMA_CH_Close(uint32_t chn)
 {
-	DMA->CH[chn].CR &= ~(1 << DMA_CR_TXEN_Pos);
+    DMA->CH[chn].CR &= ~(1 << DMA_CR_TXEN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_INTEn()
-* 功能说明:	DMA中断使能,数据搬运完成后触发中断
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_INTEn()
+* 鍔熻兘璇存槑:	DMA涓�柇浣胯兘锛屾暟鎹�惉杩愬畬鎴愬悗瑙﹀彂涓�柇
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 void DMA_CH_INTEn(uint32_t chn)
 {
-	DMA->IM &= ~(1 << chn);
+    DMA->IM &= ~(1 << chn);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_INTDis()
-* 功能说明:	DMA中断禁止,数据搬运完成后不触发中断
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_INTDis()
+* 鍔熻兘璇存槑:	DMA涓�柇绂佹�锛屾暟鎹�惉杩愬畬鎴愬悗涓嶈Е鍙戜腑鏂�
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 void DMA_CH_INTDis(uint32_t chn)
 {
-	DMA->IM |= (1 << chn);
+    DMA->IM |= (1 << chn);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_INTClr()
-* 功能说明:	DMA中断标志清除
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_INTClr()
+* 鍔熻兘璇存槑:	DMA涓�柇鏍囧織娓呴櫎
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 void DMA_CH_INTClr(uint32_t chn)
 {
-	DMA->IF = (1 << chn);
+    DMA->IF = (1 << chn);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: DMA_CH_INTStat()
-* 功能说明:	DMA中断状态查询
-* 输    入: uint32_t chn			指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
-* 输    出: uint32_t				1 数据搬运完成    0 数据搬运未完成
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: DMA_CH_INTStat()
+* 鍔熻兘璇存槑:	DMA涓�柇鐘舵€佹煡璇�
+* 杈�    鍏�: uint32_t chn			鎸囧畾瑕侀厤缃�殑閫氶亾锛屾湁鏁堝€兼湁DMA_CH0銆丏MA_CH1銆丏MA_CH2
+* 杈�    鍑�: uint32_t				1 鏁版嵁鎼�繍瀹屾垚    0 鏁版嵁鎼�繍鏈�畬鎴�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t DMA_CH_INTStat(uint32_t chn)
-{	
-	return (DMA->IF & (1 << chn)) ? 1 : 0;
+{
+    return (DMA->IF & (1 << chn)) ? 1 : 0;
 }

+ 10 - 13
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h

@@ -1,20 +1,17 @@
 #ifndef __SWM320_DMA_H__
 #define __SWM320_DMA_H__
 
+#define DMA_CH0 0
+#define DMA_CH1 1
+#define DMA_CH2 2
 
-#define DMA_CH0		0
-#define DMA_CH1		1
-#define DMA_CH2		2
-
-
-void DMA_CHM_Config(uint32_t chn, uint32_t src_addr, uint32_t src_addr_incr, uint32_t dst_addr, uint32_t dst_addr_incr, uint32_t num_word, uint32_t int_en);	//DMA通道配置,用于存储器间(如Flash和RAM间)搬运数据
-void DMA_CH_Open(uint32_t chn);					//DMA通道打开
-void DMA_CH_Close(uint32_t chn);				//DMA通道关闭
-
-void DMA_CH_INTEn(uint32_t chn);				//DMA中断使能,数据搬运完成后触发中断
-void DMA_CH_INTDis(uint32_t chn);				//DMA中断禁止,数据搬运完成后不触发中断
-void DMA_CH_INTClr(uint32_t chn);				//DMA中断标志清除
-uint32_t DMA_CH_INTStat(uint32_t chn);			//DMA中断状态查询,1 数据搬运完成    0 数据搬运未完成
+void DMA_CHM_Config(uint32_t chn, uint32_t src_addr, uint32_t src_addr_incr, uint32_t dst_addr, uint32_t dst_addr_incr, uint32_t num_word, uint32_t int_en); //DMA閫氶亾閰嶇疆锛岀敤浜庡瓨鍌ㄥ櫒闂达紙濡侳lash鍜孯AM闂达級鎼�繍鏁版嵁
+void DMA_CH_Open(uint32_t chn);                                                                                                                              //DMA閫氶亾鎵撳紑
+void DMA_CH_Close(uint32_t chn);                                                                                                                             //DMA閫氶亾鍏抽棴
 
+void DMA_CH_INTEn(uint32_t chn);       //DMA涓�柇浣胯兘锛屾暟鎹�惉杩愬畬鎴愬悗瑙﹀彂涓�柇
+void DMA_CH_INTDis(uint32_t chn);      //DMA涓�柇绂佹�锛屾暟鎹�惉杩愬畬鎴愬悗涓嶈Е鍙戜腑鏂�
+void DMA_CH_INTClr(uint32_t chn);      //DMA涓�柇鏍囧織娓呴櫎
+uint32_t DMA_CH_INTStat(uint32_t chn); //DMA涓�柇鐘舵€佹煡璇�紝1 鏁版嵁鎼�繍瀹屾垚    0 鏁版嵁鎼�繍鏈�畬鎴�
 
 #endif //__SWM320_DMA_H__

+ 86 - 86
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称:	SWM320_exti.c
-* 功能说明:	SWM320单片机的外部中断功能驱动库
-* 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项:
-* 版本日期: V1.1.0		2017年10月25日
-* 升级记录:  
+* 鏂囦欢鍚嶇О:	SWM320_exti.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑澶栭儴涓�柇鍔熻兘椹卞姩搴�
+* 鎶€鏈�敮鎸�: http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」:
+* 鐗堟湰鏃ユ湡: V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍:  
 *
 *******************************************************************************************************************************************
 * @attention
@@ -21,111 +21,111 @@
 #include "SWM320_exti.h"
 
 /****************************************************************************************************************************************** 
-* 函数名称: EXTI_Init()
-* 功能说明:	指定引脚外部中断初始化
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t mode	   有效值有EXTI_FALL_EDGE、EXTI_RISE_EDGE、EXTI_BOTH_EDGE、EXTI_LOW_LEVEL、EXTI_HIGH_LEVEL
-* 输    出: 无
-* 注意事项: 由于GPIOA、GPIOB、GPIOC、GPIOM的PIN0--7引脚即可以接入NVIC中的引脚中断(如GPIOA0_IRQn),也可以接入NVIC的组中断(GPIOA_IRQn),
-*			所以不在此函数中调用NVIC_EnableIRQ()使能NVIC中断,从而可以根据需要调用NVIC_EnableIRQ(GPIOA0_IRQn)和NVIC_EnableIRQ(GPIOA_IRQn)
+* 鍑芥暟鍚嶇О: EXTI_Init()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼澶栭儴涓�柇鍒濆�鍖�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t mode	   鏈夋晥鍊兼湁EXTI_FALL_EDGE銆丒XTI_RISE_EDGE銆丒XTI_BOTH_EDGE銆丒XTI_LOW_LEVEL銆丒XTI_HIGH_LEVEL
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鐢变簬GPIOA銆丟PIOB銆丟PIOC銆丟PIOM鐨凱IN0--7寮曡剼鍗冲彲浠ユ帴鍏�VIC涓�殑寮曡剼涓�柇锛堝�GPIOA0_IRQn锛夛紝涔熷彲浠ユ帴鍏�VIC鐨勭粍涓�柇锛圙PIOA_IRQn锛夛紝
+*			鎵€浠ヤ笉鍦ㄦ�鍑芥暟涓�皟鐢∟VIC_EnableIRQ()浣胯兘NVIC涓�柇锛屼粠鑰屽彲浠ユ牴鎹�渶瑕佽皟鐢∟VIC_EnableIRQ(GPIOA0_IRQn)鍜孨VIC_EnableIRQ(GPIOA_IRQn)
 ******************************************************************************************************************************************/
-void EXTI_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t mode)
+void EXTI_Init(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t mode)
 {
-	EXTI_Close(GPIOx, n);			//配置关键寄存器前先关闭
-	
-	if(mode & 0x10)
-	{
-		GPIOx->INTLVLTRG |= (0x01 << n);			//电平触发
-		
-		if(mode & 0x01)
-			GPIOx->INTRISEEN |= (0x01 << n);				//高电平触发
-		else
-			GPIOx->INTRISEEN &= ~(0x01 << n);				//低电平触发
-	}		
-	else
-	{
-		GPIOx->INTLVLTRG &= ~(0x01 << n);			//边沿触发
-		
-		if(mode & 0x02)
-		{
-			GPIOx->INTBE |= (0x01 << n);				//双边沿触发	
-		}
-		else
-		{
-			GPIOx->INTBE &= ~(0x01 << n);				//单边沿触发
-			
-			if(mode & 0x01)
-				GPIOx->INTRISEEN |= (0x01 << n);			//上升沿触发
-			else
-				GPIOx->INTRISEEN &= ~(0x01 << n);			//下降沿触发
-		}
-	}
-	
-	GPIOx->INTCLR = (1 << n);		//清除掉因为模式配置可能产生的中断
+    EXTI_Close(GPIOx, n); //閰嶇疆鍏抽敭瀵勫瓨鍣ㄥ墠鍏堝叧闂�
+
+    if (mode & 0x10)
+    {
+        GPIOx->INTLVLTRG |= (0x01 << n); //鐢靛钩瑙﹀彂
+
+        if (mode & 0x01)
+            GPIOx->INTRISEEN |= (0x01 << n); //楂樼數骞宠Е鍙�
+        else
+            GPIOx->INTRISEEN &= ~(0x01 << n); //浣庣數骞宠Е鍙�
+    }
+    else
+    {
+        GPIOx->INTLVLTRG &= ~(0x01 << n); //杈规部瑙﹀彂
+
+        if (mode & 0x02)
+        {
+            GPIOx->INTBE |= (0x01 << n); //鍙岃竟娌胯Е鍙�
+        }
+        else
+        {
+            GPIOx->INTBE &= ~(0x01 << n); //鍗曡竟娌胯Е鍙�
+
+            if (mode & 0x01)
+                GPIOx->INTRISEEN |= (0x01 << n); //涓婂崌娌胯Е鍙�
+            else
+                GPIOx->INTRISEEN &= ~(0x01 << n); //涓嬮檷娌胯Е鍙�
+        }
+    }
+
+    GPIOx->INTCLR = (1 << n); //娓呴櫎鎺夊洜涓烘ā寮忛厤缃�彲鑳戒骇鐢熺殑涓�柇
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	EXTI_Open()
-* 功能说明:	指定引脚外部中断打开(即使能)
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	EXTI_Open()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼澶栭儴涓�柇鎵撳紑锛堝嵆浣胯兘锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void EXTI_Open(GPIO_TypeDef * GPIOx, uint32_t n)
+void EXTI_Open(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->INTEN |= (0x01 << n);
+    GPIOx->INTEN |= (0x01 << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	EXTI_Close()
-* 功能说明:	指定引脚外部中断关闭(即禁能)
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	EXTI_Close()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼澶栭儴涓�柇鍏抽棴锛堝嵆绂佽兘锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void EXTI_Close(GPIO_TypeDef * GPIOx, uint32_t n)
+void EXTI_Close(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->INTEN &= ~(0x01 << n);
+    GPIOx->INTEN &= ~(0x01 << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	EXTI_State()
-* 功能说明:	指定引脚是否触发了中断
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: uint32_t	1 此引脚触发了中断    0 此引脚未触发中断
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	EXTI_State()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼鏄�惁瑙﹀彂浜嗕腑鏂�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: uint32_t	1 姝ゅ紩鑴氳Е鍙戜簡涓�柇    0 姝ゅ紩鑴氭湭瑙﹀彂涓�柇
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t EXTI_State(GPIO_TypeDef * GPIOx, uint32_t n)
+uint32_t EXTI_State(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	return (GPIOx->INTSTAT >> n) & 0x01;
+    return (GPIOx->INTSTAT >> n) & 0x01;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	EXTI_RawState()
-* 功能说明:	指定引脚是否满足过/了中断触发条件,当此中断关闭时可通过调用此函数以查询的方式检测引脚上是否满足过/了中断触发条件
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: uint32_t	1 此引脚满足过/了中断触发条件    0 此引脚未满足过/了中断触发条件
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	EXTI_RawState()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼鏄�惁婊¤冻杩�/浜嗕腑鏂�Е鍙戞潯浠讹紝褰撴�涓�柇鍏抽棴鏃跺彲閫氳繃璋冪敤姝ゅ嚱鏁颁互鏌ヨ�鐨勬柟寮忔�娴嬪紩鑴氫笂鏄�惁婊¤冻杩�/浜嗕腑鏂�Е鍙戞潯浠�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: uint32_t	1 姝ゅ紩鑴氭弧瓒宠繃/浜嗕腑鏂�Е鍙戞潯浠�    0 姝ゅ紩鑴氭湭婊¤冻杩�/浜嗕腑鏂�Е鍙戞潯浠�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t EXTI_RawState(GPIO_TypeDef * GPIOx, uint32_t n)
+uint32_t EXTI_RawState(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	return (GPIOx->INTRAWSTAT >> n) & 0x01;
+    return (GPIOx->INTRAWSTAT >> n) & 0x01;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	EXTI_Clear()
-* 功能说明:	指定引脚外部中断清除(即清除中断标志,以免再次进入此中断)
-* 输    入: GPIO_TypeDef * GPIOx	指定产生外部中断的GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
-*			uint32_t n 		   指定产生外部中断的GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 只能清除边沿触发中断的标志,电平触发中断的标志无法清除,只能在引脚电平不符合中断触发条件后硬件自动清除
+* 鍑芥暟鍚嶇О:	EXTI_Clear()
+* 鍔熻兘璇存槑:	鎸囧畾寮曡剼澶栭儴涓�柇娓呴櫎锛堝嵆娓呴櫎涓�柇鏍囧織锛屼互鍏嶅啀娆¤繘鍏ユ�涓�柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP
+*			uint32_t n 		   鎸囧畾浜х敓澶栭儴涓�柇鐨凣PIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鍙�兘娓呴櫎杈规部瑙﹀彂涓�柇鐨勬爣蹇楋紝鐢靛钩瑙﹀彂涓�柇鐨勬爣蹇楁棤娉曟竻闄わ紝鍙�兘鍦ㄥ紩鑴氱數骞充笉绗﹀悎涓�柇瑙﹀彂鏉′欢鍚庣‖浠惰嚜鍔ㄦ竻闄�
 ******************************************************************************************************************************************/
-void EXTI_Clear(GPIO_TypeDef * GPIOx, uint32_t n)
+void EXTI_Clear(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->INTCLR = (0x01 << n);
+    GPIOx->INTCLR = (0x01 << n);
 }

+ 12 - 14
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h

@@ -1,20 +1,18 @@
 #ifndef __SWM320_EXTI_H__
-#define	__SWM320_EXTI_H__
+#define __SWM320_EXTI_H__
 
-void EXTI_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t mode);	//指定引脚外部中断初始化
-void EXTI_Open(GPIO_TypeDef * GPIOx, uint32_t n);					//指定引脚外部中断打开(即使能)
-void EXTI_Close(GPIO_TypeDef * GPIOx, uint32_t n);					//指定引脚外部中断关闭(即禁能)
+void EXTI_Init(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t mode); //鎸囧畾寮曡剼澶栭儴涓�柇鍒濆�鍖�
+void EXTI_Open(GPIO_TypeDef *GPIOx, uint32_t n);                //鎸囧畾寮曡剼澶栭儴涓�柇鎵撳紑锛堝嵆浣胯兘锛�
+void EXTI_Close(GPIO_TypeDef *GPIOx, uint32_t n);               //鎸囧畾寮曡剼澶栭儴涓�柇鍏抽棴锛堝嵆绂佽兘锛�
 
-uint32_t EXTI_State(GPIO_TypeDef * GPIOx, uint32_t n);				//指定引脚是否触发了中断
-uint32_t EXTI_RawState(GPIO_TypeDef * GPIOx, uint32_t n);			//指定引脚是否满足过/了中断触发条件,当此中断关闭时可通过调用此函数以查询的方式检测引脚上是否满足过/了中断触发条件
-void EXTI_Clear(GPIO_TypeDef * GPIOx, uint32_t n);					//指定引脚外部中断清除(即清除中断标志,以免再次进入此中断)
-
-
-#define EXTI_FALL_EDGE	0x00	//下降沿触发中断
-#define EXTI_RISE_EDGE	0x01	//上升沿触发中断
-#define EXTI_BOTH_EDGE	0x02	//双边沿触发中断
-#define EXTI_LOW_LEVEL	0x10	//低电平触发中断
-#define EXTI_HIGH_LEVEL	0x11	//高电平触发中断
+uint32_t EXTI_State(GPIO_TypeDef *GPIOx, uint32_t n);    //鎸囧畾寮曡剼鏄�惁瑙﹀彂浜嗕腑鏂�
+uint32_t EXTI_RawState(GPIO_TypeDef *GPIOx, uint32_t n); //鎸囧畾寮曡剼鏄�惁婊¤冻杩�/浜嗕腑鏂�Е鍙戞潯浠讹紝褰撴�涓�柇鍏抽棴鏃跺彲閫氳繃璋冪敤姝ゅ嚱鏁颁互鏌ヨ�鐨勬柟寮忔�娴嬪紩鑴氫笂鏄�惁婊¤冻杩�/浜嗕腑鏂�Е鍙戞潯浠�
+void EXTI_Clear(GPIO_TypeDef *GPIOx, uint32_t n);        //鎸囧畾寮曡剼澶栭儴涓�柇娓呴櫎锛堝嵆娓呴櫎涓�柇鏍囧織锛屼互鍏嶅啀娆¤繘鍏ユ�涓�柇锛�
 
+#define EXTI_FALL_EDGE 0x00  //涓嬮檷娌胯Е鍙戜腑鏂�
+#define EXTI_RISE_EDGE 0x01  //涓婂崌娌胯Е鍙戜腑鏂�
+#define EXTI_BOTH_EDGE 0x02  //鍙岃竟娌胯Е鍙戜腑鏂�
+#define EXTI_LOW_LEVEL 0x10  //浣庣數骞宠Е鍙戜腑鏂�
+#define EXTI_HIGH_LEVEL 0x11 //楂樼數骞宠Е鍙戜腑鏂�
 
 #endif //__SWM320_EXTI_H__

+ 60 - 46
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備:	SWM320_flash.c
-* 髡夔佽隴:	妏蚚郋⑵腔IAP髡夔蔚⑵奻Flash耀攜傖EEPROM懂悵湔杅擂ㄛ裁萇綴祥隍囮
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐:
-* 唳掛゜ヽ: V1.1.0		2017爛10堎25゜
-* 汔撰暮翹: 
+* ��辣�滨妍:	SWM320_flash.c
+* �蠘�霂湔�:	雿輻鍂�舐���AP�蠘�撠��銝喐lash璅⊥��𨆼EPROM�乩�摮䀹㺭�殷��厩㩞�𦒘�銝W仃
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★:
+* ��𧋦�交�: V1.1.0		2017撟�10��25��
+* ��漣霈啣�: 
 *******************************************************************************************************************************************
 * @attention
 *
@@ -19,63 +19,77 @@
 #include "SWM320.h"
 #include "SWM320_flash.h"
 
-
 IAP_Cache_Reset_t IAP_Cache_Reset = (IAP_Cache_Reset_t)0x11000601;
 IAP_Flash_Param_t IAP_Flash_Param = (IAP_Flash_Param_t)0x11000681;
 IAP_Flash_Erase_t IAP_Flash_Erase = (IAP_Flash_Erase_t)0x11000781;
 IAP_Flash_Write_t IAP_Flash_Write = (IAP_Flash_Write_t)0x11000801;
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備: FLASH_Erase()
-* 髡夔佽隴:	⑵囀Flash笠壺
-* 怀    ⻌: uint32_t addr			笠壺華硊ㄛ圮Е湮苤峈4K Byte
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍: FLASH_Erase()
+* �蠘�霂湔�:	���Flash�阡膄
+* 颲�    ��: uint32_t addr			�阡膄�啣�嚗峕��箏之撠譍蛹4K Byte
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
 void FLASH_Erase(uint32_t addr)
-{	
-	__disable_irq();
-	
-	IAP_Flash_Erase(addr / 0x1000);
-	
-	IAP_Cache_Reset();
-	
-	__enable_irq();
+{
+    __disable_irq();
+
+    IAP_Flash_Erase(addr / 0x1000);
+
+    IAP_Cache_Reset();
+
+    __enable_irq();
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備: FLASH_Write()
-* 髡夔佽隴:	⑵囀Flash迡⻌
-* 怀    ⻌: uint32_t addr			迡⻌華硊
-*			uint32_t buff[]			猁迡⻌腔杅擂
-*			uint32_t count			猁迡⻌杅擂腔跺杅ㄛ眕趼峈等弇ㄛブ斛剕岆4腔淕杅捷ㄛ撈郔屾迡⻌4跺趼
-* 怀    堤: 拸
-* 蛁砩岈砐: 迡⻌杅擂跺杅斛剕岆4腔淕杅捷ㄛ撈郔屾迡⻌4跺趼
+* �賣㺭�滨妍: FLASH_Write()
+* �蠘�霂湔�:	���Flash�坔�
+* 颲�    ��: uint32_t addr			�坔��啣�
+*			uint32_t buff[]			閬���亦��唳旿
+*			uint32_t count			閬���交㺭�桃�銝芣㺭嚗䔶誑摮𦯀蛹�蓥�嚗䔶�敹�◆��4��㟲�啣�㵪��單�撠穃���4銝芸�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: �坔��唳旿銝芣㺭敹�◆��4��㟲�啣�㵪��單�撠穃���4銝芸�
 ******************************************************************************************************************************************/
 void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count)
 {
-	__disable_irq();
-	
-	IAP_Flash_Write(addr, (uint32_t)buff, count/4);
-	
-	IAP_Cache_Reset();
-	
-	__enable_irq();
+    __disable_irq();
+
+    IAP_Flash_Write(addr, (uint32_t)buff, count / 4);
+
+    IAP_Cache_Reset();
+
+    __enable_irq();
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備: Flash_Param_at_120MHz()
-* 髡夔佽隴:	蔚Flash統杅扢离傖120MHz翋ⅰ狟堍俴奀垀剒腔統杅
-* 怀    ⻌: 拸
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍: Flash_Param_at_xMHz()
+* �蠘�霂湔�:	撠�lash��㺭霈曄蔭�鉢MHz銝駁�銝贝�銵峕𧒄���������
+* 颲�    ��: uint32_t x		�臬���
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void Flash_Param_at_120MHz(void)
+void Flash_Param_at_xMHz(uint32_t x)
 {
-	__disable_irq();
-	
-	IAP_Flash_Param(0x48a, 0xabfc7a6e);
-	
-	__enable_irq();
+    __disable_irq();
+    switch (x)
+    {
+    case 30:
+        IAP_Flash_Param(0x489, 0xabf41f25);
+        break;
+
+    case 40:
+        IAP_Flash_Param(0x489, 0xabf42929);
+        break;
+
+    case 80:
+        IAP_Flash_Param(0x489, 0xabf8524d);
+        break;
+
+    case 120:
+    default:
+        IAP_Flash_Param(0x48a, 0xabfc7a6e);
+        break;
+    }
+    __enable_irq();
 }

+ 1 - 5
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h

@@ -1,13 +1,10 @@
 #ifndef __SWM320_FLASH_H__
 #define __SWM320_FLASH_H__
 
-
 void FLASH_Erase(uint32_t addr);
 void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count);
 
-void Flash_Param_at_120MHz(void);
-
-
+void Flash_Param_at_xMHz(uint32_t x);
 
 typedef void (*IAP_Cache_Reset_t)(void);
 typedef void (*IAP_Flash_Param_t)(uint32_t cfg0, uint32_t cfg1);
@@ -19,5 +16,4 @@ extern IAP_Flash_Param_t IAP_Flash_Param;
 extern IAP_Flash_Erase_t IAP_Flash_Erase;
 extern IAP_Flash_Write_t IAP_Flash_Write;
 
-
 #endif //__SWM320_FLASH_H__

+ 288 - 289
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称: SWM320_gpio.c
-* 功能说明:	SWM320单片机的通用输入输出功能驱动库
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项:
-* 版本日期: V1.1.0		2017年10月25日
-* 升级记录: 
+* 鏂囦欢鍚嶇О: SWM320_gpio.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑閫氱敤杈撳叆杈撳嚭鍔熻兘椹卞姩搴�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」:
+* 鐗堟湰鏃ユ湡: V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,358 +21,357 @@
 #include "SWM320.h"
 #include "SWM320_gpio.h"
 
-
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_Init()
-* 功能说明:	引脚初始化,包含引脚方向、上拉电阻、下拉电阻、开漏输出
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t dir	       引脚方向,0 输入        1 输出
-*			uint32_t pull_up	   上拉电阻,0 关闭上拉    1 开启上拉
-*			uint32_t pull_down	   下拉电阻,0 关闭下拉    1 开启下拉
-* 输    出: 无
-* 注意事项: GPIOA、GPIOC、GPIOM、GPIOP只有上拉,GPIOB、GPION只有下拉
+* 鍑芥暟鍚嶇О: GPIO_Init()
+* 鍔熻兘璇存槑:	寮曡剼鍒濆�鍖栵紝鍖呭惈寮曡剼鏂瑰悜銆佷笂鎷夌數闃汇€佷笅鎷夌數闃汇€佸紑婕忚緭鍑�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t dir	       寮曡剼鏂瑰悜锛�0 杈撳叆        1 杈撳嚭
+*			uint32_t pull_up	   涓婃媺鐢甸樆锛�0 鍏抽棴涓婃媺    1 寮€鍚�笂鎷�
+*			uint32_t pull_down	   涓嬫媺鐢甸樆锛�0 鍏抽棴涓嬫媺    1 寮€鍚�笅鎷�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: GPIOA銆丟PIOC銆丟PIOM銆丟PIOP鍙�湁涓婃媺锛孏PIOB銆丟PION鍙�湁涓嬫媺锛圥N0銆丳N1銆丳N2涓変釜寮曡剼鏈変笂鎷夋病涓嬫媺锛�
 ******************************************************************************************************************************************/
-void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down)
+void GPIO_Init(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down)
 {
-	switch((uint32_t)GPIOx)
-	{
-	case ((uint32_t)GPIOA):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOA_Pos);
-		
-		PORT_Init(PORTA, n, 0, 1);			//PORTA.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPIOA->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPIOA->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_up == 1)
-			PORT->PORTA_PULLU |= (0x01 << n);
-		else
-			PORT->PORTA_PULLU &= ~(0x01 << n);
-		break;
-	
-	case ((uint32_t)GPIOB):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOB_Pos);
-		
-		PORT_Init(PORTB, n, 0, 1);			//PORTB.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPIOB->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPIOB->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_down == 1)
-			PORT->PORTB_PULLD |= (0x01 << n);
-		else
-			PORT->PORTB_PULLD &= ~(0x01 << n);
-		break;
-
-	case ((uint32_t)GPIOC):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOC_Pos);
-		
-		PORT_Init(PORTC, n, 0, 1);			//PORTC.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPIOC->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPIOC->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_up == 1)
-			PORT->PORTC_PULLU |= (0x01 << n);
-		else
-			PORT->PORTC_PULLU &= ~(0x01 << n);
-		break;
-		
-	case ((uint32_t)GPIOM):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOM_Pos);
-		
-		PORT_Init(PORTM, n, 0, 1);			//PORTM.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPIOM->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPIOM->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_up == 1)
-			PORT->PORTM_PULLU |= (0x01 << n);
-		else
-			PORT->PORTM_PULLU &= ~(0x01 << n);
-		break;
-		
-	case ((uint32_t)GPION):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPION_Pos);
-		
-		PORT_Init(PORTN, n, 0, 1);			//PORTN.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPION->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPION->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_down == 1)
-			PORT->PORTN_PULLD |= (0x01 << n);
-		else
-			PORT->PORTN_PULLD &= ~(0x01 << n);
-		break;
-	
-	case ((uint32_t)GPIOP):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOP_Pos);
-		
-		PORT_Init(PORTP, n, 0, 1);			//PORTP.PINn引脚配置为GPIO功能,数字输入开启
-		if(dir == 1)
-		{			
-			GPIOP->DIR |= (0x01 << n);
-		}
-		else
-		{
-			GPIOP->DIR &= ~(0x01 << n);
-		}
-		
-		if(pull_up == 1)
-			PORT->PORTP_PULLU |= (0x01 << n);
-		else
-			PORT->PORTP_PULLU &= ~(0x01 << n);
-		break;
-	}
+    switch ((uint32_t)GPIOx)
+    {
+    case ((uint32_t)GPIOA):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOA_Pos);
+
+        PORT_Init(PORTA, n, 0, 1); //PORTA.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPIOA->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPIOA->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_up == 1)
+            PORT->PORTA_PULLU |= (0x01 << n);
+        else
+            PORT->PORTA_PULLU &= ~(0x01 << n);
+        break;
+
+    case ((uint32_t)GPIOB):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOB_Pos);
+
+        PORT_Init(PORTB, n, 0, 1); //PORTB.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPIOB->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPIOB->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_down == 1)
+            PORT->PORTB_PULLD |= (0x01 << n);
+        else
+            PORT->PORTB_PULLD &= ~(0x01 << n);
+        break;
+
+    case ((uint32_t)GPIOC):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOC_Pos);
+
+        PORT_Init(PORTC, n, 0, 1); //PORTC.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPIOC->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPIOC->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_up == 1)
+            PORT->PORTC_PULLU |= (0x01 << n);
+        else
+            PORT->PORTC_PULLU &= ~(0x01 << n);
+        break;
+
+    case ((uint32_t)GPIOM):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOM_Pos);
+
+        PORT_Init(PORTM, n, 0, 1); //PORTM.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPIOM->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPIOM->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_up == 1)
+            PORT->PORTM_PULLU |= (0x01 << n);
+        else
+            PORT->PORTM_PULLU &= ~(0x01 << n);
+        break;
+
+    case ((uint32_t)GPION):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPION_Pos);
+
+        PORT_Init(PORTN, n, 0, 1); //PORTN.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPION->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPION->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_down == 1)
+            PORT->PORTN_PULLD |= (0x01 << n);
+        else
+            PORT->PORTN_PULLD &= ~(0x01 << n);
+        break;
+
+    case ((uint32_t)GPIOP):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_GPIOP_Pos);
+
+        PORT_Init(PORTP, n, 0, 1); //PORTP.PINn寮曡剼閰嶇疆涓篏PIO鍔熻兘锛屾暟瀛楄緭鍏ュ紑鍚�
+        if (dir == 1)
+        {
+            GPIOP->DIR |= (0x01 << n);
+        }
+        else
+        {
+            GPIOP->DIR &= ~(0x01 << n);
+        }
+
+        if (pull_up == 1)
+            PORT->PORTP_PULLU |= (0x01 << n);
+        else
+            PORT->PORTP_PULLU &= ~(0x01 << n);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_SetBit()
-* 功能说明:	将参数指定的引脚电平置高
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: GPIO_SetBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�珮
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_SetBit(GPIO_TypeDef * GPIOx, uint32_t n)
+void GPIO_SetBit(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->DATA |= (0x01 << n);
+    GPIOx->DATA |= (0x01 << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_ClrBit()
-* 功能说明:	将参数指定的引脚电平置低
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	GPIO_ClrBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�綆
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_ClrBit(GPIO_TypeDef * GPIOx, uint32_t n)
+void GPIO_ClrBit(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->DATA &= ~(0x01 << n);
+    GPIOx->DATA &= ~(0x01 << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_InvBit()
-* 功能说明:	将参数指定的引脚电平反转
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: GPIO_InvBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩鍙嶈浆
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_InvBit(GPIO_TypeDef * GPIOx, uint32_t n)
+void GPIO_InvBit(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	GPIOx->DATA ^= (0x01 << n);
+    GPIOx->DATA ^= (0x01 << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_GetBit()
-* 功能说明:	读取参数指定的引脚的电平状态
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-* 输    出: 参数指定的引脚的电平状态	0 低电平	1 高电平
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	GPIO_GetBit()
+* 鍔熻兘璇存槑:	璇诲彇鍙傛暟鎸囧畾鐨勫紩鑴氱殑鐢靛钩鐘舵€�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+* 杈�    鍑�: 鍙傛暟鎸囧畾鐨勫紩鑴氱殑鐢靛钩鐘舵€�	0 浣庣數骞�	1 楂樼數骞�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t GPIO_GetBit(GPIO_TypeDef * GPIOx, uint32_t n)
-{	
-	return ((GPIOx->DATA >> n) & 0x01);
+uint32_t GPIO_GetBit(GPIO_TypeDef *GPIOx, uint32_t n)
+{
+    return ((GPIOx->DATA >> n) & 0x01);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_SetBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平置高
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t w			   指定要将引脚电平置高的引脚的个数
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: GPIO_SetBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�珮
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩缃�珮鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_SetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	GPIOx->DATA |= (bits << n);
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    GPIOx->DATA |= (bits << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_ClrBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平置低
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t w			   指定要将引脚电平置低的引脚的个数
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	GPIO_ClrBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�綆
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩缃�綆鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_ClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_ClrBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	GPIOx->DATA &= ~(bits << n);
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    GPIOx->DATA &= ~(bits << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_InvBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平反转
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t w			   指定要将引脚电平反转的引脚的个数
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: GPIO_InvBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鍙嶈浆
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩鍙嶈浆鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void GPIO_InvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_InvBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	GPIOx->DATA ^= (bits << n);
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    GPIOx->DATA ^= (bits << n);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_GetBits()
-* 功能说明: 读取参数指定的从n开始的w位连续引脚的电平状态
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t w			   指定要将引脚电平置高的引脚的个数
-* 输    出: 参数指定的从n开始的w位连续引脚的电平状态	0 低电平	1 高电平
-*			返回值的第0位表示引脚n的电平状态、返回值的第1位表示引脚n+1的电平状态... ...返回值的第w位表示引脚n+w的电平状态
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	GPIO_GetBits()
+* 鍔熻兘璇存槑: 璇诲彇鍙傛暟鎸囧畾鐨勪粠n寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鐘舵€�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOM銆丟PION銆丟PIOP	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩缃�珮鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鍙傛暟鎸囧畾鐨勪粠n寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鐘舵€�	0 浣庣數骞�	1 楂樼數骞�
+*			杩斿洖鍊肩殑绗�0浣嶈〃绀哄紩鑴歯鐨勭數骞崇姸鎬併€佽繑鍥炲€肩殑绗�1浣嶈〃绀哄紩鑴歯+1鐨勭數骞崇姸鎬�... ...杩斿洖鍊肩殑绗瑆浣嶈〃绀哄紩鑴歯+w鐨勭數骞崇姸鎬�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t GPIO_GetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+uint32_t GPIO_GetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-   	bits = 0xFFFFFF >> (24 - w);
-	
-	return ((GPIOx->DATA >> n) & bits);
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    return ((GPIOx->DATA >> n) & bits);
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_AtomicSetBit()
-* 功能说明:	将参数指定的引脚电平置高,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О: GPIO_AtomicSetBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�珮锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicSetBit(GPIO_TypeDef * GPIOx, uint32_t n)
-{	
-	*((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000)*32 + n*4)) = 1;
+void GPIO_AtomicSetBit(GPIO_TypeDef *GPIOx, uint32_t n)
+{
+    *((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000) * 32 + n * 4)) = 1;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_AtomicClrBit()
-* 功能说明:	将参数指定的引脚电平置低,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О:	GPIO_AtomicClrBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�綆锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicClrBit(GPIO_TypeDef * GPIOx, uint32_t n)
+void GPIO_AtomicClrBit(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	*((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000)*32 + n*4)) = 0;
+    *((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000) * 32 + n * 4)) = 0;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_AtomicInvBit()
-* 功能说明:	将参数指定的引脚电平反转,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О: GPIO_AtomicInvBit()
+* 鍔熻兘璇存槑:	灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩鍙嶈浆锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicInvBit(GPIO_TypeDef * GPIOx, uint32_t n)
+void GPIO_AtomicInvBit(GPIO_TypeDef *GPIOx, uint32_t n)
 {
-	*((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000)*32 + n*4)) = 1 - *((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000)*32 + n*4));
+    *((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000) * 32 + n * 4)) = 1 - *((volatile uint32_t *)(0x42000000 + ((uint32_t)&GPIOx->DATA - 0x40000000) * 32 + n * 4));
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_AtomicSetBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平置高,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-*			uint32_t w		指定要将引脚电平置高的引脚的个数
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О: GPIO_AtomicSetBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�珮锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+*			uint32_t w		鎸囧畾瑕佸皢寮曡剼鐢靛钩缃�珮鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicSetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_AtomicSetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	__disable_irq();
-	GPIOx->DATA |= (bits << n);
-	__enable_irq();
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    __disable_irq();
+    GPIOx->DATA |= (bits << n);
+    __enable_irq();
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	GPIO_AtomicClrBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平置低,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-*			uint32_t w			   指定要将引脚电平置低的引脚的个数
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О:	GPIO_AtomicClrBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�綆锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩缃�綆鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_AtomicClrBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	__disable_irq();
-	GPIOx->DATA &= ~(bits << n);
-	__enable_irq();
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    __disable_irq();
+    GPIOx->DATA &= ~(bits << n);
+    __enable_irq();
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: GPIO_AtomicInvBits()
-* 功能说明: 将参数指定的从n开始的w位连续引脚的电平反转,确保引脚”读-改-写“操作的原子性(不被中断ISR打断)
-* 输    入: GPIO_TypeDef * GPIOx	    指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOD	
-*			uint32_t n		       指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN14、PIN15
-*			uint32_t w			   指定要将引脚电平反转的引脚的个数
-* 输    出: 无
-* 注意事项: 当GPIOx的16个引脚中,有些在主循环中操作,有些在中断ISR中操作时,GPIOx的引脚必须都用GPIO_Atomic类型函数操作
+* 鍑芥暟鍚嶇О: GPIO_AtomicInvBits()
+* 鍔熻兘璇存槑: 灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鍙嶈浆锛岀‘淇濆紩鑴氣€濊�-鏀�-鍐欌€滄搷浣滅殑鍘熷瓙鎬э紙涓嶈�涓�柇ISR鎵撴柇锛�
+* 杈�    鍏�: GPIO_TypeDef * GPIOx	    鎸囧畾GPIO绔�彛锛屾湁鏁堝€煎寘鎷珿PIOA銆丟PIOB銆丟PIOC銆丟PIOD	
+*			uint32_t n		       鎸囧畾GPIO寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN14銆丳IN15
+*			uint32_t w			   鎸囧畾瑕佸皢寮曡剼鐢靛钩鍙嶈浆鐨勫紩鑴氱殑涓�暟
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰揋PIOx鐨�16涓�紩鑴氫腑锛屾湁浜涘湪涓诲惊鐜�腑鎿嶄綔锛屾湁浜涘湪涓�柇ISR涓�搷浣滄椂锛孏PIOx鐨勫紩鑴氬繀椤婚兘鐢℅PIO_Atomic绫诲瀷鍑芥暟鎿嶄綔
 ******************************************************************************************************************************************/
-void GPIO_AtomicInvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w)
+void GPIO_AtomicInvBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w)
 {
-	uint32_t bits;
-	
-	bits = 0xFFFFFF >> (24 - w);
-	
-	__disable_irq();
-	GPIOx->DATA ^= (bits << n);
-	__enable_irq();
+    uint32_t bits;
+
+    bits = 0xFFFFFF >> (24 - w);
+
+    __disable_irq();
+    GPIOx->DATA ^= (bits << n);
+    __enable_irq();
 }

+ 16 - 18
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h

@@ -1,24 +1,22 @@
 #ifndef __SWM320_GPIO_H__
-#define	__SWM320_GPIO_H__
+#define __SWM320_GPIO_H__
 
+void GPIO_Init(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down); //寮曡剼鍒濆�鍖栵紝鍖呭惈寮曡剼鏂瑰悜銆佷笂鎷夌數闃汇€佷笅鎷夌數闃�
 
-void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down);	//引脚初始化,包含引脚方向、上拉电阻、下拉电阻
-
-void GPIO_SetBit(GPIO_TypeDef * GPIOx, uint32_t n);						//将参数指定的引脚电平置高
-void GPIO_ClrBit(GPIO_TypeDef * GPIOx, uint32_t n);						//将参数指定的引脚电平置低
-void GPIO_InvBit(GPIO_TypeDef * GPIOx, uint32_t n);						//将参数指定的引脚电平反转
-uint32_t GPIO_GetBit(GPIO_TypeDef * GPIOx, uint32_t n);					//读取参数指定的引脚的电平状态
-void GPIO_SetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平置高
-void GPIO_ClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平置低
-void GPIO_InvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平反转
-uint32_t GPIO_GetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);	//读取参数指定的从n开始的w位连续引脚的电平状态
-
-void GPIO_AtomicSetBit(GPIO_TypeDef * GPIOx, uint32_t n);
-void GPIO_AtomicClrBit(GPIO_TypeDef * GPIOx, uint32_t n);
-void GPIO_AtomicInvBit(GPIO_TypeDef * GPIOx, uint32_t n);
-void GPIO_AtomicSetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);
-void GPIO_AtomicClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);
-void GPIO_AtomicInvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w);
+void GPIO_SetBit(GPIO_TypeDef *GPIOx, uint32_t n);                  //灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�珮
+void GPIO_ClrBit(GPIO_TypeDef *GPIOx, uint32_t n);                  //灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩缃�綆
+void GPIO_InvBit(GPIO_TypeDef *GPIOx, uint32_t n);                  //灏嗗弬鏁版寚瀹氱殑寮曡剼鐢靛钩鍙嶈浆
+uint32_t GPIO_GetBit(GPIO_TypeDef *GPIOx, uint32_t n);              //璇诲彇鍙傛暟鎸囧畾鐨勫紩鑴氱殑鐢靛钩鐘舵€�
+void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);     //灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�珮
+void GPIO_ClrBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);     //灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩缃�綆
+void GPIO_InvBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);     //灏嗗弬鏁版寚瀹氱殑浠巒寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鍙嶈浆
+uint32_t GPIO_GetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w); //璇诲彇鍙傛暟鎸囧畾鐨勪粠n寮€濮嬬殑w浣嶈繛缁�紩鑴氱殑鐢靛钩鐘舵€�
 
+void GPIO_AtomicSetBit(GPIO_TypeDef *GPIOx, uint32_t n);
+void GPIO_AtomicClrBit(GPIO_TypeDef *GPIOx, uint32_t n);
+void GPIO_AtomicInvBit(GPIO_TypeDef *GPIOx, uint32_t n);
+void GPIO_AtomicSetBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);
+void GPIO_AtomicClrBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);
+void GPIO_AtomicInvBits(GPIO_TypeDef *GPIOx, uint32_t n, uint32_t w);
 
 #endif //__SWM320_GPIO_H__

+ 168 - 164
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備:	SWM320_i2c.c
-* 髡夔佽隴:	SWM320等⑵儂腔I2C揹俴諉諳髡夔Й雄踱
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐:
-* 唳掛゜ヽ:	V1.1.0		2017爛10堎25゜
-* 汔撰暮翹:  
+* ��辣�滨妍:	SWM320_i2c.c
+* �蠘�霂湔�:	SWM320�閧��箇�I2C銝脰��亙藁�蠘�撽勗𢆡摨�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★:
+* ��𧋦�交�:	V1.1.0		2017撟�10��25��
+* ��漣霈啣�:  
 *
 *
 *******************************************************************************************************************************************
@@ -22,194 +22,198 @@
 #include "SWM320_i2c.h"
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Init()
-* 髡夔佽隴:	I2C場宎趙
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-*			I2C_InitStructure * initStruct	婦漪I2C眈壽扢隅硉腔賦凳极
-* 怀    堤: 拸
-* 蛁砩岈砐: 耀輸硐夔馱釬衾翋儂耀宒
+* �賣㺭�滨妍:	I2C_Init()
+* �蠘�霂湔�:	I2C�嘥���
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+*			I2C_InitStructure * initStruct	��鉄I2C�詨�霈曉��潛�蝏𤘪�雿�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 璅∪��芾�撌乩�鈭𦒘蜓�箸芋撘�
 ******************************************************************************************************************************************/
-void I2C_Init(I2C_TypeDef * I2Cx, I2C_InitStructure * initStruct)
+void I2C_Init(I2C_TypeDef *I2Cx, I2C_InitStructure *initStruct)
 {
-	switch((uint32_t)I2Cx)
-	{
-	case ((uint32_t)I2C0):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_I2C0_Pos);
-		break;
-	
-	case ((uint32_t)I2C1):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_I2C1_Pos);
-		break;
-	}
-	
-	I2C_Close(I2Cx);	//珨虳壽瑩敵湔け硐夔婓I2C壽敕奀扢离
-	
-	if(initStruct->Master == 1)
-	{		
-		I2Cx->CLKDIV = SystemCoreClock/5/initStruct->MstClk;
-		
-		I2Cx->MSTCMD = (I2Cx->MSTCMD & (~I2C_MSTCMD_IF_Msk)) | (1 << I2C_MSTCMD_IF_Pos);	//妏夔笢剿眳ゴ珂ラ壺笢剿梓祩
-		I2Cx->CTRL &= ~I2C_CTRL_MSTIE_Msk;
-		I2Cx->CTRL |= (initStruct->MstIEn << I2C_CTRL_MSTIE_Pos);
-		
-		switch((uint32_t)I2Cx)
-		{
-		case ((uint32_t)I2C0):
-			if(initStruct->MstIEn)
-			{
-				NVIC_EnableIRQ(I2C0_IRQn);
-			}
-			else
-			{
-				NVIC_DisableIRQ(I2C0_IRQn);
-			}
-			break;
-		
-		case ((uint32_t)I2C1):
-			if(initStruct->MstIEn)
-			{
-				NVIC_EnableIRQ(I2C1_IRQn);
-			}
-			else
-			{
-				NVIC_DisableIRQ(I2C1_IRQn);
-			}
-			break;
-		}
-	}
-	else
-	{
-		I2Cx->SLVCR |=  (1 << I2C_SLVCR_SLAVE_Pos);
-		
-		I2Cx->SLVCR &= ~(I2C_SLVCR_ADDR7b_Msk | I2C_SLVCR_ADDR_Msk);
-		I2Cx->SLVCR |= (1 << I2C_SLVCR_ACK_Pos) |
-					   (initStruct->Addr7b << I2C_SLVCR_ADDR7b_Pos) |
-					   (initStruct->SlvAddr << I2C_SLVCR_ADDR_Pos);
-		
-		I2Cx->SLVIF = I2C_SLVIF_RXEND_Msk | I2C_SLVIF_TXEND_Msk | I2C_SLVIF_STADET_Msk | I2C_SLVIF_STODET_Msk;	//ラ笢剿梓祩
-		I2Cx->SLVCR &= ~(I2C_SLVCR_IM_RXEND_Msk | I2C_SLVCR_IM_TXEND_Msk | I2C_SLVCR_IM_STADET_Msk | I2C_SLVCR_IM_STODET_Msk |
-						 I2C_SLVCR_IM_RDREQ_Msk | I2C_SLVCR_IM_WRREQ_Msk);
-		I2Cx->SLVCR |= ((initStruct->SlvRxEndIEn  ? 0 : 1) << I2C_SLVCR_IM_RXEND_Pos)  |
-					   ((initStruct->SlvTxEndIEn  ? 0 : 1) << I2C_SLVCR_IM_TXEND_Pos)  |
-					   ((initStruct->SlvSTADetIEn ? 0 : 1) << I2C_SLVCR_IM_STADET_Pos) |
-					   ((initStruct->SlvSTODetIEn ? 0 : 1) << I2C_SLVCR_IM_STODET_Pos) |
-					   ((initStruct->SlvRdReqIEn  ? 0 : 1) << I2C_SLVCR_IM_RDREQ_Pos)  |
-					   ((initStruct->SlvWrReqIEn  ? 0 : 1) << I2C_SLVCR_IM_WRREQ_Pos);
-	
-		switch((uint32_t)I2Cx)
-		{
-		case ((uint32_t)I2C0):
-			if(initStruct->SlvRxEndIEn | initStruct->SlvTxEndIEn | initStruct->SlvSTADetIEn |
-			   initStruct->SlvSTODetIEn | initStruct->SlvRdReqIEn | initStruct->SlvWrReqIEn)
-			{
-				NVIC_EnableIRQ(I2C0_IRQn);
-			}
-			else
-			{
-				NVIC_DisableIRQ(I2C0_IRQn);
-			}
-			break;
-		
-		case ((uint32_t)I2C1):
-			if(initStruct->SlvRxEndIEn | initStruct->SlvTxEndIEn | initStruct->SlvSTADetIEn |
-			   initStruct->SlvSTODetIEn | initStruct->SlvRdReqIEn | initStruct->SlvWrReqIEn)
-			{
-				NVIC_EnableIRQ(I2C1_IRQn);
-			}
-			else
-			{
-				NVIC_DisableIRQ(I2C1_IRQn);
-			}
-			break;
-		}
-	}
+    switch ((uint32_t)I2Cx)
+    {
+    case ((uint32_t)I2C0):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_I2C0_Pos);
+        break;
+
+    case ((uint32_t)I2C1):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_I2C1_Pos);
+        break;
+    }
+
+    I2C_Close(I2Cx); //銝�鈭𥕦��桀�摮睃膥�芾��沉2C�喲𡡒�嗉挽蝵�
+
+    if (initStruct->Master == 1)
+    {
+        I2Cx->CLKDIV = SystemCoreClock / 5 / initStruct->MstClk;
+
+        I2Cx->MSTCMD = (I2Cx->MSTCMD & (~I2C_MSTCMD_IF_Msk)) | (1 << I2C_MSTCMD_IF_Pos); //雿輯�銝剜鱏銋见�����支葉�剜�敹�
+        I2Cx->CTRL &= ~I2C_CTRL_MSTIE_Msk;
+        I2Cx->CTRL |= (initStruct->MstIEn << I2C_CTRL_MSTIE_Pos);
+
+        switch ((uint32_t)I2Cx)
+        {
+        case ((uint32_t)I2C0):
+            if (initStruct->MstIEn)
+            {
+                NVIC_EnableIRQ(I2C0_IRQn);
+            }
+            else
+            {
+                NVIC_DisableIRQ(I2C0_IRQn);
+            }
+            break;
+
+        case ((uint32_t)I2C1):
+            if (initStruct->MstIEn)
+            {
+                NVIC_EnableIRQ(I2C1_IRQn);
+            }
+            else
+            {
+                NVIC_DisableIRQ(I2C1_IRQn);
+            }
+            break;
+        }
+    }
+    else
+    {
+        I2Cx->SLVCR |= (1 << I2C_SLVCR_SLAVE_Pos);
+
+        I2Cx->SLVCR &= ~(I2C_SLVCR_ADDR7b_Msk | I2C_SLVCR_ADDR_Msk);
+        I2Cx->SLVCR |= (1 << I2C_SLVCR_ACK_Pos) |
+                       (initStruct->Addr7b << I2C_SLVCR_ADDR7b_Pos) |
+                       (initStruct->SlvAddr << I2C_SLVCR_ADDR_Pos);
+
+        I2Cx->SLVIF = I2C_SLVIF_RXEND_Msk | I2C_SLVIF_TXEND_Msk | I2C_SLVIF_STADET_Msk | I2C_SLVIF_STODET_Msk; //皜�葉�剜�敹�
+        I2Cx->SLVCR &= ~(I2C_SLVCR_IM_RXEND_Msk | I2C_SLVCR_IM_TXEND_Msk | I2C_SLVCR_IM_STADET_Msk | I2C_SLVCR_IM_STODET_Msk |
+                         I2C_SLVCR_IM_RDREQ_Msk | I2C_SLVCR_IM_WRREQ_Msk);
+        I2Cx->SLVCR |= ((initStruct->SlvRxEndIEn ? 0 : 1) << I2C_SLVCR_IM_RXEND_Pos) |
+                       ((initStruct->SlvTxEndIEn ? 0 : 1) << I2C_SLVCR_IM_TXEND_Pos) |
+                       ((initStruct->SlvSTADetIEn ? 0 : 1) << I2C_SLVCR_IM_STADET_Pos) |
+                       ((initStruct->SlvSTODetIEn ? 0 : 1) << I2C_SLVCR_IM_STODET_Pos) |
+                       ((initStruct->SlvRdReqIEn ? 0 : 1) << I2C_SLVCR_IM_RDREQ_Pos) |
+                       ((initStruct->SlvWrReqIEn ? 0 : 1) << I2C_SLVCR_IM_WRREQ_Pos);
+
+        switch ((uint32_t)I2Cx)
+        {
+        case ((uint32_t)I2C0):
+            if (initStruct->SlvRxEndIEn | initStruct->SlvTxEndIEn | initStruct->SlvSTADetIEn |
+                initStruct->SlvSTODetIEn | initStruct->SlvRdReqIEn | initStruct->SlvWrReqIEn)
+            {
+                NVIC_EnableIRQ(I2C0_IRQn);
+            }
+            else
+            {
+                NVIC_DisableIRQ(I2C0_IRQn);
+            }
+            break;
+
+        case ((uint32_t)I2C1):
+            if (initStruct->SlvRxEndIEn | initStruct->SlvTxEndIEn | initStruct->SlvSTADetIEn |
+                initStruct->SlvSTODetIEn | initStruct->SlvRdReqIEn | initStruct->SlvWrReqIEn)
+            {
+                NVIC_EnableIRQ(I2C1_IRQn);
+            }
+            else
+            {
+                NVIC_DisableIRQ(I2C1_IRQn);
+            }
+            break;
+        }
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Open()
-* 髡夔佽隴:	I2C湖羲ㄛ埰勍彶楷
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Open()
+* �蠘�霂湔�:	I2C�枏�嚗��霈豢𤣰��
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void I2C_Open(I2C_TypeDef * I2Cx)
+void I2C_Open(I2C_TypeDef *I2Cx)
 {
-	I2Cx->CTRL |= (0x01 << I2C_CTRL_EN_Pos);
+    I2Cx->CTRL |= (0x01 << I2C_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Close()
-* 髡夔佽隴:	I2C壽敕ㄛ輦砦彶楷
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Close()
+* �蠘�霂湔�:	I2C�喲𡡒嚗𣬚�甇X𤣰��
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void I2C_Close(I2C_TypeDef * I2Cx)
+void I2C_Close(I2C_TypeDef *I2Cx)
 {
-	I2Cx->CTRL &= ~I2C_CTRL_EN_Msk;
+    I2Cx->CTRL &= ~I2C_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Start()
-* 髡夔佽隴:	莉汜お宎陓瘍甜楷冞扢掘華硊
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-*			uint8_t addr			扢掘華硊
-* 怀    堤: uint8_t					1 諉彶善ACK   0 諉彶善NACK
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Start()
+* �蠘�霂湔�:	鈭抒�韏瑕�靽∪噡撟嗅���挽憭�𧑐��
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+*			uint8_t addr			霈曉��啣�
+* 颲�    ��: uint8_t					1 �交𤣰�蚊CK   0 �交𤣰�衹ACK
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint8_t I2C_Start(I2C_TypeDef * I2Cx, uint8_t addr)
+uint8_t I2C_Start(I2C_TypeDef *I2Cx, uint8_t addr)
 {
-	I2Cx->MSTDAT = addr;
-	I2Cx->MSTCMD = (1 << I2C_MSTCMD_STA_Pos) |		
-				   (1 << I2C_MSTCMD_WR_Pos);				//楷冞お宎弇睿植儂華硊
-	while(I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk) __NOP();		//脹渾楷冞俇傖
-	
-	return (I2Cx->MSTCMD & I2C_MSTCMD_RXACK_Msk) ? 0 : 1;
+    I2Cx->MSTDAT = addr;
+    I2Cx->MSTCMD = (1 << I2C_MSTCMD_STA_Pos) |
+                   (1 << I2C_MSTCMD_WR_Pos); //�煾��絲憪衤��䔶��箏𧑐��
+    while (I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk)
+        __NOP(); //蝑匧��煾�����
+
+    return (I2Cx->MSTCMD & I2C_MSTCMD_RXACK_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Stop()
-* 髡夔佽隴:	莉汜礿砦陓瘍
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Stop()
+* �蠘�霂湔�:	鈭抒��𨀣迫靽∪噡
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void I2C_Stop(I2C_TypeDef * I2Cx)
+void I2C_Stop(I2C_TypeDef *I2Cx)
 {
-	I2Cx->MSTCMD = (1 << I2C_MSTCMD_STO_Pos);
-	while(I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk) __NOP();		//脹渾楷冞俇傖
+    I2Cx->MSTCMD = (1 << I2C_MSTCMD_STO_Pos);
+    while (I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk)
+        __NOP(); //蝑匧��煾�����
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Write()
-* 髡夔佽隴:	迡⻌珨跺杅擂
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-*			uint8_t data			猁迡腔杅擂
-* 怀    堤: uint8_t					1 諉彶善ACK   0 諉彶善NACK
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Write()
+* �蠘�霂湔�:	�坔�銝�銝芣㺭��
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+*			uint8_t data			閬����㺭��
+* 颲�    ��: uint8_t					1 �交𤣰�蚊CK   0 �交𤣰�衹ACK
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint8_t I2C_Write(I2C_TypeDef * I2Cx, uint8_t data)
-{	
-	I2Cx->MSTDAT = data;
-	I2Cx->MSTCMD = (1 << I2C_MSTCMD_WR_Pos);
-	while(I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk) __NOP();		//脹渾楷冞俇傖
-	
-	return (I2Cx->MSTCMD & I2C_MSTCMD_RXACK_Msk) ? 0 : 1;
+uint8_t I2C_Write(I2C_TypeDef *I2Cx, uint8_t data)
+{
+    I2Cx->MSTDAT = data;
+    I2Cx->MSTCMD = (1 << I2C_MSTCMD_WR_Pos);
+    while (I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk)
+        __NOP(); //蝑匧��煾�����
+
+    return (I2Cx->MSTCMD & I2C_MSTCMD_RXACK_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	I2C_Read()
-* 髡夔佽隴:	黍龰珨跺杅擂
-* 怀    ⻌: I2C_TypeDef * I2Cx		硌隅猁掩扢离腔I2Cㄛ衄虴硉婦嬤I2C0﹜I2C1
-*			uint8_t ack				1 楷冞ACK   0 楷冞NACK
-* 怀    堤: uint8_t					黍龰善腔杅擂
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	I2C_Read()
+* �蠘�霂湔�:	霂餃�銝�銝芣㺭��
+* 颲�    ��: I2C_TypeDef * I2Cx		���閬�◤霈曄蔭��2C嚗峕����澆��施2C0��2C1
+*			uint8_t ack				1 �煾��CK   0 �煾��ACK
+* 颲�    ��: uint8_t					霂餃��啁��唳旿
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint8_t I2C_Read(I2C_TypeDef * I2Cx, uint8_t ack)
+uint8_t I2C_Read(I2C_TypeDef *I2Cx, uint8_t ack)
 {
-	I2Cx->MSTCMD = (1 << I2C_MSTCMD_RD_Pos) |
-				   ((ack ? 0 : 1) << I2C_MSTCMD_ACK_Pos);
-	while(I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk) __NOP();		//脹渾諉彶俇傖
-    
+    I2Cx->MSTCMD = (1 << I2C_MSTCMD_RD_Pos) |
+                   ((ack ? 0 : 1) << I2C_MSTCMD_ACK_Pos);
+    while (I2Cx->MSTCMD & I2C_MSTCMD_TIP_Msk)
+        __NOP(); //蝑匧��交𤣰摰峕�
+
     return I2Cx->MSTDAT;
 }

+ 22 - 22
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h

@@ -1,31 +1,31 @@
 #ifndef __SWM320_I2C_H__
 #define __SWM320_I2C_H__
 
-typedef struct {
-	uint8_t  Master;		//1 主机模式
-	uint8_t  Addr7b;		//1 7位地址     0 10位地址
-	
-	uint32_t MstClk;		//主机传输时钟频率
-	uint8_t  MstIEn;		//主机模式中断使能
-	
-	uint16_t SlvAddr;		//从机地址
-	uint8_t  SlvRxEndIEn;	//从机接收完成中断使能
-	uint8_t  SlvTxEndIEn;	//从机发送完成中断使能
-	uint8_t  SlvSTADetIEn;	//从机检测到起始中断使能
-	uint8_t  SlvSTODetIEn;	//从机检测到终止中断使能
-	uint8_t  SlvRdReqIEn;	//从机接收到读请求中断使能
-	uint8_t  SlvWrReqIEn;	//从机接收到写请求中断使能
-} I2C_InitStructure;
+typedef struct
+{
+    uint8_t Master; //1 涓绘満妯″紡
+    uint8_t Addr7b; //1 7浣嶅湴鍧€     0 10浣嶅湴鍧€
+
+    uint32_t MstClk; //涓绘満浼犺緭鏃堕挓棰戠巼
+    uint8_t MstIEn;  //涓绘満妯″紡涓�柇浣胯兘
 
+    uint16_t SlvAddr;     //浠庢満鍦板潃
+    uint8_t SlvRxEndIEn;  //浠庢満鎺ユ敹瀹屾垚涓�柇浣胯兘
+    uint8_t SlvTxEndIEn;  //浠庢満鍙戦€佸畬鎴愪腑鏂�娇鑳�
+    uint8_t SlvSTADetIEn; //浠庢満妫€娴嬪埌璧峰�涓�柇浣胯兘
+    uint8_t SlvSTODetIEn; //浠庢満妫€娴嬪埌缁堟�涓�柇浣胯兘
+    uint8_t SlvRdReqIEn;  //浠庢満鎺ユ敹鍒拌�璇锋眰涓�柇浣胯兘
+    uint8_t SlvWrReqIEn;  //浠庢満鎺ユ敹鍒板啓璇锋眰涓�柇浣胯兘
+} I2C_InitStructure;
 
-void I2C_Init(I2C_TypeDef * I2Cx, I2C_InitStructure * initStruct);
+void I2C_Init(I2C_TypeDef *I2Cx, I2C_InitStructure *initStruct);
 
-void I2C_Open(I2C_TypeDef * I2Cx);
-void I2C_Close(I2C_TypeDef * I2Cx);
+void I2C_Open(I2C_TypeDef *I2Cx);
+void I2C_Close(I2C_TypeDef *I2Cx);
 
-uint8_t I2C_Start(I2C_TypeDef * I2Cx, uint8_t addr);
-void I2C_Stop(I2C_TypeDef * I2Cx);
-uint8_t I2C_Write(I2C_TypeDef * I2Cx, uint8_t data);
-uint8_t I2C_Read(I2C_TypeDef * I2Cx, uint8_t ack);
+uint8_t I2C_Start(I2C_TypeDef *I2Cx, uint8_t addr);
+void I2C_Stop(I2C_TypeDef *I2Cx);
+uint8_t I2C_Write(I2C_TypeDef *I2Cx, uint8_t data);
+uint8_t I2C_Read(I2C_TypeDef *I2Cx, uint8_t ack);
 
 #endif //__SWM320_I2C_H__

+ 95 - 102
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ: SWM320_lcd.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄLCD¹¦ÄÜÇý¶¯¿â
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî: 
-* °æ±¾ÈÕÆÚ:	V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼:  
+* 文件�称: SWM320_lcd.c
+* 功能说明:	SWM320�片机的LCD功能驱动库
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项: 
+* 版本日期:	V1.1.0		2017年10月25日
+* �级记录:  
 *
 *
 *******************************************************************************************************************************************
@@ -24,131 +24,124 @@
 #include <string.h>
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	LCD_Init()
-* ¹¦ÄÜ˵Ã÷:	LCD³õʼ»¯
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-*			LCD_InitStructure * initStruct    °üº¬LCDÏà¹ØÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	LCD_Init()
+* 功能说明:	LCD�始化
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+*			LCD_InitStructure * initStruct    包�LCD相关设定值的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct)
-{	
-	switch((uint32_t)LCDx)
-	{
-	case ((uint32_t)LCD):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_LCD_Pos);
-		break;
-	}
-		
-	if(initStruct->Interface == LCD_INTERFACE_RGB)
-	{
-		LCDx->START = (0 << LCD_START_MPUEN_Pos);
-		
-		LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) |
-					((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) |
-					(initStruct->ClkAlways << LCD_CR0_DCLK_Pos) |
-					(initStruct->HsyncWidth << LCD_CR0_HLOW_Pos);
-		
-		LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos)  |
-					((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos)  |
-					((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos)  |
-					((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos)  |
-					(initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) |
-					(initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos);
-	}
-	else if(initStruct->Interface == LCD_INTERFACE_I80)
-	{
-		// 
-	}
-	
-	LCDx->IE = 1;
-	LCDx->IF = 1;	//Çå³ý±êÖ¾
-	if(initStruct->IntEOTEn) LCD_INTEn(LCDx);
-	else					 LCD_INTDis(LCDx);
-	
-	switch((uint32_t)LCDx)
-	{
-	case ((uint32_t)LCD):		
-		if(initStruct->IntEOTEn)
-		{
-			NVIC_EnableIRQ(LCD_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(LCD_IRQn);
-		}
-		break;
-	}
+void LCD_Init(LCD_TypeDef *LCDx, LCD_InitStructure *initStruct)
+{
+    switch ((uint32_t)LCDx)
+    {
+    case ((uint32_t)LCD):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_LCD_Pos);
+        break;
+    }
+
+    LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) |
+                ((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) |
+                (initStruct->ClkAlways << LCD_CR0_DCLK_Pos) |
+                (initStruct->HsyncWidth << LCD_CR0_HLOW_Pos);
+
+    LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos) |
+                ((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos) |
+                ((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos) |
+                ((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos) |
+                (initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) |
+                (initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos);
+
+    LCDx->IE = 1;
+    LCDx->IF = 1; //清除标志
+    if (initStruct->IntEOTEn)
+        LCD_INTEn(LCDx);
+    else
+        LCD_INTDis(LCDx);
+
+    switch ((uint32_t)LCDx)
+    {
+    case ((uint32_t)LCD):
+        if (initStruct->IntEOTEn)
+        {
+            NVIC_EnableIRQ(LCD_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(LCD_IRQn);
+        }
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_Start()
-* ¹¦ÄÜ˵Ã÷:	Æô¶¯Ò»´ÎÊý¾Ý´«Êä
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_Start()
+* 功能说明:	�动一次数�传输
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void LCD_Start(LCD_TypeDef * LCDx)
+void LCD_Start(LCD_TypeDef *LCDx)
 {
-	LCDx->START |= (1 << LCD_START_GO_Pos) | (1 << LCD_START_BURST_Pos);
+    LCDx->START |= (1 << LCD_START_GO_Pos) | (1 << LCD_START_BURST_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_IsBusy()
-* ¹¦ÄÜ˵Ã÷:	ÊÇ·ñÕýÔÚ½øÐÐÊý¾Ý´«Êä
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: uint32_t			1 ÕýÔÚ´«ÊäÊý¾Ý    0 Êý¾Ý´«ÊäÒÑÍê³É
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_IsBusy()
+* 功能说明:	是�正在进行数�传输
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: uint32_t			1 正在传输数�    0 数�传输已完�
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t LCD_IsBusy(LCD_TypeDef * LCDx)
+uint32_t LCD_IsBusy(LCD_TypeDef *LCDx)
 {
-	return (LCDx->START & LCD_START_GO_Msk) ? 1 : 0;
+    return (LCDx->START & LCD_START_GO_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_INTEn()
-* ¹¦ÄÜ˵Ã÷:	LCDÖжÏʹÄÜ£¬Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êäʱ´¥·¢ÖжÏ
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_INTEn()
+* 功能说明:	LCD中断使能,完�指定长度的数�传输时触�中断
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTEn(LCD_TypeDef * LCDx)
+void LCD_INTEn(LCD_TypeDef *LCDx)
 {
-	LCDx->IM = 0;
+    LCDx->IM = 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_INTDis()
-* ¹¦ÄÜ˵Ã÷:	LCDÖжϽûÖ¹£¬Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êäʱ²»´¥·¢ÖжÏ
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_INTDis()
+* 功能说明:	LCD中断�止,完�指定长度的数�传输时�触�中断
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTDis(LCD_TypeDef * LCDx)
+void LCD_INTDis(LCD_TypeDef *LCDx)
 {
-	LCDx->IM = 1;
+    LCDx->IM = 1;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_INTClr()
-* ¹¦ÄÜ˵Ã÷:	LCDÖжϱêÖ¾Çå³ý
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_INTClr()
+* 功能说明:	LCD中断标志清除
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTClr(LCD_TypeDef * LCDx)
+void LCD_INTClr(LCD_TypeDef *LCDx)
 {
-	LCDx->IF = 1;
+    LCDx->IF = 1;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: LCD_INTStat()
-* ¹¦ÄÜ˵Ã÷:	LCDÖжÏ״̬²éѯ
-* Êä    Èë: LCD_TypeDef * LCDx	Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD
-* Êä    ³ö: uint32_t			1 Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êä    0 δÍê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êä
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: LCD_INTStat()
+* 功能说明:	LCD中断状�查询
+* 输    入: LCD_TypeDef * LCDx	指定�被设置的LCD,有效值包括LCD
+* 输    出: uint32_t			1 完�指定长度的数�传输    0 未完�指定长度的数�传输
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t LCD_INTStat(LCD_TypeDef * LCDx)
+uint32_t LCD_INTStat(LCD_TypeDef *LCDx)
 {
-	return (LCDx->IF & 0x01) ? 1 : 0;
+    return (LCDx->IF & 0x01) ? 1 : 0;
 }

+ 58 - 68
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h

@@ -1,80 +1,70 @@
 #ifndef __SWM320_LCD_H__
 #define __SWM320_LCD_H__
 
+typedef struct
+{
+    uint16_t HnPixel;   //姘村钩鏂瑰悜鍍忕礌涓�暟锛屾渶澶у彇鍊�1024
+    uint16_t VnPixel;   //鍨傜洿鏂瑰悜鍍忕礌涓�暟锛屾渶澶у彇鍊� 768
+    uint8_t Hfp;        //horizonal front porch锛屾渶澶у彇鍊�32
+    uint8_t Hbp;        //horizonal back porch锛� 鏈€澶у彇鍊�128
+    uint8_t Vfp;        //vertical front porch锛� 鏈€澶у彇鍊�8
+    uint8_t Vbp;        //vertical back porch锛�  鏈€澶у彇鍊�32
+    uint8_t ClkDiv;     //绯荤粺鏃堕挓缁廋lkDiv鍒嗛�鍚庝骇鐢烡OCCLK锛�0 2鍒嗛�    1 4鍒嗛�    2 6鍒嗛�    ... ...    31 64鍒嗛�
+    uint8_t SamplEdge;  //灞忓箷鍦―OTCLK鐨勫摢涓�竟娌块噰鏍锋暟鎹�細LCD_SAMPLEDGE_RISE銆丩CD_SAMPLEDGE_FALL
+    uint8_t ClkAlways;  //1 涓€鐩磋緭鍑篋OTCLK    0 鍙�湪浼犺緭鏁版嵁鏃惰緭鍑篋OTCLK
+    uint8_t HsyncWidth; //HSYNC浣庣數骞虫寔缁��灏戜釜DOTCLK锛屽彇鍊硷細LCD_HSYNC_1DOTCLK銆丩CD_HSYNC_2DOTCLK銆丩CD_HSYNC_3DOTCLK銆丩CD_HSYNC_4DOTCLK
 
-typedef struct {
-	uint8_t  Interface;		//LCD屏接口:LCD_INTERFACE_RGB、LCD_INTERFACE_I80、LCD_INTERFACE_M68
-	
-	/* RGB同步接口参数 */
-	uint16_t HnPixel;		//水平方向像素个数,最大取值1024
-	uint16_t VnPixel;		//垂直方向像素个数,最大取值 768
-	uint8_t  Hfp;			//horizonal front porch,最大取值32
-	uint8_t  Hbp;			//horizonal back porch, 最大取值128
-	uint8_t  Vfp;			//vertical front porch, 最大取值8
-	uint8_t  Vbp;			//vertical back porch,  最大取值32
-	uint8_t  ClkDiv;		//系统时钟经ClkDiv分频后产生DOCCLK,0 2分频    1 4分频    2 6分频    ... ...    31 64分频
-	uint8_t  SamplEdge;		//屏幕在DOTCLK的哪个边沿采样数据:LCD_SAMPLEDGE_RISE、LCD_SAMPLEDGE_FALL
-	uint8_t  ClkAlways;		//1 一直输出DOTCLK    0 只在传输数据时输出DOTCLK
-	uint8_t  HsyncWidth;	//HSYNC低电平持续多少个DOTCLK,取值:LCD_HSYNC_1DOTCLK、LCD_HSYNC_2DOTCLK、LCD_HSYNC_3DOTCLK、LCD_HSYNC_4DOTCLK
-	
-	uint8_t  IntEOTEn;		//End of Transter(传输完成)中断使能
+    uint8_t IntEOTEn; //End of Transter锛堜紶杈撳畬鎴愶級涓�柇浣胯兘
 } LCD_InitStructure;
 
+#define LCD_SAMPLEDGE_RISE 0 //灞忓箷鍦―OTCLK鐨勪笂鍗囨部閲囨牱鏁版嵁
+#define LCD_SAMPLEDGE_FALL 1 //灞忓箷鍦―OTCLK鐨勪笅闄嶆部閲囨牱鏁版嵁
 
-#define LCD_INTERFACE_RGB	0
-#define LCD_INTERFACE_I80	1
-#define LCD_INTERFACE_M68	2
+#define LCD_HSYNC_1DOTCLK 0 //1涓狣OTCLK
+#define LCD_HSYNC_2DOTCLK 1
+#define LCD_HSYNC_3DOTCLK 2
+#define LCD_HSYNC_4DOTCLK 3
 
-#define LCD_SAMPLEDGE_RISE	0	//屏幕在DOTCLK的上升沿采样数据
-#define LCD_SAMPLEDGE_FALL	1	//屏幕在DOTCLK的下降沿采样数据
+#define LCD_CLKDIV_2 0
+#define LCD_CLKDIV_4 1
+#define LCD_CLKDIV_6 2
+#define LCD_CLKDIV_8 3
+#define LCD_CLKDIV_10 4
+#define LCD_CLKDIV_12 5
+#define LCD_CLKDIV_14 6
+#define LCD_CLKDIV_16 7
+#define LCD_CLKDIV_18 8
+#define LCD_CLKDIV_20 9
+#define LCD_CLKDIV_22 10
+#define LCD_CLKDIV_24 11
+#define LCD_CLKDIV_26 12
+#define LCD_CLKDIV_28 13
+#define LCD_CLKDIV_30 14
+#define LCD_CLKDIV_32 15
+#define LCD_CLKDIV_34 16
+#define LCD_CLKDIV_36 17
+#define LCD_CLKDIV_38 18
+#define LCD_CLKDIV_40 19
+#define LCD_CLKDIV_42 20
+#define LCD_CLKDIV_44 21
+#define LCD_CLKDIV_46 22
+#define LCD_CLKDIV_48 23
+#define LCD_CLKDIV_50 24
+#define LCD_CLKDIV_52 25
+#define LCD_CLKDIV_54 26
+#define LCD_CLKDIV_56 27
+#define LCD_CLKDIV_58 28
+#define LCD_CLKDIV_60 29
+#define LCD_CLKDIV_62 30
+#define LCD_CLKDIV_64 31
 
-#define LCD_HSYNC_1DOTCLK	0	//1个DOTCLK
-#define LCD_HSYNC_2DOTCLK	1
-#define LCD_HSYNC_3DOTCLK	2
-#define LCD_HSYNC_4DOTCLK	3
-
-#define LCD_CLKDIV_2		0
-#define LCD_CLKDIV_4		1
-#define LCD_CLKDIV_6		2
-#define LCD_CLKDIV_8		3
-#define LCD_CLKDIV_10		4
-#define LCD_CLKDIV_12		5
-#define LCD_CLKDIV_14		6
-#define LCD_CLKDIV_16		7
-#define LCD_CLKDIV_18		8
-#define LCD_CLKDIV_20		9
-#define LCD_CLKDIV_22		10
-#define LCD_CLKDIV_24		11
-#define LCD_CLKDIV_26		12
-#define LCD_CLKDIV_28		13
-#define LCD_CLKDIV_30		14
-#define LCD_CLKDIV_32		15
-#define LCD_CLKDIV_34		16
-#define LCD_CLKDIV_36		17
-#define LCD_CLKDIV_38		18
-#define LCD_CLKDIV_40		19
-#define LCD_CLKDIV_42		20
-#define LCD_CLKDIV_44		21
-#define LCD_CLKDIV_46		22
-#define LCD_CLKDIV_48		23
-#define LCD_CLKDIV_50		24
-#define LCD_CLKDIV_52		25
-#define LCD_CLKDIV_54		26
-#define LCD_CLKDIV_56		27
-#define LCD_CLKDIV_58		28
-#define LCD_CLKDIV_60		29
-#define LCD_CLKDIV_62		30
-#define LCD_CLKDIV_64		31
-
-
-void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct);
-void LCD_Start(LCD_TypeDef * LCDx);
-uint32_t LCD_IsBusy(LCD_TypeDef * LCDx);
-
-void LCD_INTEn(LCD_TypeDef * LCDx);
-void LCD_INTDis(LCD_TypeDef * LCDx);
-void LCD_INTClr(LCD_TypeDef * LCDx);
-uint32_t LCD_INTStat(LCD_TypeDef * LCDx);
+void LCD_Init(LCD_TypeDef *LCDx, LCD_InitStructure *initStruct);
+void LCD_Start(LCD_TypeDef *LCDx);
+uint32_t LCD_IsBusy(LCD_TypeDef *LCDx);
 
+void LCD_INTEn(LCD_TypeDef *LCDx);
+void LCD_INTDis(LCD_TypeDef *LCDx);
+void LCD_INTClr(LCD_TypeDef *LCDx);
+uint32_t LCD_INTStat(LCD_TypeDef *LCDx);
 
 #endif //__SWM320_LCD_H__

+ 136 - 121
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ: SWM320_norflash.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄNOR FlashÇý¶¯³ÌÐò
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî:
-* °æ±¾ÈÕÆÚ: V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼: 
+* 文件�称: SWM320_norflash.c
+* 功能说明:	SWM320�片机的NOR Flash驱动程�
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项:
+* 版本日期: V1.1.0		2017年10月25日
+* �级记录: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,152 +21,167 @@
 #include "SWM320.h"
 #include "SWM320_norflash.h"
 
-
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_Init()
-* ¹¦ÄÜ˵Ã÷:	NOR Flash¿ØÖÆÆ÷³õʼ»¯
-* Êä    Èë: NORFL_InitStructure * initStruct    °üº¬NOR Flash¿ØÖÆÆ÷Ïà¹ØÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	NORFL_Init()
+* 功能说明:	NOR Flash控制器�始化
+* 输    入: NORFL_InitStructure * initStruct    包�NOR Flash控制器相关设定值的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void NORFL_Init(NORFL_InitStructure * initStruct)
+void NORFL_Init(NORFL_InitStructure *initStruct)
 {
-	uint32_t i;
-	
-	// ÅäÖÃSRAMǰÐèҪˢÐÂÏÂSDRAM¿ØÖÆÆ÷
-	do {
-		SYS->CLKEN |=  (1 << SYS_CLKEN_SDRAM_Pos);
-		
-		while(SDRAMC->REFDONE == 0);
-		SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
-		
-		for(i = 0; i < 1000; i++) __NOP();
-		SYS->CLKEN &= ~(1 << SYS_CLKEN_SDRAM_Pos);
-	} while(0);
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_NORFL_Pos);
-	
-	NORFLC->CR = ((initStruct->DataWidth == 8 ? 1 : 0) << NORFLC_CR_BYTEIF_Pos) |
-				 (initStruct->WELowPulseTime << NORFLC_CR_WRTIME_Pos) |
-				 (initStruct->OEPreValidTime << NORFLC_CR_RDTIME_Pos);
-	
-	NORFLC->IE = 3;
-	NORFLC->IF = 3;		// Çå³ýÖжϱêÖ¾
-	if(initStruct->OperFinishIEn)  NORFLC->IM &= ~(1 << NORFLC_IM_FINISH_Pos);
-	else                           NORFLC->IM |=  (1 << NORFLC_IM_FINISH_Pos);
-	if(initStruct->OperTimeoutIEn) NORFLC->IM &= ~(1 << NORFLC_IM_TIMEOUT_Pos);	
-	else                           NORFLC->IM |=  (1 << NORFLC_IM_TIMEOUT_Pos);	
+    uint32_t i;
+
+    // �置SRAM�需�刷新下SDRAM控制器
+    do
+    {
+        SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
+
+        while (SDRAMC->REFDONE == 0)
+            ;
+        SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
+
+        for (i = 0; i < 1000; i++)
+            __NOP();
+        SYS->CLKEN &= ~(1 << SYS_CLKEN_SDRAM_Pos);
+    } while (0);
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_NORFL_Pos);
+
+    NORFLC->CR = ((initStruct->DataWidth == 8 ? 1 : 0) << NORFLC_CR_BYTEIF_Pos) |
+                 (initStruct->WELowPulseTime << NORFLC_CR_WRTIME_Pos) |
+                 (initStruct->OEPreValidTime << NORFLC_CR_RDTIME_Pos);
+
+    NORFLC->IE = 3;
+    NORFLC->IF = 3; // 清除中断标志
+    if (initStruct->OperFinishIEn)
+        NORFLC->IM &= ~(1 << NORFLC_IM_FINISH_Pos);
+    else
+        NORFLC->IM |= (1 << NORFLC_IM_FINISH_Pos);
+    if (initStruct->OperTimeoutIEn)
+        NORFLC->IM &= ~(1 << NORFLC_IM_TIMEOUT_Pos);
+    else
+        NORFLC->IM |= (1 << NORFLC_IM_TIMEOUT_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_ChipErase()
-* ¹¦ÄÜ˵Ã÷:	NOR FlashÕûƬ²Á³ý
-* Êä    Èë: ÎÞ
-* Êä    ³ö: uint32_t			0 ²Á³ý³É¹¦    1 ²Á³ý³¬Ê±
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	NORFL_ChipErase()
+* 功能说明:	NOR Flash整片擦除
+* 输    入: 无
+* 输    出: uint32_t			0 擦除�功    1 擦除超时
+* 注�事项: 无
 ******************************************************************************************************************************************/
 uint32_t NORFL_ChipErase(void)
 {
-	uint32_t res;
-	
-	NORFLC->CMD = (NORFL_CMD_CHIP_ERASE << NORFLC_CMD_CMD_Pos);
-	
-	while(((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
-		  ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0)) __NOP();
-	
-	if(NORFLC->IF & NORFLC_IF_FINISH_Msk)  res = 0;
-	else                                   res = 1;
-	
-	NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
-	
-	return res;
+    uint32_t res;
+
+    NORFLC->CMD = (NORFL_CMD_CHIP_ERASE << NORFLC_CMD_CMD_Pos);
+
+    while (((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
+           ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0))
+        __NOP();
+
+    if (NORFLC->IF & NORFLC_IF_FINISH_Msk)
+        res = 0;
+    else
+        res = 1;
+
+    NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
+
+    return res;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_SectorErase()
-* ¹¦ÄÜ˵Ã÷:	NOR FlashÉÈÇø²Á³ý
-* Êä    Èë: uint32_t addr		Òª²Á³ýÉÈÇøµÄÆðʼµØÖ·
-* Êä    ³ö: uint32_t			0 ²Á³ý³É¹¦    1 ²Á³ý³¬Ê±
-* ×¢ÒâÊÂÏî: MX29LV128DB ǰ8ÉÈÇøÎª8K¡¢ºó255ÉÈÇøÎª64K    MX29LV128DT ǰ255ÉÈÇøÎª64K¡¢ºó8ÉÈÇøÎª8K
+* 函数�称:	NORFL_SectorErase()
+* 功能说明:	NOR Flash扇区擦除
+* 输    入: uint32_t addr		�擦除扇区的起始地�
+* 输    出: uint32_t			0 擦除�功    1 擦除超时
+* 注�事项: MX29LV128DB �8扇区为8K��255扇区为64K    MX29LV128DT �255扇区为64K��8扇区为8K
 ******************************************************************************************************************************************/
 uint32_t NORFL_SectorErase(uint32_t addr)
 {
-	uint32_t res;
-	
-	NORFLC->ADDR = addr;
-	NORFLC->CMD = (NORFL_CMD_SECTOR_ERASE << NORFLC_CMD_CMD_Pos);
-	
-	while(((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
-		  ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0)) __NOP();
-	
-	if(NORFLC->IF & NORFLC_IF_FINISH_Msk)  res = 0;
-	else                                   res = 1;
-	
-	NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
-	
-	return res;
+    uint32_t res;
+
+    NORFLC->ADDR = addr;
+    NORFLC->CMD = (NORFL_CMD_SECTOR_ERASE << NORFLC_CMD_CMD_Pos);
+
+    while (((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
+           ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0))
+        __NOP();
+
+    if (NORFLC->IF & NORFLC_IF_FINISH_Msk)
+        res = 0;
+    else
+        res = 1;
+
+    NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
+
+    return res;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_Write()
-* ¹¦ÄÜ˵Ã÷:	NOR Flashд
-* Êä    Èë: uint32_t addr		Êý¾ÝҪдÈëµÄµØÖ·
-*			uint32_t data		ҪдÈëµÄÊý¾Ý
-* Êä    ³ö: uint32_t			0 дÈë³É¹¦    1 дÈ볬ʱ
-* ×¢ÒâÊÂÏî: Ó²¼þÁ¬½Ó£¬Êý¾ÝÏßΪ16λʱ£¬°ë×ÖдÈ룻Êý¾ÝÏßΪ8λʱ£¬×Ö½ÚдÈë
+* 函数�称:	NORFL_Write()
+* 功能说明:	NOR Flash写
+* 输    入: uint32_t addr		数��写入的地�
+*			uint32_t data		�写入的数�
+* 输    出: uint32_t			0 写入�功    1 写入超时
+* 注�事项: 硬件连接,数�线为16�时,�字写入;数�线为8�时,字节写入
 ******************************************************************************************************************************************/
 uint32_t NORFL_Write(uint32_t addr, uint32_t data)
 {
-	uint32_t res;
-	
-	NORFLC->ADDR = addr;
-	NORFLC->CMD = (NORFL_CMD_PROGRAM << NORFLC_CMD_CMD_Pos) | (data << NORFLC_CMD_DATA_Pos);
-	
-	while(((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
-		  ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0)) __NOP();
-	
-	if(NORFLC->IF & NORFLC_IF_FINISH_Msk)  res = 0;
-	else                                   res = 1;
-	
-	NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
-	
-	return res;
+    uint32_t res;
+
+    NORFLC->ADDR = addr;
+    NORFLC->CMD = (NORFL_CMD_PROGRAM << NORFLC_CMD_CMD_Pos) | (data << NORFLC_CMD_DATA_Pos);
+
+    while (((NORFLC->IF & NORFLC_IF_FINISH_Msk) == 0) &&
+           ((NORFLC->IF & NORFLC_IF_TIMEOUT_Msk) == 0))
+        __NOP();
+
+    if (NORFLC->IF & NORFLC_IF_FINISH_Msk)
+        res = 0;
+    else
+        res = 1;
+
+    NORFLC->IF = NORFLC_IF_FINISH_Msk | NORFLC_IF_TIMEOUT_Msk;
+
+    return res;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_Read()
-* ¹¦ÄÜ˵Ã÷:	NOR Flash¶Á
-* Êä    Èë: uint32_t addr		Êý¾ÝÒª¶Á³öµÄµØÖ·
-* Êä    ³ö: uint32_t			¶Á³öµÄÊý¾Ý
-* ×¢ÒâÊÂÏî: Ó²¼þÁ¬½Ó£¬Êý¾ÝÏßΪ16λʱ£¬°ë×Ö¶Á³ö£»Êý¾ÝÏßΪ8λʱ£¬×Ö½Ú¶Á³ö
+* 函数�称:	NORFL_Read()
+* 功能说明:	NOR Flash读
+* 输    入: uint32_t addr		数��读出的地�
+* 输    出: uint32_t			读出的数�
+* 注�事项: 硬件连接,数�线为16�时,�字读出;数�线为8�时,字节读出
 ******************************************************************************************************************************************/
 uint32_t NORFL_Read(uint32_t addr)
 {
-	NORFLC->ADDR = addr;
-	NORFLC->CMD = (NORFL_CMD_READ << NORFLC_CMD_CMD_Pos);
-	
-	return (NORFLC->CMD & NORFLC_CMD_DATA_Msk);
+    NORFLC->ADDR = addr;
+    NORFLC->CMD = (NORFL_CMD_READ << NORFLC_CMD_CMD_Pos);
+
+    return (NORFLC->CMD & NORFLC_CMD_DATA_Msk);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	NORFL_ReadID()
-* ¹¦ÄÜ˵Ã÷:	NOR Flash¶ÁID
-* Êä    Èë: uint32_t id_addr	IDµØÖ·£¬´Ë²ÎÊýÊÇоƬÏà¹ØµÄ£¬Ã¿ÖÖоƬ¶¼²»Í¬
-* Êä    ³ö: uint16_t			¶ÁÈ¡µ½µÄID
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	NORFL_ReadID()
+* 功能说明:	NOR Flash读ID
+* 输    入: uint32_t id_addr	ID地�,此�数是芯片相关的,��芯片都��
+* 输    出: uint16_t			读�到的ID
+* 注�事项: 无
 ******************************************************************************************************************************************/
 uint16_t NORFL_ReadID(uint32_t id_addr)
 {
-	uint16_t id;
-	
-	NORFLC->CMD = (NORFL_CMD_AUTO_SELECT << NORFLC_CMD_CMD_Pos);
-	
-	NORFLC->ADDR = id_addr;
-	NORFLC->CMD = (NORFL_CMD_READ << NORFLC_CMD_CMD_Pos);
-	
-	id = NORFLC->CMD & NORFLC_CMD_DATA_Msk;
-	
-	NORFLC->CMD = (NORFL_CMD_RESET << NORFLC_CMD_CMD_Pos);	// Í˳öID¶Áȡģʽ
-	
-	return id;
+    uint16_t id;
+
+    NORFLC->CMD = (NORFL_CMD_AUTO_SELECT << NORFLC_CMD_CMD_Pos);
+
+    NORFLC->ADDR = id_addr;
+    NORFLC->CMD = (NORFL_CMD_READ << NORFLC_CMD_CMD_Pos);
+
+    id = NORFLC->CMD & NORFLC_CMD_DATA_Msk;
+
+    NORFLC->CMD = (NORFL_CMD_RESET << NORFLC_CMD_CMD_Pos); // 退出ID读�模�
+
+    return id;
 }

+ 18 - 22
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h

@@ -1,38 +1,34 @@
 #ifndef __SWM320_NORFLASH_H__
 #define __SWM320_NORFLASH_H__
 
-typedef struct {
-	uint8_t DataWidth;			// 8、16
-	
-	uint8_t WELowPulseTime;		// WE# pulse width,单位为系统时钟周期,最大值为7
-	uint8_t OEPreValidTime;		// Valid data output after OE# low,单位为系统时钟周期,最大值为15
-	
-	uint8_t OperFinishIEn;		// 操作(写入、擦除)完成中断使能
-	uint8_t OperTimeoutIEn;
-} NORFL_InitStructure;
+typedef struct
+{
+    uint8_t DataWidth; // 8銆�16
 
+    uint8_t WELowPulseTime; // WE# pulse width锛屽崟浣嶄负绯荤粺鏃堕挓鍛ㄦ湡锛屾渶澶у€间负7
+    uint8_t OEPreValidTime; // Valid data output after OE# low锛屽崟浣嶄负绯荤粺鏃堕挓鍛ㄦ湡锛屾渶澶у€间负15
 
+    uint8_t OperFinishIEn; // 鎿嶄綔(鍐欏叆銆佹摝闄�)瀹屾垚涓�柇浣胯兘
+    uint8_t OperTimeoutIEn;
+} NORFL_InitStructure;
 
-void NORFL_Init(NORFL_InitStructure * initStruct);
+void NORFL_Init(NORFL_InitStructure *initStruct);
 uint32_t NORFL_ChipErase(void);
 uint32_t NORFL_SectorErase(uint32_t addr);
 uint32_t NORFL_Write(uint32_t addr, uint32_t data);
 uint32_t NORFL_Read(uint32_t addr);
 uint16_t NORFL_ReadID(uint32_t id_addr);
 
-
-/* 当前版本总线读只支持字读
+/* 褰撳墠鐗堟湰鎬荤嚎璇诲彧鏀�寔瀛楄�
 #define NORFL_Read8(addr)			*((volatile uint8_t  *)(NORFLM_BASE + addr))
 #define NORFL_Read16(addr)			*((volatile uint16_t *)(NORFLM_BASE + addr))    */
-#define NORFL_Read32(addr)			*((volatile uint32_t *)(NORFLM_BASE + addr))
-
-
-
-#define NORFL_CMD_READ              0
-#define NORFL_CMD_RESET             1
-#define NORFL_CMD_AUTO_SELECT       2
-#define NORFL_CMD_PROGRAM           3
-#define NORFL_CMD_CHIP_ERASE        4
-#define NORFL_CMD_SECTOR_ERASE      5
+#define NORFL_Read32(addr) *((volatile uint32_t *)(NORFLM_BASE + addr))
+
+#define NORFL_CMD_READ 0
+#define NORFL_CMD_RESET 1
+#define NORFL_CMD_AUTO_SELECT 2
+#define NORFL_CMD_PROGRAM 3
+#define NORFL_CMD_CHIP_ERASE 4
+#define NORFL_CMD_SECTOR_ERASE 5
 
 #endif // __SWM320_NORFLASH_H__

+ 198 - 199
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称: SWM320_port.c
-* 功能说明:	SWM320单片机的端口引脚功能选择库函数
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项:
-* 版本日期: V1.1.0		2017年10月25日
-* 升级记录: 
+* 鏂囦欢鍚嶇О: SWM320_port.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑绔�彛寮曡剼鍔熻兘閫夋嫨搴撳嚱鏁�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」:
+* 鐗堟湰鏃ユ湡: V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,201 +21,200 @@
 #include "SWM320.h"
 #include "SWM320_port.h"
 
-
 /****************************************************************************************************************************************** 
-* 函数名称: PORT_Init()
-* 功能说明:	端口引脚功能选择,可用的功能见"SWM320_port.h"文件
-* 输    入: uint32_t PORTx	   		指定PORT端口,有效值包括PORTA、PORTB、PORTC、PORTM、PORTN、PORTP
-*			uint32_t n		   		指定PORT引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
-*			uint32_t func	   		指定端口引脚要设定的功能,其可取值见"SWM320_port.h"文件
-*			uint32_t digit_in_en   	数字输入使能
-* 输    出: 无
-* 注意事项: 当引脚标号n为偶数时,func取值只能是FUNMUX0开头的,如FUNMUX0_UART0_RXD
-*			当引脚标号n为奇数时,func取值只能是FUNMUX1开头的,如FUNMUX1_UART0_TXD
+* 鍑芥暟鍚嶇О: PORT_Init()
+* 鍔熻兘璇存槑:	绔�彛寮曡剼鍔熻兘閫夋嫨锛屽彲鐢ㄧ殑鍔熻兘瑙�"SWM320_port.h"鏂囦欢
+* 杈�    鍏�: uint32_t PORTx	   		鎸囧畾PORT绔�彛锛屾湁鏁堝€煎寘鎷琍ORTA銆丳ORTB銆丳ORTC銆丳ORTM銆丳ORTN銆丳ORTP
+*			uint32_t n		   		鎸囧畾PORT寮曡剼锛屾湁鏁堝€煎寘鎷琍IN0銆丳IN1銆丳IN2銆�... ... PIN22銆丳IN23
+*			uint32_t func	   		鎸囧畾绔�彛寮曡剼瑕佽�瀹氱殑鍔熻兘锛屽叾鍙�彇鍊艰�"SWM320_port.h"鏂囦欢
+*			uint32_t digit_in_en   	鏁板瓧杈撳叆浣胯兘
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 褰撳紩鑴氭爣鍙穘涓哄伓鏁版椂锛宖unc鍙栧€煎彧鑳芥槸FUNMUX0寮€澶寸殑锛屽�FUNMUX0_UART0_RXD
+*			褰撳紩鑴氭爣鍙穘涓哄�鏁版椂锛宖unc鍙栧€煎彧鑳芥槸FUNMUX1寮€澶寸殑锛屽�FUNMUX1_UART0_TXD
 ******************************************************************************************************************************************/
 void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en)
 {
-	switch((uint32_t)PORTx)
-	{
-		case ((uint32_t)PORTA):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTA_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTA_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTA_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTA_MUX1 |= (func-100) << ((n-6)*5);
-				}
-			}
-			
-			PORT->PORTA_SEL &= ~(0x03 << (n*2));
-			PORT->PORTA_SEL |= (func > 99 ? 1 : func) << (n*2);
-			
-			PORT->PORTA_INEN &= ~(0x01 << n);
-			PORT->PORTA_INEN |= (digit_in_en << n);
-			break;
-			
-		case ((uint32_t)PORTB):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTB_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTB_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTB_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTB_MUX1 |= (func-100) << ((n-6)*5);
-				}
-			}
-			
-			PORT->PORTB_SEL &= ~(0x03 << (n*2));
-			PORT->PORTB_SEL |= (func > 99 ? 1 : func) << (n*2);
-			
-			PORT->PORTB_INEN &= ~(0x01 << n);
-			PORT->PORTB_INEN |= (digit_in_en << n);
-			break;
-		
-		case ((uint32_t)PORTC):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTC_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTC_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTC_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTC_MUX1 |= (func-100) << ((n-6)*5);
-				}
-			}
-			
-			PORT->PORTC_SEL &= ~(0x03 << (n*2));
-			PORT->PORTC_SEL |= (func > 99 ? 1 : func) << (n*2);
-			
-			PORT->PORTC_INEN &= ~(0x01 << n);
-			PORT->PORTC_INEN |= (digit_in_en << n);
-			break;
-		
-		case ((uint32_t)PORTM):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTM_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTM_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTM_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTM_MUX1 |= (func-100) << ((n-6)*5);
-				}
-				else if(n < PIN18)
-				{
-					PORT->PORTM_MUX2 &= ~(0x1F << ((n-12)*5));
-					PORT->PORTM_MUX2 |= (func-100) << ((n-12)*5);
-				}
-				else if(n < PIN24)
-				{
-					PORT->PORTM_MUX3 &= ~(0x1F << ((n-18)*5));
-					PORT->PORTM_MUX3 |= (func-100) << ((n-18)*5);
-				}
-			}
-			
-			if(n < 16)
-			{
-				PORT->PORTM_SEL0 &= ~(0x03 << (n*2));
-				PORT->PORTM_SEL0 |= (func > 99 ? 1 : func) << (n*2);
-			}
-			else
-			{
-				PORT->PORTM_SEL1 &= ~(0x03 << ((n-16)*2));
-				PORT->PORTM_SEL1 |= (func > 99 ? 1 : func) << ((n-16)*2);
-			}
-			
-			PORT->PORTM_INEN &= ~(0x01 << n);
-			PORT->PORTM_INEN |= (digit_in_en << n);
-			break;
-		
-		case ((uint32_t)PORTN):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTN_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTN_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTN_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTN_MUX1 |= (func-100) << ((n-6)*5);
-				}
-				else if(n < PIN18)
-				{
-					PORT->PORTN_MUX2 &= ~(0x1F << ((n-12)*5));
-					PORT->PORTN_MUX2 |= (func-100) << ((n-12)*5);
-				}
-			}
-			
-			if(n < 16)
-			{
-				PORT->PORTN_SEL0 &= ~(0x03 << (n*2));
-				PORT->PORTN_SEL0 |= (func > 99 ? 1 : func) << (n*2);
-			}
-			else
-			{
-				PORT->PORTN_SEL1 &= ~(0x03 << ((n-16)*2));
-				PORT->PORTN_SEL1 |= (func > 99 ? 1 : func) << ((n-16)*2);
-			}
-			
-			PORT->PORTN_INEN &= ~(0x01 << n);
-			PORT->PORTN_INEN |= (digit_in_en << n);
-			break;
-			
-		case ((uint32_t)PORTP):
-			if(func > 99)
-			{
-				if(n < PIN6)
-				{
-					PORT->PORTP_MUX0 &= ~(0x1F << (n*5));
-					PORT->PORTP_MUX0 |= (func-100) << (n*5);
-				}
-				else if(n < PIN12)
-				{
-					PORT->PORTP_MUX1 &= ~(0x1F << ((n-6)*5));
-					PORT->PORTP_MUX1 |= (func-100) << ((n-6)*5);
-				}
-				else if(n < PIN18)
-				{
-					PORT->PORTP_MUX2 &= ~(0x1F << ((n-12)*5));
-					PORT->PORTP_MUX2 |= (func-100) << ((n-12)*5);
-				}
-				else if(n < PIN24)
-				{
-					PORT->PORTP_MUX3 &= ~(0x1F << ((n-18)*5));
-					PORT->PORTP_MUX3 |= (func-100) << ((n-18)*5);
-				}
-			}
-			
-			if(n < 16)
-			{
-				PORT->PORTP_SEL0 &= ~(0x03 << (n*2));
-				PORT->PORTP_SEL0 |= (func > 99 ? 1 : func) << (n*2);
-			}
-			else
-			{
-				PORT->PORTP_SEL1 &= ~(0x03 << ((n-16)*2));
-				PORT->PORTP_SEL1 |= (func > 99 ? 1 : func) << ((n-16)*2);
-			}
-			
-			PORT->PORTP_INEN &= ~(0x01 << n);
-			PORT->PORTP_INEN |= (digit_in_en << n);
-			break;
-	}
+    switch ((uint32_t)PORTx)
+    {
+    case ((uint32_t)PORTA):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTA_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTA_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTA_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTA_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+        }
+
+        PORT->PORTA_SEL &= ~(0x03 << (n * 2));
+        PORT->PORTA_SEL |= (func > 99 ? 1 : func) << (n * 2);
+
+        PORT->PORTA_INEN &= ~(0x01 << n);
+        PORT->PORTA_INEN |= (digit_in_en << n);
+        break;
+
+    case ((uint32_t)PORTB):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTB_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTB_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTB_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTB_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+        }
+
+        PORT->PORTB_SEL &= ~(0x03 << (n * 2));
+        PORT->PORTB_SEL |= (func > 99 ? 1 : func) << (n * 2);
+
+        PORT->PORTB_INEN &= ~(0x01 << n);
+        PORT->PORTB_INEN |= (digit_in_en << n);
+        break;
+
+    case ((uint32_t)PORTC):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTC_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTC_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTC_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTC_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+        }
+
+        PORT->PORTC_SEL &= ~(0x03 << (n * 2));
+        PORT->PORTC_SEL |= (func > 99 ? 1 : func) << (n * 2);
+
+        PORT->PORTC_INEN &= ~(0x01 << n);
+        PORT->PORTC_INEN |= (digit_in_en << n);
+        break;
+
+    case ((uint32_t)PORTM):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTM_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTM_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTM_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTM_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+            else if (n < PIN18)
+            {
+                PORT->PORTM_MUX2 &= ~(0x1F << ((n - 12) * 5));
+                PORT->PORTM_MUX2 |= (func - 100) << ((n - 12) * 5);
+            }
+            else if (n < PIN24)
+            {
+                PORT->PORTM_MUX3 &= ~(0x1F << ((n - 18) * 5));
+                PORT->PORTM_MUX3 |= (func - 100) << ((n - 18) * 5);
+            }
+        }
+
+        if (n < 16)
+        {
+            PORT->PORTM_SEL0 &= ~(0x03 << (n * 2));
+            PORT->PORTM_SEL0 |= (func > 99 ? 1 : func) << (n * 2);
+        }
+        else
+        {
+            PORT->PORTM_SEL1 &= ~(0x03 << ((n - 16) * 2));
+            PORT->PORTM_SEL1 |= (func > 99 ? 1 : func) << ((n - 16) * 2);
+        }
+
+        PORT->PORTM_INEN &= ~(0x01 << n);
+        PORT->PORTM_INEN |= (digit_in_en << n);
+        break;
+
+    case ((uint32_t)PORTN):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTN_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTN_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTN_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTN_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+            else if (n < PIN18)
+            {
+                PORT->PORTN_MUX2 &= ~(0x1F << ((n - 12) * 5));
+                PORT->PORTN_MUX2 |= (func - 100) << ((n - 12) * 5);
+            }
+        }
+
+        if (n < 16)
+        {
+            PORT->PORTN_SEL0 &= ~(0x03 << (n * 2));
+            PORT->PORTN_SEL0 |= (func > 99 ? 1 : func) << (n * 2);
+        }
+        else
+        {
+            PORT->PORTN_SEL1 &= ~(0x03 << ((n - 16) * 2));
+            PORT->PORTN_SEL1 |= (func > 99 ? 1 : func) << ((n - 16) * 2);
+        }
+
+        PORT->PORTN_INEN &= ~(0x01 << n);
+        PORT->PORTN_INEN |= (digit_in_en << n);
+        break;
+
+    case ((uint32_t)PORTP):
+        if (func > 99)
+        {
+            if (n < PIN6)
+            {
+                PORT->PORTP_MUX0 &= ~(0x1F << (n * 5));
+                PORT->PORTP_MUX0 |= (func - 100) << (n * 5);
+            }
+            else if (n < PIN12)
+            {
+                PORT->PORTP_MUX1 &= ~(0x1F << ((n - 6) * 5));
+                PORT->PORTP_MUX1 |= (func - 100) << ((n - 6) * 5);
+            }
+            else if (n < PIN18)
+            {
+                PORT->PORTP_MUX2 &= ~(0x1F << ((n - 12) * 5));
+                PORT->PORTP_MUX2 |= (func - 100) << ((n - 12) * 5);
+            }
+            else if (n < PIN24)
+            {
+                PORT->PORTP_MUX3 &= ~(0x1F << ((n - 18) * 5));
+                PORT->PORTP_MUX3 |= (func - 100) << ((n - 18) * 5);
+            }
+        }
+
+        if (n < 16)
+        {
+            PORT->PORTP_SEL0 &= ~(0x03 << (n * 2));
+            PORT->PORTP_SEL0 |= (func > 99 ? 1 : func) << (n * 2);
+        }
+        else
+        {
+            PORT->PORTP_SEL1 &= ~(0x03 << ((n - 16) * 2));
+            PORT->PORTP_SEL1 |= (func > 99 ? 1 : func) << ((n - 16) * 2);
+        }
+
+        PORT->PORTP_INEN &= ~(0x01 << n);
+        PORT->PORTP_INEN |= (digit_in_en << n);
+        break;
+    }
 }

+ 415 - 423
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h

@@ -1,482 +1,474 @@
 #ifndef __SWM320_PORT_H__
 #define __SWM320_PORT_H__
 
-void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en);	//端口引脚功能选择,其可取值如下:
+void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en); //绔�彛寮曡剼鍔熻兘閫夋嫨锛屽叾鍙�彇鍊煎�涓嬶細
 
-#define PORTA	0
-#define PORTB	1
-#define PORTC	2
-#define PORTM	3
-#define PORTN	4
-#define PORTP	5
+#define PORTA 0
+#define PORTB 1
+#define PORTC 2
+#define PORTM 3
+#define PORTN 4
+#define PORTP 5
 
-#define PORTA_PIN0_GPIO		 	0
-#define PORTA_PIN0_FUNMUX		1
-#define PORTA_PIN0_SWCLK        2
+#define PORTA_PIN0_GPIO 0
+#define PORTA_PIN0_FUNMUX 1
+#define PORTA_PIN0_SWCLK 2
 
-#define PORTA_PIN1_GPIO			0
-#define PORTA_PIN1_FUNMUX		1
-#define PORTA_PIN1_SWDIO        2
+#define PORTA_PIN1_GPIO 0
+#define PORTA_PIN1_FUNMUX 1
+#define PORTA_PIN1_SWDIO 2
 
-#define PORTA_PIN2_GPIO			0
-#define PORTA_PIN2_FUNMUX		1
+#define PORTA_PIN2_GPIO 0
+#define PORTA_PIN2_FUNMUX 1
 
-#define PORTA_PIN3_GPIO			0
-#define PORTA_PIN3_FUNMUX		1
+#define PORTA_PIN3_GPIO 0
+#define PORTA_PIN3_FUNMUX 1
 
-#define PORTA_PIN4_GPIO			0
-#define PORTA_PIN4_FUNMUX		1
+#define PORTA_PIN4_GPIO 0
+#define PORTA_PIN4_FUNMUX 1
 
-#define PORTA_PIN5_GPIO			0
-#define PORTA_PIN5_FUNMUX		1
+#define PORTA_PIN5_GPIO 0
+#define PORTA_PIN5_FUNMUX 1
 
-#define PORTA_PIN6_GPIO			0
-#define PORTA_PIN6_FUNMUX		1
+#define PORTA_PIN6_GPIO 0
+#define PORTA_PIN6_FUNMUX 1
 
-#define PORTA_PIN7_GPIO			0
-#define PORTA_PIN7_FUNMUX		1
+#define PORTA_PIN7_GPIO 0
+#define PORTA_PIN7_FUNMUX 1
 
-#define PORTA_PIN8_GPIO		 	0
-#define PORTA_PIN8_FUNMUX		1
+#define PORTA_PIN8_GPIO 0
+#define PORTA_PIN8_FUNMUX 1
 
-#define PORTA_PIN9_GPIO			0
-#define PORTA_PIN9_FUNMUX		1
-#define PORTA_PIN9_ADC0_IN7	    3
+#define PORTA_PIN9_GPIO 0
+#define PORTA_PIN9_FUNMUX 1
+#define PORTA_PIN9_ADC0_IN7 3
 
-#define PORTA_PIN10_GPIO		0
-#define PORTA_PIN10_FUNMUX		1
-#define PORTA_PIN10_ADC0_IN6	3
+#define PORTA_PIN10_GPIO 0
+#define PORTA_PIN10_FUNMUX 1
+#define PORTA_PIN10_ADC0_IN6 3
 
-#define PORTA_PIN11_GPIO		0
-#define PORTA_PIN11_FUNMUX		1
-#define PORTA_PIN11_ADC0_IN5	3
+#define PORTA_PIN11_GPIO 0
+#define PORTA_PIN11_FUNMUX 1
+#define PORTA_PIN11_ADC0_IN5 3
 
-#define PORTA_PIN12_GPIO		0
-#define PORTA_PIN12_ADC0_IN4	3
+#define PORTA_PIN12_GPIO 0
+#define PORTA_PIN12_ADC0_IN4 3
 
+#define PORTB_PIN0_GPIO 0
+#define PORTB_PIN0_FUNMUX 1
+#define PORTB_PIN0_SD_DETECT 2
 
-#define PORTB_PIN0_GPIO		 	0
-#define PORTB_PIN0_FUNMUX		1
-#define PORTB_PIN0_SD_DETECT	2
+#define PORTB_PIN1_GPIO 0
+#define PORTB_PIN1_FUNMUX 1
+#define PORTB_PIN1_SD_CLK 2
 
-#define PORTB_PIN1_GPIO			0
-#define PORTB_PIN1_FUNMUX		1
-#define PORTB_PIN1_SD_CLK       2
+#define PORTB_PIN2_GPIO 0
+#define PORTB_PIN2_FUNMUX 1
+#define PORTB_PIN2_SD_CMD 2
 
-#define PORTB_PIN2_GPIO			0
-#define PORTB_PIN2_FUNMUX		1
-#define PORTB_PIN2_SD_CMD		2
+#define PORTB_PIN3_GPIO 0
+#define PORTB_PIN3_FUNMUX 1
+#define PORTB_PIN3_SD_D0 2
 
-#define PORTB_PIN3_GPIO			0
-#define PORTB_PIN3_FUNMUX		1
-#define PORTB_PIN3_SD_D0		2
+#define PORTB_PIN4_GPIO 0
+#define PORTB_PIN4_FUNMUX 1
+#define PORTB_PIN4_SD_D1 2
 
-#define PORTB_PIN4_GPIO			0
-#define PORTB_PIN4_FUNMUX		1
-#define PORTB_PIN4_SD_D1        2
+#define PORTB_PIN5_GPIO 0
+#define PORTB_PIN5_FUNMUX 1
+#define PORTB_PIN5_SD_D2 2
 
-#define PORTB_PIN5_GPIO			0
-#define PORTB_PIN5_FUNMUX		1
-#define PORTB_PIN5_SD_D2        2
+#define PORTB_PIN6_GPIO 0
+#define PORTB_PIN6_FUNMUX 1
+#define PORTB_PIN6_SD_D3 2
 
-#define PORTB_PIN6_GPIO			0
-#define PORTB_PIN6_FUNMUX		1
-#define PORTB_PIN6_SD_D3        2
+#define PORTB_PIN7_GPIO 0
+#define PORTB_PIN7_FUNMUX 1
+#define PORTB_PIN7_SD_D4 2
 
-#define PORTB_PIN7_GPIO			0
-#define PORTB_PIN7_FUNMUX		1
-#define PORTB_PIN7_SD_D4        2
+#define PORTB_PIN8_GPIO 0
+#define PORTB_PIN8_FUNMUX 1
+#define PORTB_PIN8_SD_D5 2
 
-#define PORTB_PIN8_GPIO		 	0
-#define PORTB_PIN8_FUNMUX		1
-#define PORTB_PIN8_SD_D5        2
+#define PORTB_PIN9_GPIO 0
+#define PORTB_PIN9_FUNMUX 1
+#define PORTB_PIN9_SD_D6 2
 
-#define PORTB_PIN9_GPIO			0
-#define PORTB_PIN9_FUNMUX		1
-#define PORTB_PIN9_SD_D6        2
+#define PORTB_PIN10_GPIO 0
+#define PORTB_PIN10_FUNMUX 1
+#define PORTB_PIN10_SD_D7 2
 
-#define PORTB_PIN10_GPIO		0
-#define PORTB_PIN10_FUNMUX		1
-#define PORTB_PIN10_SD_D7       2
+#define PORTB_PIN11_GPIO 0
+#define PORTB_PIN11_FUNMUX 1
 
-#define PORTB_PIN11_GPIO		0
-#define PORTB_PIN11_FUNMUX		1
+#define PORTB_PIN12_GPIO 0
 
-#define PORTB_PIN12_GPIO		0
+#define PORTC_PIN0_GPIO 0
+#define PORTC_PIN0_FUNMUX 1
 
+#define PORTC_PIN1_GPIO 0
+#define PORTC_PIN1_FUNMUX 1
 
-#define PORTC_PIN0_GPIO		 	0
-#define PORTC_PIN0_FUNMUX		1
+#define PORTC_PIN2_GPIO 0
+#define PORTC_PIN2_FUNMUX 1
 
-#define PORTC_PIN1_GPIO			0
-#define PORTC_PIN1_FUNMUX		1
+#define PORTC_PIN3_GPIO 0
+#define PORTC_PIN3_FUNMUX 1
 
-#define PORTC_PIN2_GPIO			0
-#define PORTC_PIN2_FUNMUX		1
+#define PORTC_PIN4_GPIO 0
+#define PORTC_PIN4_FUNMUX 1
+#define PORTC_PIN4_ADC1_IN3 3
 
-#define PORTC_PIN3_GPIO			0
-#define PORTC_PIN3_FUNMUX		1
+#define PORTC_PIN5_GPIO 0
+#define PORTC_PIN5_FUNMUX 1
+#define PORTC_PIN5_ADC1_IN2 3
 
-#define PORTC_PIN4_GPIO			0
-#define PORTC_PIN4_FUNMUX		1
-#define PORTC_PIN4_ADC1_IN3	    3
+#define PORTC_PIN6_GPIO 0
+#define PORTC_PIN6_FUNMUX 1
+#define PORTC_PIN6_ADC1_IN1 3
 
-#define PORTC_PIN5_GPIO			0
-#define PORTC_PIN5_FUNMUX		1
-#define PORTC_PIN5_ADC1_IN2	    3
+#define PORTC_PIN7_GPIO 0
+#define PORTC_PIN7_FUNMUX 1
+#define PORTC_PIN7_ADC1_IN0 3
 
-#define PORTC_PIN6_GPIO			0
-#define PORTC_PIN6_FUNMUX		1
-#define PORTC_PIN6_ADC1_IN1	    3
+#define PORTM_PIN0_GPIO 0
+#define PORTM_PIN0_FUNMUX 1
+#define PORTM_PIN0_NORFL_D15 2
 
-#define PORTC_PIN7_GPIO			0
-#define PORTC_PIN7_FUNMUX		1
-#define PORTC_PIN7_ADC1_IN0	    3
+#define PORTM_PIN1_GPIO 0
+#define PORTM_PIN1_FUNMUX 1
+#define PORTM_PIN1_NORFL_D14 2
 
+#define PORTM_PIN2_GPIO 0
+#define PORTM_PIN2_FUNMUX 1
+#define PORTM_PIN2_NORFL_D13 2
 
-#define PORTM_PIN0_GPIO		 	0
-#define PORTM_PIN0_FUNMUX		1
-#define PORTM_PIN0_NORFL_D15	2
+#define PORTM_PIN3_GPIO 0
+#define PORTM_PIN3_FUNMUX 1
+#define PORTM_PIN3_NORFL_D12 2
 
-#define PORTM_PIN1_GPIO			0
-#define PORTM_PIN1_FUNMUX		1
-#define PORTM_PIN1_NORFL_D14	2
+#define PORTM_PIN4_GPIO 0
+#define PORTM_PIN4_FUNMUX 1
+#define PORTM_PIN4_NORFL_D11 2
 
-#define PORTM_PIN2_GPIO			0
-#define PORTM_PIN2_FUNMUX		1
-#define PORTM_PIN2_NORFL_D13	2
+#define PORTM_PIN5_GPIO 0
+#define PORTM_PIN5_FUNMUX 1
+#define PORTM_PIN5_NORFL_D10 2
 
-#define PORTM_PIN3_GPIO			0
-#define PORTM_PIN3_FUNMUX		1
-#define PORTM_PIN3_NORFL_D12	2
+#define PORTM_PIN6_GPIO 0
+#define PORTM_PIN6_FUNMUX 1
+#define PORTM_PIN6_NORFL_D9 2
 
-#define PORTM_PIN4_GPIO			0
-#define PORTM_PIN4_FUNMUX		1
-#define PORTM_PIN4_NORFL_D11	2
+#define PORTM_PIN7_GPIO 0
+#define PORTM_PIN7_FUNMUX 1
+#define PORTM_PIN7_NORFL_D8 2
 
-#define PORTM_PIN5_GPIO			0
-#define PORTM_PIN5_FUNMUX		1
-#define PORTM_PIN5_NORFL_D10	2
+#define PORTM_PIN8_GPIO 0
+#define PORTM_PIN8_FUNMUX 1
+#define PORTM_PIN8_NORFL_D7 2
 
-#define PORTM_PIN6_GPIO			0
-#define PORTM_PIN6_FUNMUX		1
-#define PORTM_PIN6_NORFL_D9	    2
+#define PORTM_PIN9_GPIO 0
+#define PORTM_PIN9_FUNMUX 1
+#define PORTM_PIN9_NORFL_D6 2
 
-#define PORTM_PIN7_GPIO			0
-#define PORTM_PIN7_FUNMUX		1
-#define PORTM_PIN7_NORFL_D8	    2
+#define PORTM_PIN10_GPIO 0
+#define PORTM_PIN10_FUNMUX 1
+#define PORTM_PIN10_NORFL_D5 2
 
-#define PORTM_PIN8_GPIO		 	0
-#define PORTM_PIN8_FUNMUX		1
-#define PORTM_PIN8_NORFL_D7     2
+#define PORTM_PIN11_GPIO 0
+#define PORTM_PIN11_FUNMUX 1
+#define PORTM_PIN11_NORFL_D4 2
 
-#define PORTM_PIN9_GPIO			0
-#define PORTM_PIN9_FUNMUX		1
-#define PORTM_PIN9_NORFL_D6     2
+#define PORTM_PIN12_GPIO 0
+#define PORTM_PIN12_FUNMUX 1
+#define PORTM_PIN12_NORFL_D3 2
 
-#define PORTM_PIN10_GPIO		0
-#define PORTM_PIN10_FUNMUX		1
-#define PORTM_PIN10_NORFL_D5    2
+#define PORTM_PIN13_GPIO 0
+#define PORTM_PIN13_FUNMUX 1
+#define PORTM_PIN13_NORFL_D2 2
 
-#define PORTM_PIN11_GPIO		0
-#define PORTM_PIN11_FUNMUX		1
-#define PORTM_PIN11_NORFL_D4    2
+#define PORTM_PIN14_GPIO 0
+#define PORTM_PIN14_FUNMUX 1
+#define PORTM_PIN14_NORFL_D1 2
 
-#define PORTM_PIN12_GPIO		0
-#define PORTM_PIN12_FUNMUX		1
-#define PORTM_PIN12_NORFL_D3    2
+#define PORTM_PIN15_GPIO 0
+#define PORTM_PIN15_FUNMUX 1
+#define PORTM_PIN15_NORFL_D0 2
 
-#define PORTM_PIN13_GPIO		0
-#define PORTM_PIN13_FUNMUX		1
-#define PORTM_PIN13_NORFL_D2    2
+#define PORTM_PIN16_GPIO 0
+#define PORTM_PIN16_FUNMUX 1
+#define PORTM_PIN16_NORFL_OEN 2
 
-#define PORTM_PIN14_GPIO		0
-#define PORTM_PIN14_FUNMUX		1
-#define PORTM_PIN14_NORFL_D1    2
-
-#define PORTM_PIN15_GPIO		0
-#define PORTM_PIN15_FUNMUX		1
-#define PORTM_PIN15_NORFL_D0    2
-
-#define PORTM_PIN16_GPIO		0
-#define PORTM_PIN16_FUNMUX		1
-#define PORTM_PIN16_NORFL_OEN   2
-
-#define PORTM_PIN17_GPIO		0
-#define PORTM_PIN17_FUNMUX		1
-#define PORTM_PIN17_NORFL_WEN   2
-
-#define PORTM_PIN18_GPIO		0
-#define PORTM_PIN18_FUNMUX		1
-#define PORTM_PIN18_NORFL_CSN   2
-
-#define PORTM_PIN19_GPIO		0
-#define PORTM_PIN19_FUNMUX		1
-#define PORTM_PIN19_SDRAM_CSN   2
-
-#define PORTM_PIN20_GPIO		0
-#define PORTM_PIN20_FUNMUX		1
-#define PORTM_PIN20_SRAM_CSN    2
-
-#define PORTM_PIN21_GPIO		0
-#define PORTM_PIN21_FUNMUX		1
-#define PORTM_PIN21_SDRAM_CKE   2
-
-
-#define PORTN_PIN0_GPIO		 	0
-#define PORTN_PIN0_FUNMUX		1
-#define PORTN_PIN0_LCD_D0   	2
-#define PORTN_PIN0_ADC1_IN4     3
-
-#define PORTN_PIN1_GPIO			0
-#define PORTN_PIN1_FUNMUX		1
-#define PORTN_PIN1_LCD_D1   	2
-#define PORTN_PIN1_ADC1_IN5     3
-
-#define PORTN_PIN2_GPIO			0
-#define PORTN_PIN2_FUNMUX		1
-#define PORTN_PIN2_LCD_D2	    2
-#define PORTN_PIN2_ADC1_IN6     3
-
-#define PORTN_PIN3_GPIO			0
-#define PORTN_PIN3_FUNMUX		1
-#define PORTN_PIN3_LCD_D3   	2
-
-#define PORTN_PIN4_GPIO			0
-#define PORTN_PIN4_FUNMUX		1
-#define PORTN_PIN4_LCD_D4   	2
-
-#define PORTN_PIN5_GPIO			0
-#define PORTN_PIN5_FUNMUX		1
-#define PORTN_PIN5_LCD_D5   	2
-
-#define PORTN_PIN6_GPIO			0
-#define PORTN_PIN6_FUNMUX		1
-#define PORTN_PIN6_LCD_D6	    2
-
-#define PORTN_PIN7_GPIO			0
-#define PORTN_PIN7_FUNMUX		1
-#define PORTN_PIN7_LCD_D7	    2
-
-#define PORTN_PIN8_GPIO		 	0
-#define PORTN_PIN8_FUNMUX		1
-#define PORTN_PIN8_LCD_D8       2
-
-#define PORTN_PIN9_GPIO			0
-#define PORTN_PIN9_FUNMUX		1
-#define PORTN_PIN9_LCD_D9       2
-
-#define PORTN_PIN10_GPIO		0
-#define PORTN_PIN10_FUNMUX		1
-#define PORTN_PIN10_LCD_D10     2
-
-#define PORTN_PIN11_GPIO		0
-#define PORTN_PIN11_FUNMUX		1
-#define PORTN_PIN11_LCD_D11     2
-
-#define PORTN_PIN12_GPIO		0
-#define PORTN_PIN12_FUNMUX		1
-#define PORTN_PIN12_LCD_D12     2
-
-#define PORTN_PIN13_GPIO		0
-#define PORTN_PIN13_FUNMUX		1
-#define PORTN_PIN13_LCD_D13     2
-
-#define PORTN_PIN14_GPIO		0
-#define PORTN_PIN14_FUNMUX		1
-#define PORTN_PIN14_LCD_D14     2
-
-#define PORTN_PIN15_GPIO		0
-#define PORTN_PIN15_FUNMUX		1
-#define PORTN_PIN15_LCD_D15     2
-
-#define PORTN_PIN16_GPIO		0
-#define PORTN_PIN16_FUNMUX		1
-#define PORTN_PIN16_LCD_RD      2
-#define PORTN_PIN16_LCD_DOTCK   2
-
-#define PORTN_PIN17_GPIO		0
-#define PORTN_PIN17_FUNMUX		1
-#define PORTN_PIN17_LCD_CS      2
-#define PORTN_PIN17_LCD_VSYNC   2
-
-#define PORTN_PIN18_GPIO		0
-#define PORTN_PIN18_LCD_RS      2
-#define PORTN_PIN18_LCD_DATEN   2	//Data Enable
-
-#define PORTN_PIN19_GPIO		0
-#define PORTN_PIN19_LCD_WR      2
-#define PORTN_PIN19_LCD_HSYNC   2
-
-
-#define PORTP_PIN0_GPIO		 	0
-#define PORTP_PIN0_FUNMUX		1
-#define PORTP_PIN0_NORFL_A0	    2
-
-#define PORTP_PIN1_GPIO			0
-#define PORTP_PIN1_FUNMUX		1
-#define PORTP_PIN1_NORFL_A1	    2
-
-#define PORTP_PIN2_GPIO			0
-#define PORTP_PIN2_FUNMUX		1
-#define PORTP_PIN2_NORFL_A2	    2
-#define PORTP_PIN2_SD_D7        3
-
-#define PORTP_PIN3_GPIO			0
-#define PORTP_PIN3_FUNMUX		1
-#define PORTP_PIN3_NORFL_A3	    2
-#define PORTP_PIN3_SD_D6        3
-
-#define PORTP_PIN4_GPIO			0
-#define PORTP_PIN4_FUNMUX		1
-#define PORTP_PIN4_NORFL_A4	    2
-#define PORTP_PIN4_SD_D5        3
-
-#define PORTP_PIN5_GPIO			0
-#define PORTP_PIN5_FUNMUX		1
-#define PORTP_PIN5_NORFL_A5	    2
-#define PORTP_PIN5_SD_D4        3
-
-#define PORTP_PIN6_GPIO			0
-#define PORTP_PIN6_FUNMUX		1
-#define PORTP_PIN6_NORFL_A6	    2
-#define PORTP_PIN6_SD_D3        3
-
-#define PORTP_PIN7_GPIO			0
-#define PORTP_PIN7_FUNMUX		1
-#define PORTP_PIN7_NORFL_A7	    2
-#define PORTP_PIN7_SD_D2        3
-
-#define PORTP_PIN8_GPIO		 	0
-#define PORTP_PIN8_FUNMUX		1
-#define PORTP_PIN8_NORFL_A8     2
-#define PORTP_PIN8_SD_D1        3
-
-#define PORTP_PIN9_GPIO			0
-#define PORTP_PIN9_FUNMUX		1
-#define PORTP_PIN9_NORFL_A9     2
-#define PORTP_PIN9_SD_D0        3
-
-#define PORTP_PIN10_GPIO		0
-#define PORTP_PIN10_FUNMUX		1
-#define PORTP_PIN10_NORFL_A10   2
-#define PORTP_PIN10_SD_CMD      3
-
-#define PORTP_PIN11_GPIO		0
-#define PORTP_PIN11_FUNMUX		1
-#define PORTP_PIN11_NORFL_A11   2
-#define PORTP_PIN11_SD_CLK      3
-
-#define PORTP_PIN12_GPIO		0
-#define PORTP_PIN12_FUNMUX		1
-#define PORTP_PIN12_NORFL_A12   2
-#define PORTP_PIN12_SD_DETECT   3
-
-#define PORTP_PIN13_GPIO		0
-#define PORTP_PIN13_FUNMUX		1
-#define PORTP_PIN13_NORFL_A13   2
-#define PORTP_PIN13_SDRAM_CLK	2
-
-#define PORTP_PIN14_GPIO		0
-#define PORTP_PIN14_FUNMUX		1
-#define PORTP_PIN14_NORFL_A14   2
-#define PORTP_PIN14_SDRAM_CAS	2
-
-#define PORTP_PIN15_GPIO		0
-#define PORTP_PIN15_FUNMUX		1
-#define PORTP_PIN15_NORFL_A15   2
-#define PORTP_PIN15_SDRAM_RAS	2
-
-#define PORTP_PIN16_GPIO		0
-#define PORTP_PIN16_FUNMUX		1
-#define PORTP_PIN16_NORFL_A16   2
-#define PORTP_PIN16_SDRAM_LDQ	2
-
-#define PORTP_PIN17_GPIO		0
-#define PORTP_PIN17_FUNMUX		1
-#define PORTP_PIN17_NORFL_A17   2
-#define PORTP_PIN17_SDRAM_UDQ	2
-
-#define PORTP_PIN18_GPIO		0
-#define PORTP_PIN18_FUNMUX		1
-#define PORTP_PIN18_NORFL_A18   2
-
-#define PORTP_PIN19_GPIO		0
-#define PORTP_PIN19_FUNMUX		1
-#define PORTP_PIN19_NORFL_A19   2
-
-#define PORTP_PIN20_GPIO		0
-#define PORTP_PIN20_FUNMUX		1
-#define PORTP_PIN20_NORFL_A20   2
-#define PORTP_PIN20_SDRAM_BA0	2
-
-#define PORTP_PIN21_GPIO		0
-#define PORTP_PIN21_FUNMUX		1
-#define PORTP_PIN21_NORFL_A21   2
-#define PORTP_PIN21_SDRAM_BA1	2
-
-#define PORTP_PIN22_GPIO		0
-#define PORTP_PIN22_FUNMUX		1
-#define PORTP_PIN22_NORFL_A22   2
-
-#define PORTP_PIN23_GPIO		0
-#define PORTP_PIN23_FUNMUX		1
-#define PORTP_PIN23_NORFL_A23   2
-
-
-
-/* 下面宏定义的取值全部在正确值的基础上“加100”,以区分上面宏定义的值,从而方便库函数的编写*/
-/* 下面这些值是偶数编号引脚的功能取值,如PIN0、PIN2、... */
-#define FUNMUX0_UART0_RXD	    100
-#define FUNMUX0_UART1_RXD	    101
-#define FUNMUX0_UART2_RXD	    102
-#define FUNMUX0_UART3_RXD	    103
-#define FUNMUX0_I2C0_SCL	    105
-#define FUNMUX0_I2C1_SCL	    106
-#define FUNMUX0_PWM0A_OUT	    107
-#define FUNMUX0_PWM2A_OUT	    108
-#define FUNMUX0_PWM4A_OUT	    109
-#define FUNMUX0_PWM0B_OUT	    110
-#define FUNMUX0_PWM2B_OUT	    111
-#define FUNMUX0_PWM4B_OUT	    112
-#define FUNMUX0_PWM_BREAK	    113
-#define FUNMUX0_TIMR0_IN		114
-#define FUNMUX0_TIMR2_IN		115
-#define FUNMUX0_CAN_RX		    116
-#define FUNMUX0_SPI0_SSEL		117
-#define FUNMUX0_SPI0_MOSI	    118
-#define FUNMUX0_SPI1_SSEL		119
-#define FUNMUX0_SPI1_MOSI	    120
-#define FUNMUX0_UART0_CTS		121
-#define FUNMUX0_UART1_CTS		122
-#define FUNMUX0_UART2_CTS		123
-#define FUNMUX0_UART3_CTS		124
-
-/* 下面这些值是奇数编号引脚的功能取值,如PIN1、PIN3、... */
-#define FUNMUX1_UART0_TXD	    100
-#define FUNMUX1_UART1_TXD	    101
-#define FUNMUX1_UART2_TXD	    102
-#define FUNMUX1_UART3_TXD	    103
-#define FUNMUX1_I2C0_SDA	    105
-#define FUNMUX1_I2C1_SDA	    106
-#define FUNMUX1_PWM1A_OUT	    107
-#define FUNMUX1_PWM3A_OUT	    108
-#define FUNMUX1_PWM5A_OUT	    109
-#define FUNMUX1_PWM1B_OUT	    110
-#define FUNMUX1_PWM3B_OUT	    111
-#define FUNMUX1_PWM5B_OUT	    112
-#define FUNMUX1_PULSE_IN	    113
-#define FUNMUX1_TIMR1_IN		114
-#define FUNMUX1_TIMR3_IN		115
-#define FUNMUX1_CAN_TX		    116
-#define FUNMUX1_SPI0_SCLK		117
-#define FUNMUX1_SPI0_MISO	    118
-#define FUNMUX1_SPI1_SCLK		119
-#define FUNMUX1_SPI1_MISO	    120
-#define FUNMUX1_UART0_RTS		121
-#define FUNMUX1_UART1_RTS		122
-#define FUNMUX1_UART2_RTS		123
-#define FUNMUX1_UART3_RTS		124
+#define PORTM_PIN17_GPIO 0
+#define PORTM_PIN17_FUNMUX 1
+#define PORTM_PIN17_NORFL_WEN 2
 
+#define PORTM_PIN18_GPIO 0
+#define PORTM_PIN18_FUNMUX 1
+#define PORTM_PIN18_NORFL_CSN 2
+
+#define PORTM_PIN19_GPIO 0
+#define PORTM_PIN19_FUNMUX 1
+#define PORTM_PIN19_SDRAM_CSN 2
+
+#define PORTM_PIN20_GPIO 0
+#define PORTM_PIN20_FUNMUX 1
+#define PORTM_PIN20_SRAM_CSN 2
+
+#define PORTM_PIN21_GPIO 0
+#define PORTM_PIN21_FUNMUX 1
+#define PORTM_PIN21_SDRAM_CKE 2
+
+#define PORTN_PIN0_GPIO 0
+#define PORTN_PIN0_FUNMUX 1
+#define PORTN_PIN0_LCD_D0 2
+#define PORTN_PIN0_ADC1_IN4 3
+
+#define PORTN_PIN1_GPIO 0
+#define PORTN_PIN1_FUNMUX 1
+#define PORTN_PIN1_LCD_D1 2
+#define PORTN_PIN1_ADC1_IN5 3
+
+#define PORTN_PIN2_GPIO 0
+#define PORTN_PIN2_FUNMUX 1
+#define PORTN_PIN2_LCD_D2 2
+#define PORTN_PIN2_ADC1_IN6 3
+
+#define PORTN_PIN3_GPIO 0
+#define PORTN_PIN3_FUNMUX 1
+#define PORTN_PIN3_LCD_D3 2
+
+#define PORTN_PIN4_GPIO 0
+#define PORTN_PIN4_FUNMUX 1
+#define PORTN_PIN4_LCD_D4 2
+
+#define PORTN_PIN5_GPIO 0
+#define PORTN_PIN5_FUNMUX 1
+#define PORTN_PIN5_LCD_D5 2
+
+#define PORTN_PIN6_GPIO 0
+#define PORTN_PIN6_FUNMUX 1
+#define PORTN_PIN6_LCD_D6 2
+
+#define PORTN_PIN7_GPIO 0
+#define PORTN_PIN7_FUNMUX 1
+#define PORTN_PIN7_LCD_D7 2
+
+#define PORTN_PIN8_GPIO 0
+#define PORTN_PIN8_FUNMUX 1
+#define PORTN_PIN8_LCD_D8 2
+
+#define PORTN_PIN9_GPIO 0
+#define PORTN_PIN9_FUNMUX 1
+#define PORTN_PIN9_LCD_D9 2
+
+#define PORTN_PIN10_GPIO 0
+#define PORTN_PIN10_FUNMUX 1
+#define PORTN_PIN10_LCD_D10 2
+
+#define PORTN_PIN11_GPIO 0
+#define PORTN_PIN11_FUNMUX 1
+#define PORTN_PIN11_LCD_D11 2
+
+#define PORTN_PIN12_GPIO 0
+#define PORTN_PIN12_FUNMUX 1
+#define PORTN_PIN12_LCD_D12 2
+
+#define PORTN_PIN13_GPIO 0
+#define PORTN_PIN13_FUNMUX 1
+#define PORTN_PIN13_LCD_D13 2
+
+#define PORTN_PIN14_GPIO 0
+#define PORTN_PIN14_FUNMUX 1
+#define PORTN_PIN14_LCD_D14 2
+
+#define PORTN_PIN15_GPIO 0
+#define PORTN_PIN15_FUNMUX 1
+#define PORTN_PIN15_LCD_D15 2
+
+#define PORTN_PIN16_GPIO 0
+#define PORTN_PIN16_FUNMUX 1
+#define PORTN_PIN16_LCD_RD 2
+#define PORTN_PIN16_LCD_DOTCK 2
+
+#define PORTN_PIN17_GPIO 0
+#define PORTN_PIN17_FUNMUX 1
+#define PORTN_PIN17_LCD_CS 2
+#define PORTN_PIN17_LCD_VSYNC 2
+
+#define PORTN_PIN18_GPIO 0
+#define PORTN_PIN18_LCD_RS 2
+#define PORTN_PIN18_LCD_DATEN 2 //Data Enable
+
+#define PORTN_PIN19_GPIO 0
+#define PORTN_PIN19_LCD_WR 2
+#define PORTN_PIN19_LCD_HSYNC 2
+
+#define PORTP_PIN0_GPIO 0
+#define PORTP_PIN0_FUNMUX 1
+#define PORTP_PIN0_NORFL_A0 2
+
+#define PORTP_PIN1_GPIO 0
+#define PORTP_PIN1_FUNMUX 1
+#define PORTP_PIN1_NORFL_A1 2
+
+#define PORTP_PIN2_GPIO 0
+#define PORTP_PIN2_FUNMUX 1
+#define PORTP_PIN2_NORFL_A2 2
+#define PORTP_PIN2_SD_D7 3
+
+#define PORTP_PIN3_GPIO 0
+#define PORTP_PIN3_FUNMUX 1
+#define PORTP_PIN3_NORFL_A3 2
+#define PORTP_PIN3_SD_D6 3
+
+#define PORTP_PIN4_GPIO 0
+#define PORTP_PIN4_FUNMUX 1
+#define PORTP_PIN4_NORFL_A4 2
+#define PORTP_PIN4_SD_D5 3
+
+#define PORTP_PIN5_GPIO 0
+#define PORTP_PIN5_FUNMUX 1
+#define PORTP_PIN5_NORFL_A5 2
+#define PORTP_PIN5_SD_D4 3
+
+#define PORTP_PIN6_GPIO 0
+#define PORTP_PIN6_FUNMUX 1
+#define PORTP_PIN6_NORFL_A6 2
+#define PORTP_PIN6_SD_D3 3
+
+#define PORTP_PIN7_GPIO 0
+#define PORTP_PIN7_FUNMUX 1
+#define PORTP_PIN7_NORFL_A7 2
+#define PORTP_PIN7_SD_D2 3
+
+#define PORTP_PIN8_GPIO 0
+#define PORTP_PIN8_FUNMUX 1
+#define PORTP_PIN8_NORFL_A8 2
+#define PORTP_PIN8_SD_D1 3
+
+#define PORTP_PIN9_GPIO 0
+#define PORTP_PIN9_FUNMUX 1
+#define PORTP_PIN9_NORFL_A9 2
+#define PORTP_PIN9_SD_D0 3
+
+#define PORTP_PIN10_GPIO 0
+#define PORTP_PIN10_FUNMUX 1
+#define PORTP_PIN10_NORFL_A10 2
+#define PORTP_PIN10_SD_CMD 3
+
+#define PORTP_PIN11_GPIO 0
+#define PORTP_PIN11_FUNMUX 1
+#define PORTP_PIN11_NORFL_A11 2
+#define PORTP_PIN11_SD_CLK 3
+
+#define PORTP_PIN12_GPIO 0
+#define PORTP_PIN12_FUNMUX 1
+#define PORTP_PIN12_NORFL_A12 2
+#define PORTP_PIN12_SD_DETECT 3
+
+#define PORTP_PIN13_GPIO 0
+#define PORTP_PIN13_FUNMUX 1
+#define PORTP_PIN13_NORFL_A13 2
+#define PORTP_PIN13_SDRAM_CLK 2
+
+#define PORTP_PIN14_GPIO 0
+#define PORTP_PIN14_FUNMUX 1
+#define PORTP_PIN14_NORFL_A14 2
+#define PORTP_PIN14_SDRAM_CAS 2
+
+#define PORTP_PIN15_GPIO 0
+#define PORTP_PIN15_FUNMUX 1
+#define PORTP_PIN15_NORFL_A15 2
+#define PORTP_PIN15_SDRAM_RAS 2
+
+#define PORTP_PIN16_GPIO 0
+#define PORTP_PIN16_FUNMUX 1
+#define PORTP_PIN16_NORFL_A16 2
+#define PORTP_PIN16_SDRAM_LDQ 2
+
+#define PORTP_PIN17_GPIO 0
+#define PORTP_PIN17_FUNMUX 1
+#define PORTP_PIN17_NORFL_A17 2
+#define PORTP_PIN17_SDRAM_UDQ 2
+
+#define PORTP_PIN18_GPIO 0
+#define PORTP_PIN18_FUNMUX 1
+#define PORTP_PIN18_NORFL_A18 2
+
+#define PORTP_PIN19_GPIO 0
+#define PORTP_PIN19_FUNMUX 1
+#define PORTP_PIN19_NORFL_A19 2
+
+#define PORTP_PIN20_GPIO 0
+#define PORTP_PIN20_FUNMUX 1
+#define PORTP_PIN20_NORFL_A20 2
+#define PORTP_PIN20_SDRAM_BA0 2
+
+#define PORTP_PIN21_GPIO 0
+#define PORTP_PIN21_FUNMUX 1
+#define PORTP_PIN21_NORFL_A21 2
+#define PORTP_PIN21_SDRAM_BA1 2
+
+#define PORTP_PIN22_GPIO 0
+#define PORTP_PIN22_FUNMUX 1
+#define PORTP_PIN22_NORFL_A22 2
+
+#define PORTP_PIN23_GPIO 0
+#define PORTP_PIN23_FUNMUX 1
+#define PORTP_PIN23_NORFL_A23 2
+
+/* 涓嬮潰瀹忓畾涔夌殑鍙栧€煎叏閮ㄥ湪姝g‘鍊肩殑鍩虹�涓娾€滃姞100鈥濓紝浠ュ尯鍒嗕笂闈㈠畯瀹氫箟鐨勫€硷紝浠庤€屾柟渚垮簱鍑芥暟鐨勭紪鍐�*/
+/* 涓嬮潰杩欎簺鍊兼槸鍋舵暟缂栧彿寮曡剼鐨勫姛鑳藉彇鍊硷紝濡侾IN0銆丳IN2銆�... */
+#define FUNMUX0_UART0_RXD 100
+#define FUNMUX0_UART1_RXD 101
+#define FUNMUX0_UART2_RXD 102
+#define FUNMUX0_UART3_RXD 103
+#define FUNMUX0_I2C0_SCL 105
+#define FUNMUX0_I2C1_SCL 106
+#define FUNMUX0_PWM0A_OUT 107
+#define FUNMUX0_PWM2A_OUT 108
+#define FUNMUX0_PWM4A_OUT 109
+#define FUNMUX0_PWM0B_OUT 110
+#define FUNMUX0_PWM2B_OUT 111
+#define FUNMUX0_PWM4B_OUT 112
+#define FUNMUX0_PWM_BREAK 113
+#define FUNMUX0_TIMR0_IN 114
+#define FUNMUX0_TIMR2_IN 115
+#define FUNMUX0_CAN_RX 116
+#define FUNMUX0_SPI0_SSEL 117
+#define FUNMUX0_SPI0_MOSI 118
+#define FUNMUX0_SPI1_SSEL 119
+#define FUNMUX0_SPI1_MOSI 120
+#define FUNMUX0_UART0_CTS 121
+#define FUNMUX0_UART1_CTS 122
+#define FUNMUX0_UART2_CTS 123
+#define FUNMUX0_UART3_CTS 124
+
+/* 涓嬮潰杩欎簺鍊兼槸濂囨暟缂栧彿寮曡剼鐨勫姛鑳藉彇鍊硷紝濡侾IN1銆丳IN3銆�... */
+#define FUNMUX1_UART0_TXD 100
+#define FUNMUX1_UART1_TXD 101
+#define FUNMUX1_UART2_TXD 102
+#define FUNMUX1_UART3_TXD 103
+#define FUNMUX1_I2C0_SDA 105
+#define FUNMUX1_I2C1_SDA 106
+#define FUNMUX1_PWM1A_OUT 107
+#define FUNMUX1_PWM3A_OUT 108
+#define FUNMUX1_PWM5A_OUT 109
+#define FUNMUX1_PWM1B_OUT 110
+#define FUNMUX1_PWM3B_OUT 111
+#define FUNMUX1_PWM5B_OUT 112
+#define FUNMUX1_PULSE_IN 113
+#define FUNMUX1_TIMR1_IN 114
+#define FUNMUX1_TIMR3_IN 115
+#define FUNMUX1_CAN_TX 116
+#define FUNMUX1_SPI0_SCLK 117
+#define FUNMUX1_SPI0_MISO 118
+#define FUNMUX1_SPI1_SCLK 119
+#define FUNMUX1_SPI1_MISO 120
+#define FUNMUX1_UART0_RTS 121
+#define FUNMUX1_UART1_RTS 122
+#define FUNMUX1_UART2_RTS 123
+#define FUNMUX1_UART3_RTS 124
 
 #endif //__SWM320_PORT_H__

+ 643 - 550
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称:	SWM320_pwm.c
-* 功能说明:	SWM320单片机的PWM功能驱动库
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项:
-* 版本日期:	V1.1.0		2017年10月25日
-* 升级记录: 
+* 鏂囦欢鍚嶇О:	SWM320_pwm.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑PWM鍔熻兘椹卞姩搴�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」:
+* 鐗堟湰鏃ユ湡:	V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,631 +21,724 @@
 #include "SWM320.h"
 #include "SWM320_pwm.h"
 
-
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_Init()
-* 功能说明:	PWM初始化
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			PWM_InitStructure * initStruct	包含PWM相关设定值的结构体
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_Init()
+* 鍔熻兘璇存槑:	PWM鍒濆�鍖�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			PWM_InitStructure * initStruct	鍖呭惈PWM鐩稿叧璁惧畾鍊肩殑缁撴瀯浣�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct)
+void PWM_Init(PWM_TypeDef *PWMx, PWM_InitStructure *initStruct)
 {
-	uint32_t bit_offset = 0;
-	
-	SYS->CLKEN |= (0x01 << SYS_CLKEN_PWM_Pos);
-	
-	SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk;
-	SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos);
-	
-	PWM_Stop(PWMx, 1, 1);	//一些关键寄存器只能在PWM停止时设置
-		
-	PWMx->MODE = initStruct->mode;
-	
-	PWMx->PERA = initStruct->cycleA;
-	PWMx->HIGHA = initStruct->hdutyA;
-	PWMx->DZA = initStruct->deadzoneA;
-	
-	PWMx->PERB = initStruct->cycleB;
-	PWMx->HIGHB = initStruct->hdutyB;
-	PWMx->DZB = initStruct->deadzoneB;
-	
-	PWMx->INIOUT &= ~(PWM_INIOUT_PWMA_Msk | PWM_INIOUT_PWMB_Msk);
-	PWMx->INIOUT |= (initStruct->initLevelA << PWM_INIOUT_PWMA_Pos) |
-					(initStruct->initLevelB << PWM_INIOUT_PWMB_Pos);
-	
-	PWMG->IM = 0x00000000;
-	
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		bit_offset = 0;
-		break;
-
-	case((uint32_t)PWM1):
-		bit_offset = 2;
-		break;
-
-	case((uint32_t)PWM2):
-		bit_offset = 4;
-		break;
-	
-	case((uint32_t)PWM3):
-		bit_offset = 6;
-		break;
-	
-	case((uint32_t)PWM4):
-		bit_offset = 8;
-		break;
-	
-	case((uint32_t)PWM5):
-		bit_offset = 10;
-		break;
-	}
-	
-	PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1))  | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13)));	//清除中断标志
-	PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset+1))  | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13)));
-	PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset+1)) |
-				(initStruct->HEndAIEn << (bit_offset+12)) | (initStruct->HEndBIEn << (bit_offset+13));
-	
-	if(initStruct->NCycleAIEn | initStruct->NCycleBIEn | initStruct->HEndAIEn | initStruct->HEndBIEn)
-	{
-		NVIC_EnableIRQ(PWM_IRQn);
-	}
-	else if((PWMG->IE & (~((0x01 << bit_offset) | (0x01 << (bit_offset+1))  | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))))) == 0)
-	{
-		NVIC_DisableIRQ(PWM_IRQn);
-	}
+    uint32_t bit_offset = 0;
+
+    SYS->CLKEN |= (0x01 << SYS_CLKEN_PWM_Pos);
+
+    SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk;
+    SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos);
+
+    PWM_Stop(PWMx, 1, 1); //涓€浜涘叧閿�瘎瀛樺櫒鍙�兘鍦≒WM鍋滄�鏃惰�缃�
+
+    PWMx->MODE = initStruct->mode;
+
+    PWMx->PERA = initStruct->cycleA;
+    PWMx->HIGHA = initStruct->hdutyA;
+    PWMx->DZA = initStruct->deadzoneA;
+
+    PWMx->PERB = initStruct->cycleB;
+    PWMx->HIGHB = initStruct->hdutyB;
+    PWMx->DZB = initStruct->deadzoneB;
+
+    PWMx->INIOUT &= ~(PWM_INIOUT_PWMA_Msk | PWM_INIOUT_PWMB_Msk);
+    PWMx->INIOUT |= (initStruct->initLevelA << PWM_INIOUT_PWMA_Pos) |
+                    (initStruct->initLevelB << PWM_INIOUT_PWMB_Pos);
+
+    PWMG->IM = 0x00000000;
+
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        bit_offset = 0;
+        break;
+
+    case ((uint32_t)PWM1):
+        bit_offset = 2;
+        break;
+
+    case ((uint32_t)PWM2):
+        bit_offset = 4;
+        break;
+
+    case ((uint32_t)PWM3):
+        bit_offset = 6;
+        break;
+
+    case ((uint32_t)PWM4):
+        bit_offset = 8;
+        break;
+
+    case ((uint32_t)PWM5):
+        bit_offset = 10;
+        break;
+    }
+
+    PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13))); //娓呴櫎涓�柇鏍囧織
+    PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13)));
+    PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset + 1)) |
+                (initStruct->HEndAIEn << (bit_offset + 12)) | (initStruct->HEndBIEn << (bit_offset + 13));
+
+    if (initStruct->NCycleAIEn | initStruct->NCycleBIEn | initStruct->HEndAIEn | initStruct->HEndBIEn)
+    {
+        NVIC_EnableIRQ(PWM_IRQn);
+    }
+    else if ((PWMG->IE & (~((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13))))) == 0)
+    {
+        NVIC_DisableIRQ(PWM_IRQn);
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_Start()
-* 功能说明:	启动PWM,开始PWM输出
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chA			0 通道A不启动		1 通道A启动
-*			uint32_t chB			0 通道B不启动		1 通道B启动
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_Start()
+* 鍔熻兘璇存槑:	鍚�姩PWM锛屽紑濮婸WM杈撳嚭
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chA			0 閫氶亾A涓嶅惎鍔�		1 閫氶亾A鍚�姩
+*			uint32_t chB			0 閫氶亾B涓嶅惎鍔�		1 閫氶亾B鍚�姩
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
+void PWM_Start(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos);
-		break;
-
-	case((uint32_t)PWM1):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos);
-		break;
-
-	case((uint32_t)PWM2):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		PWMG->CHEN |= (chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        PWMG->CHEN |= (chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_Stop()
-* 功能说明:	关闭PWM,停止PWM输出
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chA			0 通道A不关闭		1 通道A关闭
-*			uint32_t chB			0 通道B不关闭		1 通道B关闭
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_Stop()
+* 鍔熻兘璇存槑:	鍏抽棴PWM锛屽仠姝�WM杈撳嚭
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chA			0 閫氶亾A涓嶅叧闂�		1 閫氶亾A鍏抽棴
+*			uint32_t chB			0 閫氶亾B涓嶅叧闂�		1 閫氶亾B鍏抽棴
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
+void PWM_Stop(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos));
-		break;
-
-	case((uint32_t)PWM1):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos));
-		break;
-
-	case((uint32_t)PWM2):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos));
-		break;
-	
-	case((uint32_t)PWM3):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos));
-		break;
-	
-	case((uint32_t)PWM4):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos));
-		break;
-	
-	case((uint32_t)PWM5):
-		PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos));
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos));
+        break;
+
+    case ((uint32_t)PWM1):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos));
+        break;
+
+    case ((uint32_t)PWM2):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos));
+        break;
+
+    case ((uint32_t)PWM3):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos));
+        break;
+
+    case ((uint32_t)PWM4):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos));
+        break;
+
+    case ((uint32_t)PWM5):
+        PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos));
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_SetCycle()
-* 功能说明:	设置周期
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-*			uint16_t cycle			要设定的周期值
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_SetCycle()
+* 鍔熻兘璇存槑:	璁剧疆鍛ㄦ湡
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+*			uint16_t cycle			瑕佽�瀹氱殑鍛ㄦ湡鍊�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle)
+void PWM_SetCycle(PWM_TypeDef *PWMx, uint32_t chn, uint16_t cycle)
 {
-	if(chn == PWM_CH_A)
-		PWMx->PERA = cycle;
-	else if(chn == PWM_CH_B)
-		PWMx->PERB = cycle;
+    if (chn == PWM_CH_A)
+        PWMx->PERA = cycle;
+    else if (chn == PWM_CH_B)
+        PWMx->PERB = cycle;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_GetCycle()
-* 功能说明:	获取周期
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要查询哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: uint16_t				获取到的周期值
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_GetCycle()
+* 鍔熻兘璇存槑:	鑾峰彇鍛ㄦ湡
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佹煡璇㈠摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: uint16_t				鑾峰彇鍒扮殑鍛ㄦ湡鍊�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn)
+uint16_t PWM_GetCycle(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	uint16_t cycle = 0;
-	
-	if(chn == PWM_CH_A)
-		cycle = PWMx->PERA;
-	else if(chn == PWM_CH_B)
-		cycle = PWMx->PERB;
-	
-	return cycle;
+    uint16_t cycle = 0;
+
+    if (chn == PWM_CH_A)
+        cycle = PWMx->PERA;
+    else if (chn == PWM_CH_B)
+        cycle = PWMx->PERB;
+
+    return cycle;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_SetHDuty()
-* 功能说明:	设置高电平时长
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-*			uint16_t hduty			要设定的高电平时长
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_SetHDuty()
+* 鍔熻兘璇存槑:	璁剧疆楂樼數骞虫椂闀�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+*			uint16_t hduty			瑕佽�瀹氱殑楂樼數骞虫椂闀�
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty)
+void PWM_SetHDuty(PWM_TypeDef *PWMx, uint32_t chn, uint16_t hduty)
 {
-	if(chn == PWM_CH_A)
-		PWMx->HIGHA = hduty;
-	else if(chn == PWM_CH_B)
-		PWMx->HIGHB = hduty;
+    if (chn == PWM_CH_A)
+        PWMx->HIGHA = hduty;
+    else if (chn == PWM_CH_B)
+        PWMx->HIGHB = hduty;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_GetHDuty()
-* 功能说明: 获取高电平时长
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要查询哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: uint16_t				获取到的高电平时长
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_GetHDuty()
+* 鍔熻兘璇存槑: 鑾峰彇楂樼數骞虫椂闀�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佹煡璇㈠摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: uint16_t				鑾峰彇鍒扮殑楂樼數骞虫椂闀�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn)
+uint16_t PWM_GetHDuty(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	uint16_t hduty = 0;
-	
-	if(chn == PWM_CH_A)
-		hduty = PWMx->HIGHA;
-	else if(chn == PWM_CH_B)
-		hduty = PWMx->HIGHB;
-	
-	return hduty;
+    uint16_t hduty = 0;
+
+    if (chn == PWM_CH_A)
+        hduty = PWMx->HIGHA;
+    else if (chn == PWM_CH_B)
+        hduty = PWMx->HIGHB;
+
+    return hduty;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_SetDeadzone()
-* 功能说明:	设置死区时长
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-*			uint8_t deadzone		要设定的死区时长
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_SetDeadzone()
+* 鍔熻兘璇存槑:	璁剧疆姝诲尯鏃堕暱
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+*			uint8_t deadzone		瑕佽�瀹氱殑姝诲尯鏃堕暱
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone)
+void PWM_SetDeadzone(PWM_TypeDef *PWMx, uint32_t chn, uint8_t deadzone)
 {
-	if(chn == PWM_CH_A)
-		PWMx->DZA = deadzone;
-	else if(chn == PWM_CH_B)
-		PWMx->DZB = deadzone;
+    if (chn == PWM_CH_A)
+        PWMx->DZA = deadzone;
+    else if (chn == PWM_CH_B)
+        PWMx->DZB = deadzone;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_GetDeadzone()
-* 功能说明: 获取死区时长
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要查询哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: uint8_t					获取到的死区时长
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_GetDeadzone()
+* 鍔熻兘璇存槑: 鑾峰彇姝诲尯鏃堕暱
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佹煡璇㈠摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: uint8_t					鑾峰彇鍒扮殑姝诲尯鏃堕暱
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint8_t  PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn)
+uint8_t PWM_GetDeadzone(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	uint8_t deadzone = 0;
-	
-	if(chn == PWM_CH_A)
-		deadzone = PWMx->DZA;
-	else if(chn == PWM_CH_B)
-		deadzone = PWMx->DZB;
-	
-	return deadzone;
-}
+    uint8_t deadzone = 0;
 
+    if (chn == PWM_CH_A)
+        deadzone = PWMx->DZA;
+    else if (chn == PWM_CH_B)
+        deadzone = PWMx->DZB;
+
+    return deadzone;
+}
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntNCycleEn()
-* 功能说明: 新周期开始中断使能
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntNCycleEn()
+* 鍔熻兘璇存槑: 鏂板懆鏈熷紑濮嬩腑鏂�娇鑳�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntNCycleEn(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP0A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP1A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP2A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP3A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP4A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP5A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_NEWP5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP0A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP1A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP2A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP3A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP4A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP5A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_NEWP5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntNCycleDis()
-* 功能说明: 新周期开始中断禁能
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntNCycleDis()
+* 鍔熻兘璇存槑: 鏂板懆鏈熷紑濮嬩腑鏂��鑳�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntNCycleDis(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntNCycleClr()
-* 功能说明: 新周期开始中断标志清除
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntNCycleClr()
+* 鍔熻兘璇存槑: 鏂板懆鏈熷紑濮嬩腑鏂�爣蹇楁竻闄�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntNCycleClr(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP0A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP1A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP2A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP3A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP4A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP5A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_NEWP5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP0A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP1A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP2A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP3A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP4A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP5A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_NEWP5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntNCycleStat()
-* 功能说明: 新周期开始中断是否发生
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: uint32_t				1 新周期开始中断已发生    0 新周期开始中断未发生
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntNCycleStat()
+* 鍔熻兘璇存槑: 鏂板懆鏈熷紑濮嬩腑鏂�槸鍚﹀彂鐢�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: uint32_t				1 鏂板懆鏈熷紑濮嬩腑鏂�凡鍙戠敓    0 鏂板懆鏈熷紑濮嬩腑鏂�湭鍙戠敓
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn)
+uint32_t PWM_IntNCycleStat(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	uint32_t int_stat = 0;
-	
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP0A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP0B_Msk);
-		break;
-
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP1A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP1B_Msk);
-		break;
-
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP2A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP2B_Msk);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP3A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP3B_Msk);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP4A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP4B_Msk);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP5A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_NEWP5B_Msk);
-		break;
-	}
-	
-	return int_stat;
-}
+    uint32_t int_stat = 0;
 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP0A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP0B_Msk);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP1A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP1B_Msk);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP2A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP2B_Msk);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP3A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP3B_Msk);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP4A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP4B_Msk);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_NEWP5A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_NEWP5B_Msk);
+        break;
+    }
+
+    return int_stat;
+}
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntHEndEn()
-* 功能说明: 高电平结束中断使能
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntHEndEn()
+* 鍔熻兘璇存槑: 楂樼數骞崇粨鏉熶腑鏂�娇鑳�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntHEndEn(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND0A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND1A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND2A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND3A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND4A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND5A_Pos);
-		else				PWMG->IE |= (0x01 << PWMG_IE_HEND5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND0A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND1A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND2A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND3A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND4A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IE |= (0x01 << PWMG_IE_HEND5A_Pos);
+        else
+            PWMG->IE |= (0x01 << PWMG_IE_HEND5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntHEndDis()
-* 功能说明: 高电平结束中断禁能
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntHEndDis()
+* 鍔熻兘璇存槑: 楂樼數骞崇粨鏉熶腑鏂��鑳�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntHEndDis(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND0A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND1A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND2A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND3A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND4A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND5A_Pos);
-		else				PWMG->IE &= ~(0x01 << PWMG_IE_HEND5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND0A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND1A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND2A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND3A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND4A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND5A_Pos);
+        else
+            PWMG->IE &= ~(0x01 << PWMG_IE_HEND5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntHEndClr()
-* 功能说明: 高电平结束中断标志清除
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: 无
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntHEndClr()
+* 鍔熻兘璇存槑: 楂樼數骞崇粨鏉熶腑鏂�爣蹇楁竻闄�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: 鏃�
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn)
+void PWM_IntHEndClr(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND0A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND0B_Pos);
-		break;
-	
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND1A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND1B_Pos);
-		break;
-	
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND2A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND2B_Pos);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND3A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND3B_Pos);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND4A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND4B_Pos);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND5A_Pos);
-		else				PWMG->IRS = (0x01 << PWMG_IRS_HEND5B_Pos);
-		break;
-	} 
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND0A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND0B_Pos);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND1A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND1B_Pos);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND2A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND2B_Pos);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND3A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND3B_Pos);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND4A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND4B_Pos);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND5A_Pos);
+        else
+            PWMG->IRS = (0x01 << PWMG_IRS_HEND5B_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称:	PWM_IntHEndStat()
-* 功能说明: 高电平结束中断是否发生
-* 输    入: PWM_TypeDef * PWMx		指定要被设置的PWM,有效值包括PWM0、PWM1、PWM2、PWM3、PWM4、PWM5
-*			uint32_t chn			选择要设置哪个通道,有效值:PWM_CH_A、PWM_CH_B
-* 输    出: uint32_t				1 高电平结束中断已发生    0 高电平结束中断未发生
-* 注意事项: 无
+* 鍑芥暟鍚嶇О:	PWM_IntHEndStat()
+* 鍔熻兘璇存槑: 楂樼數骞崇粨鏉熶腑鏂�槸鍚﹀彂鐢�
+* 杈�    鍏�: PWM_TypeDef * PWMx		鎸囧畾瑕佽�璁剧疆鐨凱WM锛屾湁鏁堝€煎寘鎷琍WM0銆丳WM1銆丳WM2銆丳WM3銆丳WM4銆丳WM5
+*			uint32_t chn			閫夋嫨瑕佽�缃�摢涓�€氶亾锛屾湁鏁堝€硷細PWM_CH_A銆丳WM_CH_B
+* 杈�    鍑�: uint32_t				1 楂樼數骞崇粨鏉熶腑鏂�凡鍙戠敓    0 楂樼數骞崇粨鏉熶腑鏂�湭鍙戠敓
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn)
+uint32_t PWM_IntHEndStat(PWM_TypeDef *PWMx, uint32_t chn)
 {
-	uint32_t int_stat = 0;
-	
-	switch((uint32_t)PWMx)
-	{
-	case((uint32_t)PWM0):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND0A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND0B_Msk);
-		break;
-
-	case((uint32_t)PWM1):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND1A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND1B_Msk);
-		break;
-
-	case((uint32_t)PWM2):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND2A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND2B_Msk);
-		break;
-	
-	case((uint32_t)PWM3):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND3A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND3B_Msk);
-		break;
-	
-	case((uint32_t)PWM4):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND4A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND4B_Msk);
-		break;
-	
-	case((uint32_t)PWM5):
-		if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND5A_Msk);
-		else				int_stat = (PWMG->IF & PWMG_IF_HEND5B_Msk);
-		break;
-	}
-	
-	return int_stat;
+    uint32_t int_stat = 0;
+
+    switch ((uint32_t)PWMx)
+    {
+    case ((uint32_t)PWM0):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND0A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND0B_Msk);
+        break;
+
+    case ((uint32_t)PWM1):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND1A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND1B_Msk);
+        break;
+
+    case ((uint32_t)PWM2):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND2A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND2B_Msk);
+        break;
+
+    case ((uint32_t)PWM3):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND3A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND3B_Msk);
+        break;
+
+    case ((uint32_t)PWM4):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND4A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND4B_Msk);
+        break;
+
+    case ((uint32_t)PWM5):
+        if (chn == PWM_CH_A)
+            int_stat = (PWMG->IF & PWMG_IF_HEND5A_Msk);
+        else
+            int_stat = (PWMG->IF & PWMG_IF_HEND5B_Msk);
+        break;
+    }
+
+    return int_stat;
 }

+ 48 - 49
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h

@@ -1,58 +1,57 @@
 #ifndef __SWM320_PWM_H__
-#define	__SWM320_PWM_H__
-
-typedef struct {
-	uint8_t  clk_div;		//PWM_CLKDIV_1、PWM_CLKDIV_8
-	
-	uint8_t  mode;			//PWM_MODE_INDEP、PWM_MODE_COMPL、PWM_MODE_INDEP_CALIGN、PWM_MODE_COMPL_CALIGN
-	
-	uint16_t cycleA;		//A路周期
-	uint16_t hdutyA;		//A路占空比
-	uint16_t deadzoneA;		//A路死区时长,取值0--1023
-	uint8_t  initLevelA;	//A路初始输出电平,0 低电平    1 高电平
-	
-	uint16_t cycleB;		//B路周期
-	uint16_t hdutyB;		//B路占空比
-	uint16_t deadzoneB;		//B路死区时长,取值0--1023
-	uint8_t  initLevelB;	//B路初始输出电平,0 低电平    1 高电平
-	
-	uint8_t  HEndAIEn;		//A路高电平结束中断使能
-	uint8_t  NCycleAIEn;	//A路新周期开始中断使能
-	uint8_t  HEndBIEn;		//B路高电平结束中断使能
-	uint8_t  NCycleBIEn;	//B路新周期开始中断使能
-} PWM_InitStructure;
-
-#define PWM_CLKDIV_1	0
-#define PWM_CLKDIV_8	1
+#define __SWM320_PWM_H__
 
-#define PWM_MODE_INDEP			0		//A路和B路为两路独立输出
-#define PWM_MODE_COMPL			1		//A路和B路为一路互补输出
-#define PWM_MODE_INDEP_CALIGN	3		//A路和B路为两路独立输出,中心对齐
-#define PWM_MODE_COMPL_CALIGN	4		//A路和B路为一路互补输出,中心对齐
+typedef struct
+{
+    uint8_t clk_div; //PWM_CLKDIV_1銆丳WM_CLKDIV_8
 
-#define PWM_CH_A	0
-#define PWM_CH_B	1
+    uint8_t mode; //PWM_MODE_INDEP銆丳WM_MODE_COMPL銆丳WM_MODE_INDEP_CALIGN銆丳WM_MODE_COMPL_CALIGN
 
+    uint16_t cycleA;    //A璺�懆鏈�
+    uint16_t hdutyA;    //A璺�崰绌烘瘮
+    uint16_t deadzoneA; //A璺��鍖烘椂闀匡紝鍙栧€�0--1023
+    uint8_t initLevelA; //A璺�垵濮嬭緭鍑虹數骞筹紝0 浣庣數骞�    1 楂樼數骞�
 
-void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct);			//PWM初始化
-void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB);				//启动PWM,开始PWM输出
-void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB);				//关闭PWM,停止PWM输出
+    uint16_t cycleB;    //B璺�懆鏈�
+    uint16_t hdutyB;    //B璺�崰绌烘瘮
+    uint16_t deadzoneB; //B璺��鍖烘椂闀匡紝鍙栧€�0--1023
+    uint8_t initLevelB; //B璺�垵濮嬭緭鍑虹數骞筹紝0 浣庣數骞�    1 楂樼數骞�
 
-void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle);		//设置周期
-uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn);	   				//获取周期
-void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty);		//设置高电平时长
-uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn);					//获取高电平时长
-void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone);	//设置死区时长
-uint8_t  PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn);		 			//获取死区时长
-
-void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn);   					//新周期开始中断使能
-void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn);  					//新周期开始中断禁能
-void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn);  					//新周期开始中断标志清除
-uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn); 				//新周期开始中断是否发生
-void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn); 						//高电平结束中断使能
-void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn);						//高电平结束中断禁能
-void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn);	 					//高电平结束中断标志清除
-uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn);					//高电平结束中断是否发生
+    uint8_t HEndAIEn;   //A璺�珮鐢靛钩缁撴潫涓�柇浣胯兘
+    uint8_t NCycleAIEn; //A璺�柊鍛ㄦ湡寮€濮嬩腑鏂�娇鑳�
+    uint8_t HEndBIEn;   //B璺�珮鐢靛钩缁撴潫涓�柇浣胯兘
+    uint8_t NCycleBIEn; //B璺�柊鍛ㄦ湡寮€濮嬩腑鏂�娇鑳�
+} PWM_InitStructure;
 
+#define PWM_CLKDIV_1 0
+#define PWM_CLKDIV_8 1
+
+#define PWM_MODE_INDEP 0        //A璺�拰B璺�负涓よ矾鐙�珛杈撳嚭
+#define PWM_MODE_COMPL 1        //A璺�拰B璺�负涓€璺�簰琛ヨ緭鍑�
+#define PWM_MODE_INDEP_CALIGN 3 //A璺�拰B璺�负涓よ矾鐙�珛杈撳嚭锛屼腑蹇冨�榻�
+#define PWM_MODE_COMPL_CALIGN 4 //A璺�拰B璺�负涓€璺�簰琛ヨ緭鍑猴紝涓�績瀵归綈
+
+#define PWM_CH_A 0
+#define PWM_CH_B 1
+
+void PWM_Init(PWM_TypeDef *PWMx, PWM_InitStructure *initStruct); //PWM鍒濆�鍖�
+void PWM_Start(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB);   //鍚�姩PWM锛屽紑濮婸WM杈撳嚭
+void PWM_Stop(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB);    //鍏抽棴PWM锛屽仠姝�WM杈撳嚭
+
+void PWM_SetCycle(PWM_TypeDef *PWMx, uint32_t chn, uint16_t cycle);      //璁剧疆鍛ㄦ湡
+uint16_t PWM_GetCycle(PWM_TypeDef *PWMx, uint32_t chn);                  //鑾峰彇鍛ㄦ湡
+void PWM_SetHDuty(PWM_TypeDef *PWMx, uint32_t chn, uint16_t hduty);      //璁剧疆楂樼數骞虫椂闀�
+uint16_t PWM_GetHDuty(PWM_TypeDef *PWMx, uint32_t chn);                  //鑾峰彇楂樼數骞虫椂闀�
+void PWM_SetDeadzone(PWM_TypeDef *PWMx, uint32_t chn, uint8_t deadzone); //璁剧疆姝诲尯鏃堕暱
+uint8_t PWM_GetDeadzone(PWM_TypeDef *PWMx, uint32_t chn);                //鑾峰彇姝诲尯鏃堕暱
+
+void PWM_IntNCycleEn(PWM_TypeDef *PWMx, uint32_t chn);       //鏂板懆鏈熷紑濮嬩腑鏂�娇鑳�
+void PWM_IntNCycleDis(PWM_TypeDef *PWMx, uint32_t chn);      //鏂板懆鏈熷紑濮嬩腑鏂��鑳�
+void PWM_IntNCycleClr(PWM_TypeDef *PWMx, uint32_t chn);      //鏂板懆鏈熷紑濮嬩腑鏂�爣蹇楁竻闄�
+uint32_t PWM_IntNCycleStat(PWM_TypeDef *PWMx, uint32_t chn); //鏂板懆鏈熷紑濮嬩腑鏂�槸鍚﹀彂鐢�
+void PWM_IntHEndEn(PWM_TypeDef *PWMx, uint32_t chn);         //楂樼數骞崇粨鏉熶腑鏂�娇鑳�
+void PWM_IntHEndDis(PWM_TypeDef *PWMx, uint32_t chn);        //楂樼數骞崇粨鏉熶腑鏂��鑳�
+void PWM_IntHEndClr(PWM_TypeDef *PWMx, uint32_t chn);        //楂樼數骞崇粨鏉熶腑鏂�爣蹇楁竻闄�
+uint32_t PWM_IntHEndStat(PWM_TypeDef *PWMx, uint32_t chn);   //楂樼數骞崇粨鏉熶腑鏂�槸鍚﹀彂鐢�
 
 #endif //__SWM320_PWM_H__

+ 281 - 275
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ: SWM320_rtc.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄRTCÇý¶¯¿â
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî: 
-* °æ±¾ÈÕÆÚ:	V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼:  
+* 文件�称: SWM320_rtc.c
+* 功能说明:	SWM320�片机的RTC驱动库
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项: 
+* 版本日期:	V1.1.0		2017年10月25日
+* �级记录:  
 *
 *
 *******************************************************************************************************************************************
@@ -21,393 +21,399 @@
 #include "SWM320.h"
 #include "SWM320_rtc.h"
 
-
 static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date);
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_Init()
-* ¹¦ÄÜ˵Ã÷:	RTC³õʼ»¯
-* Êä    Èë: RTC_TypeDef * RTCx	Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC
-*			RTC_InitStructure * initStruct    °üº¬RTCÏà¹ØÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_Init()
+* 功能说明:	RTC�始化
+* 输    入: RTC_TypeDef * RTCx	指定�被设置的RTC,有效值包括RTC
+*			RTC_InitStructure * initStruct    包�RTC相关设定值的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct)
-{	
-	SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
-	
-	SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);	//RTCʹÓÃ32KHz RCʱÖÓ
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_RTC_Pos) |
-				  ((uint32_t)1 << SYS_CLKEN_ALIVE_Pos);
-	
-	RTC_Stop(RTCx);
-	
-	while(RTCx->CFGABLE == 0);
-	
-	RTCx->MINSEC = (initStruct->Second << RTC_MINSEC_SEC_Pos) |
-				   (initStruct->Minute << RTC_MINSEC_MIN_Pos);
-	
-	RTCx->DATHUR = (initStruct->Hour << RTC_DATHUR_HOUR_Pos) |
-				   (initStruct->Date << RTC_DATHUR_DATE_Pos);
-	
-	RTCx->MONDAY = (calcWeekDay(initStruct->Year, initStruct->Month, initStruct->Date) << RTC_MONDAY_DAY_Pos) |
-				   (initStruct->Month << RTC_MONDAY_MON_Pos);
-	
-	RTCx->YEAR = initStruct->Year - 1901;
-	
-	RTCx->LOAD = 1 << RTC_LOAD_TIME_Pos;
-	
-	RTCx->IF = 0x1F;
-	RTCx->IE = (initStruct->SecondIEn << RTC_IE_SEC_Pos) |
-			   (initStruct->MinuteIEn << RTC_IE_MIN_Pos);
-	
-	if(initStruct->SecondIEn | initStruct->MinuteIEn)
-	{
-		NVIC_EnableIRQ(RTC_IRQn);
-	}
-	else
-	{
-		NVIC_DisableIRQ(RTC_IRQn);
-	}
+void RTC_Init(RTC_TypeDef *RTCx, RTC_InitStructure *initStruct)
+{
+    SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
+
+    SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos); //RTC使用32KHz RC时钟
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_RTC_Pos) |
+                  ((uint32_t)1 << SYS_CLKEN_ALIVE_Pos);
+
+    RTC_Stop(RTCx);
+
+    while (RTCx->CFGABLE == 0)
+        ;
+
+    RTCx->MINSEC = (initStruct->Second << RTC_MINSEC_SEC_Pos) |
+                   (initStruct->Minute << RTC_MINSEC_MIN_Pos);
+
+    RTCx->DATHUR = (initStruct->Hour << RTC_DATHUR_HOUR_Pos) |
+                   (initStruct->Date << RTC_DATHUR_DATE_Pos);
+
+    RTCx->MONDAY = (calcWeekDay(initStruct->Year, initStruct->Month, initStruct->Date) << RTC_MONDAY_DAY_Pos) |
+                   (initStruct->Month << RTC_MONDAY_MON_Pos);
+
+    RTCx->YEAR = initStruct->Year - 1901;
+
+    RTCx->LOAD = 1 << RTC_LOAD_TIME_Pos;
+
+    RTCx->IF = 0x1F;
+    RTCx->IE = (initStruct->SecondIEn << RTC_IE_SEC_Pos) |
+               (initStruct->MinuteIEn << RTC_IE_MIN_Pos);
+
+    if (initStruct->SecondIEn | initStruct->MinuteIEn)
+    {
+        NVIC_EnableIRQ(RTC_IRQn);
+    }
+    else
+    {
+        NVIC_DisableIRQ(RTC_IRQn);
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_Start()
-* ¹¦ÄÜ˵Ã÷:	Æô¶¯RTC
-* Êä    Èë: RTC_TypeDef * RTCx	Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_Start()
+* 功能说明:	�动RTC
+* 输    入: RTC_TypeDef * RTCx	指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_Start(RTC_TypeDef * RTCx)
+void RTC_Start(RTC_TypeDef *RTCx)
 {
-	RTCx->EN = 1;
+    RTCx->EN = 1;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_Stop()
-* ¹¦ÄÜ˵Ã÷:	Í£Ö¹RTC
-* Êä    Èë: RTC_TypeDef * RTCx	Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_Stop()
+* 功能说明:	�止RTC
+* 输    入: RTC_TypeDef * RTCx	指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_Stop(RTC_TypeDef * RTCx)
+void RTC_Stop(RTC_TypeDef *RTCx)
 {
-	RTCx->EN = 0;
+    RTCx->EN = 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_GetDateTime()
-* ¹¦ÄÜ˵Ã÷:	»ñÈ¡µ±Ç°µÄʱ¼äºÍÈÕÆÚ
-* Êä    Èë: RTC_TypeDef * RTCx	Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC
-*			RTC_DateTime * dateTime    »ñÈ¡µ½µÄʱ¼ä¡¢ÈÕÆÚÖµ´æÈë´ËÖ¸ÕëÖ¸ÏòµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_GetDateTime()
+* 功能说明:	获�当�的时间和日期
+* 输    入: RTC_TypeDef * RTCx	指定�被设置的RTC,有效值包括RTC
+*			RTC_DateTime * dateTime    获�到的时间�日期值存入此指针指�的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime)
+void RTC_GetDateTime(RTC_TypeDef *RTCx, RTC_DateTime *dateTime)
 {
-	dateTime->Year = RTCx->YEAR + 1901;
-	dateTime->Month = (RTCx->MONDAY & RTC_MONDAY_MON_Msk) >> RTC_MONDAY_MON_Pos;
-	dateTime->Date = (RTCx->DATHUR & RTC_DATHUR_DATE_Msk) >> RTC_DATHUR_DATE_Pos;
-	dateTime->Day = 1 << ((RTCx->MONDAY & RTC_MONDAY_DAY_Msk) >> RTC_MONDAY_DAY_Pos);
-	dateTime->Hour = (RTCx->DATHUR & RTC_DATHUR_HOUR_Msk) >> RTC_DATHUR_HOUR_Pos;
-	dateTime->Minute = (RTCx->MINSEC & RTC_MINSEC_MIN_Msk) >> RTC_MINSEC_MIN_Pos;
-	dateTime->Second = (RTCx->MINSEC & RTC_MINSEC_SEC_Msk) >> RTC_MINSEC_SEC_Pos;
+    dateTime->Year = RTCx->YEAR + 1901;
+    dateTime->Month = (RTCx->MONDAY & RTC_MONDAY_MON_Msk) >> RTC_MONDAY_MON_Pos;
+    dateTime->Date = (RTCx->DATHUR & RTC_DATHUR_DATE_Msk) >> RTC_DATHUR_DATE_Pos;
+    dateTime->Day = 1 << ((RTCx->MONDAY & RTC_MONDAY_DAY_Msk) >> RTC_MONDAY_DAY_Pos);
+    dateTime->Hour = (RTCx->DATHUR & RTC_DATHUR_HOUR_Msk) >> RTC_DATHUR_HOUR_Pos;
+    dateTime->Minute = (RTCx->MINSEC & RTC_MINSEC_MIN_Msk) >> RTC_MINSEC_MIN_Pos;
+    dateTime->Second = (RTCx->MINSEC & RTC_MINSEC_SEC_Msk) >> RTC_MINSEC_SEC_Pos;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_AlarmSetup()
-* ¹¦ÄÜ˵Ã÷:	RTCÄÖÖÓÉ趨
-* Êä    Èë: RTC_TypeDef * RTCx	Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC
-*			RTC_AlarmStructure * alarmStruct    °üº¬RTCÄÖÖÓÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_AlarmSetup()
+* 功能说明:	RTC闹钟设定
+* 输    入: RTC_TypeDef * RTCx	指定�被设置的RTC,有效值包括RTC
+*			RTC_AlarmStructure * alarmStruct    包�RTC闹钟设定值的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct)
+void RTC_AlarmSetup(RTC_TypeDef *RTCx, RTC_AlarmStructure *alarmStruct)
 {
-	while(RTCx->CFGABLE == 0);
-	
-	RTCx->MINSECAL = (alarmStruct->Second << RTC_MINSECAL_SEC_Pos) |
-					 (alarmStruct->Minute << RTC_MINSECAL_MIN_Pos);
-	
-	RTCx->DAYHURAL = (alarmStruct->Hour << RTC_DAYHURAL_HOUR_Pos) |
-					 (alarmStruct->Days << RTC_DAYHURAL_SUN_Pos);
-	
-	RTCx->LOAD = 1 << RTC_LOAD_ALARM_Pos;
-	while(RTCx->LOAD & RTC_LOAD_ALARM_Msk);
-	
-	RTCx->IF = (1 << RTC_IF_ALARM_Pos);
-	RTCx->IE &= ~RTC_IE_ALARM_Msk;
-	RTCx->IE |= (alarmStruct->AlarmIEn << RTC_IE_ALARM_Pos);
-	
-	if(alarmStruct->AlarmIEn)  NVIC_EnableIRQ(RTC_IRQn);
+    while (RTCx->CFGABLE == 0)
+        ;
+
+    RTCx->MINSECAL = (alarmStruct->Second << RTC_MINSECAL_SEC_Pos) |
+                     (alarmStruct->Minute << RTC_MINSECAL_MIN_Pos);
+
+    RTCx->DAYHURAL = (alarmStruct->Hour << RTC_DAYHURAL_HOUR_Pos) |
+                     (alarmStruct->Days << RTC_DAYHURAL_SUN_Pos);
+
+    RTCx->LOAD = 1 << RTC_LOAD_ALARM_Pos;
+    while (RTCx->LOAD & RTC_LOAD_ALARM_Msk)
+        ;
+
+    RTCx->IF = (1 << RTC_IF_ALARM_Pos);
+    RTCx->IE &= ~RTC_IE_ALARM_Msk;
+    RTCx->IE |= (alarmStruct->AlarmIEn << RTC_IE_ALARM_Pos);
+
+    if (alarmStruct->AlarmIEn)
+        NVIC_EnableIRQ(RTC_IRQn);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	calcWeekDay()
-* ¹¦ÄÜ˵Ã÷:	¼ÆËãÖ¸¶¨Äê¡¢Ô¡¢ÈÕÊÇÐÇÆÚ¼¸
-* Êä    Èë: uint32_t year		Äê
-*			uint32_t month		ÔÂ
-*			uint32_t date		ÈÕ
-* Êä    ³ö: uint32_t			0 ÐÇÆÚÈÕ    1 ÐÇÆÚÒ»    ... ...    6 ÐÇÆÚÁù
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	calcWeekDay()
+* 功能说明:	计算指定年�月�日是星期几
+* 输    入: uint32_t year		年
+*			uint32_t month		月
+*			uint32_t date		æ—¥
+* 输    出: uint32_t			0 星期日    1 星期一    ... ...    6 星期六
+* 注�事项: 无
 ******************************************************************************************************************************************/
 static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date)
 {
     uint32_t i, cnt = 0;
     const uint32_t daysOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-	
-	for(i = 1; i < month; i++) cnt += daysOfMonth[i];
-	
+
+    for (i = 1; i < month; i++)
+        cnt += daysOfMonth[i];
+
     cnt += date;
-	
-    if((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)) && (month >= 3)) cnt += 1;
-	
+
+    if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)) && (month >= 3))
+        cnt += 1;
+
     cnt += (year - 1901) * 365;
-	
-    for(i = 1901; i < year; i++)
+
+    for (i = 1901; i < year; i++)
     {
-        if((i%4 == 0) && ((i%100 != 0) || (i%400 == 0))) cnt += 1;
+        if ((i % 4 == 0) && ((i % 100 != 0) || (i % 400 == 0)))
+            cnt += 1;
     }
-	
-    return (cnt+1) % 7;
+
+    return (cnt + 1) % 7;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntSecondEn()
-* ¹¦ÄÜ˵Ã÷:	ÃëÖжÏʹÄÜ
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntSecondEn()
+* 功能说明:	秒中断使能
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntSecondEn(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE |= (1 << RTC_IE_SEC_Pos);
+void RTC_IntSecondEn(RTC_TypeDef *RTCx)
+{
+    RTCx->IE |= (1 << RTC_IE_SEC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntSecondDis()
-* ¹¦ÄÜ˵Ã÷:	ÃëÖжϽûÖ¹
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntSecondDis()
+* 功能说明:	秒中断�止
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntSecondDis(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE &= ~(1 << RTC_IE_SEC_Pos);
+void RTC_IntSecondDis(RTC_TypeDef *RTCx)
+{
+    RTCx->IE &= ~(1 << RTC_IE_SEC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntSecondClr()
-* ¹¦ÄÜ˵Ã÷:	ÃëÖжϱêÖ¾Çå³ý
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntSecondClr()
+* 功能说明:	秒中断标志清除
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntSecondClr(RTC_TypeDef * RTCx)
-{	
-	RTCx->IF = (1 << RTC_IF_SEC_Pos);
+void RTC_IntSecondClr(RTC_TypeDef *RTCx)
+{
+    RTCx->IF = (1 << RTC_IF_SEC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntSecondStat()
-* ¹¦ÄÜ˵Ã÷:	ÃëÖжÏ״̬
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: uint32_t				1 ÃëÖжϷ¢Éú    0 ÃëÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntSecondStat()
+* 功能说明:	秒中断状�
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: uint32_t				1 秒中断�生    0 秒中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx)
+uint32_t RTC_IntSecondStat(RTC_TypeDef *RTCx)
 {
-	return (RTCx->IF & RTC_IF_SEC_Msk) ? 1 : 0;
+    return (RTCx->IF & RTC_IF_SEC_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntMinuteEn()
-* ¹¦ÄÜ˵Ã÷:	·ÖÖжÏʹÄÜ
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntMinuteEn()
+* 功能说明:	分中断使能
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntMinuteEn(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE |= (1 << RTC_IE_MIN_Pos);
+void RTC_IntMinuteEn(RTC_TypeDef *RTCx)
+{
+    RTCx->IE |= (1 << RTC_IE_MIN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntMinuteDis()
-* ¹¦ÄÜ˵Ã÷:	·ÖÖжϽûÖ¹
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntMinuteDis()
+* 功能说明:	分中断�止
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntMinuteDis(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE &= ~(1 << RTC_IE_MIN_Pos);
+void RTC_IntMinuteDis(RTC_TypeDef *RTCx)
+{
+    RTCx->IE &= ~(1 << RTC_IE_MIN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntMinuteClr()
-* ¹¦ÄÜ˵Ã÷:	·ÖÖжϱêÖ¾Çå³ý
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntMinuteClr()
+* 功能说明:	分中断标志清除
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntMinuteClr(RTC_TypeDef * RTCx)
-{	
-	RTCx->IF = (1 << RTC_IF_MIN_Pos);
+void RTC_IntMinuteClr(RTC_TypeDef *RTCx)
+{
+    RTCx->IF = (1 << RTC_IF_MIN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntMinuteStat()
-* ¹¦ÄÜ˵Ã÷:	·ÖÖжÏ״̬
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: uint32_t				1 ·ÖÖжϷ¢Éú    0 ·ÖÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntMinuteStat()
+* 功能说明:	分中断状�
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: uint32_t				1 分中断�生    0 分中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx)
+uint32_t RTC_IntMinuteStat(RTC_TypeDef *RTCx)
 {
-	return (RTCx->IF & RTC_IF_MIN_Msk) ? 1 : 0;
+    return (RTCx->IF & RTC_IF_MIN_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntHourEn()
-* ¹¦ÄÜ˵Ã÷:	ʱÖжÏʹÄÜ
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntHourEn()
+* 功能说明:	时中断使能
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntHourEn(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE |= (1 << RTC_IE_HOUR_Pos);
+void RTC_IntHourEn(RTC_TypeDef *RTCx)
+{
+    RTCx->IE |= (1 << RTC_IE_HOUR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntHourDis()
-* ¹¦ÄÜ˵Ã÷:	ʱÖжϽûÖ¹
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntHourDis()
+* 功能说明:	时中断�止
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntHourDis(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE &= ~(1 << RTC_IE_HOUR_Pos);
+void RTC_IntHourDis(RTC_TypeDef *RTCx)
+{
+    RTCx->IE &= ~(1 << RTC_IE_HOUR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntHourClr()
-* ¹¦ÄÜ˵Ã÷:	ʱÖжϱêÖ¾Çå³ý
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntHourClr()
+* 功能说明:	时中断标志清除
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntHourClr(RTC_TypeDef * RTCx)
-{	
-	RTCx->IF = (1 << RTC_IF_HOUR_Pos);
+void RTC_IntHourClr(RTC_TypeDef *RTCx)
+{
+    RTCx->IF = (1 << RTC_IF_HOUR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntHourStat()
-* ¹¦ÄÜ˵Ã÷:	ʱÖжÏ״̬
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: uint32_t				1 ʱÖжϷ¢Éú    0 ʱÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntHourStat()
+* 功能说明:	时中断状�
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: uint32_t				1 时中断�生    0 时中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx)
+uint32_t RTC_IntHourStat(RTC_TypeDef *RTCx)
 {
-	return (RTCx->IF & RTC_IF_HOUR_Msk) ? 1 : 0;
+    return (RTCx->IF & RTC_IF_HOUR_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntDateEn()
-* ¹¦ÄÜ˵Ã÷:	ÈÕÖжÏʹÄÜ
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntDateEn()
+* 功能说明:	日中断使能
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntDateEn(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE |= (1 << RTC_IE_DATE_Pos);
+void RTC_IntDateEn(RTC_TypeDef *RTCx)
+{
+    RTCx->IE |= (1 << RTC_IE_DATE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntDateDis()
-* ¹¦ÄÜ˵Ã÷:	ÈÕÖжϽûÖ¹
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntDateDis()
+* 功能说明:	日中断�止
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntDateDis(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE &= ~(1 << RTC_IE_DATE_Pos);
+void RTC_IntDateDis(RTC_TypeDef *RTCx)
+{
+    RTCx->IE &= ~(1 << RTC_IE_DATE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntDateClr()
-* ¹¦ÄÜ˵Ã÷:	ÈÕÖжϱêÖ¾Çå³ý
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntDateClr()
+* 功能说明:	日中断标志清除
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntDateClr(RTC_TypeDef * RTCx)
-{	
-	RTCx->IF = (1 << RTC_IF_DATE_Pos);
+void RTC_IntDateClr(RTC_TypeDef *RTCx)
+{
+    RTCx->IF = (1 << RTC_IF_DATE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntDateStat()
-* ¹¦ÄÜ˵Ã÷:	ÈÕÖжÏ״̬
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: uint32_t				1 ÈÕÖжϷ¢Éú    0 ÈÕÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntDateStat()
+* 功能说明:	日中断状�
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: uint32_t				1 日中断�生    0 日中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx)
+uint32_t RTC_IntDateStat(RTC_TypeDef *RTCx)
 {
-	return (RTCx->IF & RTC_IF_DATE_Msk) ? 1 : 0;
+    return (RTCx->IF & RTC_IF_DATE_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntAlarmEn()
-* ¹¦ÄÜ˵Ã÷:	ÄÖÖÓÖжÏʹÄÜ
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntAlarmEn()
+* 功能说明:	闹钟中断使能
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntAlarmEn(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE |= (1 << RTC_IE_ALARM_Pos);
+void RTC_IntAlarmEn(RTC_TypeDef *RTCx)
+{
+    RTCx->IE |= (1 << RTC_IE_ALARM_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntAlarmDis()
-* ¹¦ÄÜ˵Ã÷:	ÄÖÖÓÖжϽûÖ¹
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntAlarmDis()
+* 功能说明:	闹钟中断�止
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntAlarmDis(RTC_TypeDef * RTCx)
-{	
-	RTCx->IE &= ~(1 << RTC_IE_ALARM_Pos);
+void RTC_IntAlarmDis(RTC_TypeDef *RTCx)
+{
+    RTCx->IE &= ~(1 << RTC_IE_ALARM_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntAlarmClr()
-* ¹¦ÄÜ˵Ã÷:	ÄÖÖÓÖжϱêÖ¾Çå³ý
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntAlarmClr()
+* 功能说明:	闹钟中断标志清除
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void RTC_IntAlarmClr(RTC_TypeDef * RTCx)
-{	
-	RTCx->IF = (1 << RTC_IF_ALARM_Pos);
+void RTC_IntAlarmClr(RTC_TypeDef *RTCx)
+{
+    RTCx->IF = (1 << RTC_IF_ALARM_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	RTC_IntAlarmStat()
-* ¹¦ÄÜ˵Ã÷:	ÄÖÖÓÖжÏ״̬
-* Êä    Èë: RTC_TypeDef * RTCx		Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC
-* Êä    ³ö: uint32_t				1 ÄÖÖÓÖжϷ¢Éú    0 ÄÖÖÓÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	RTC_IntAlarmStat()
+* 功能说明:	闹钟中断状�
+* 输    入: RTC_TypeDef * RTCx		指定�被设置的RTC,��值包括RTC
+* 输    出: uint32_t				1 闹钟中断�生    0 闹钟中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t RTC_IntAlarmStat(RTC_TypeDef * RTCx)
+uint32_t RTC_IntAlarmStat(RTC_TypeDef *RTCx)
 {
-	return (RTCx->IF & RTC_IF_ALARM_Msk) ? 1 : 0;
+    return (RTCx->IF & RTC_IF_ALARM_Msk) ? 1 : 0;
 }

+ 58 - 58
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h

@@ -1,73 +1,73 @@
 #ifndef __SWM320_RTC_H__
 #define __SWM320_RTC_H__
 
+#define RTC_SUN 0x01
+#define RTC_MON 0x02
+#define RTC_TUE 0x04
+#define RTC_WED 0x08
+#define RTC_THU 0x10
+#define RTC_FRI 0x20
+#define RTC_SAT 0x40
 
-#define RTC_SUN   0x01
-#define RTC_MON   0x02
-#define RTC_TUE   0x04
-#define RTC_WED   0x08
-#define RTC_THU   0x10
-#define RTC_FRI   0x20
-#define RTC_SAT   0x40
-
-
-typedef struct {
-	uint16_t Year;
-	uint8_t  Month;			//ȡֵ1--12
-	uint8_t  Date;			//ȡֵ1--31
-	uint8_t  Hour;			//ȡֵ0--23
-	uint8_t  Minute;		//ȡֵ0--59
-	uint8_t  Second;		//ȡֵ0--59
-	uint8_t  SecondIEn;
-	uint8_t  MinuteIEn;
+typedef struct
+{
+    uint16_t Year;
+    uint8_t Month;  //�值1--12
+    uint8_t Date;   //�值1--31
+    uint8_t Hour;   //�值0--23
+    uint8_t Minute; //�值0--59
+    uint8_t Second; //�值0--59
+    uint8_t SecondIEn;
+    uint8_t MinuteIEn;
 } RTC_InitStructure;
 
-typedef struct {
-	uint8_t  Days;			//RTC_SUN¡¢RTC_MON¡¢RTC_TUE¡¢RTC_WED¡¢RTC_THU¡¢RTC_FRI¡¢RTC_SAT¼°Æä»òÔËËã×éºÏ
-	uint8_t  Hour;
-	uint8_t  Minute;
-	uint8_t  Second;
-	uint8_t  AlarmIEn;
+typedef struct
+{
+    uint8_t Days; //RTC_SUN�RTC_MON�RTC_TUE�RTC_WED�RTC_THU�RTC_FRI�RTC_SAT�其或�算组�
+    uint8_t Hour;
+    uint8_t Minute;
+    uint8_t Second;
+    uint8_t AlarmIEn;
 } RTC_AlarmStructure;
 
-typedef struct {
-	uint16_t Year;
-	uint8_t  Month;
-	uint8_t  Date;
-	uint8_t  Day;			//RTC_SUN¡¢RTC_MON¡¢RTC_TUE¡¢RTC_WED¡¢RTC_THU¡¢RTC_FRI¡¢RTC_SAT
-	uint8_t  Hour;
-	uint8_t  Minute;
-	uint8_t  Second;
+typedef struct
+{
+    uint16_t Year;
+    uint8_t Month;
+    uint8_t Date;
+    uint8_t Day; //RTC_SUN�RTC_MON�RTC_TUE�RTC_WED�RTC_THU�RTC_FRI�RTC_SAT
+    uint8_t Hour;
+    uint8_t Minute;
+    uint8_t Second;
 } RTC_DateTime;
 
-void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct);
-void RTC_Start(RTC_TypeDef * RTCx);
-void RTC_Stop(RTC_TypeDef * RTCx);
-
-void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime);
+void RTC_Init(RTC_TypeDef *RTCx, RTC_InitStructure *initStruct);
+void RTC_Start(RTC_TypeDef *RTCx);
+void RTC_Stop(RTC_TypeDef *RTCx);
 
-void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct);
+void RTC_GetDateTime(RTC_TypeDef *RTCx, RTC_DateTime *dateTime);
 
+void RTC_AlarmSetup(RTC_TypeDef *RTCx, RTC_AlarmStructure *alarmStruct);
 
-void RTC_IntSecondEn(RTC_TypeDef * RTCx);
-void RTC_IntSecondDis(RTC_TypeDef * RTCx);
-void RTC_IntSecondClr(RTC_TypeDef * RTCx);
-uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx);
-void RTC_IntMinuteEn(RTC_TypeDef * RTCx);
-void RTC_IntMinuteDis(RTC_TypeDef * RTCx);
-void RTC_IntMinuteClr(RTC_TypeDef * RTCx);
-uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx);
-void RTC_IntHourEn(RTC_TypeDef * RTCx);
-void RTC_IntHourDis(RTC_TypeDef * RTCx);
-void RTC_IntHourClr(RTC_TypeDef * RTCx);
-uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx);
-void RTC_IntDateEn(RTC_TypeDef * RTCx);
-void RTC_IntDateDis(RTC_TypeDef * RTCx);
-void RTC_IntDateClr(RTC_TypeDef * RTCx);
-uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx);
-void RTC_IntAlarmEn(RTC_TypeDef * RTCx);
-void RTC_IntAlarmDis(RTC_TypeDef * RTCx);
-void RTC_IntAlarmClr(RTC_TypeDef * RTCx);
-uint32_t RTC_IntAlarmStat(RTC_TypeDef * RTCx);
+void RTC_IntSecondEn(RTC_TypeDef *RTCx);
+void RTC_IntSecondDis(RTC_TypeDef *RTCx);
+void RTC_IntSecondClr(RTC_TypeDef *RTCx);
+uint32_t RTC_IntSecondStat(RTC_TypeDef *RTCx);
+void RTC_IntMinuteEn(RTC_TypeDef *RTCx);
+void RTC_IntMinuteDis(RTC_TypeDef *RTCx);
+void RTC_IntMinuteClr(RTC_TypeDef *RTCx);
+uint32_t RTC_IntMinuteStat(RTC_TypeDef *RTCx);
+void RTC_IntHourEn(RTC_TypeDef *RTCx);
+void RTC_IntHourDis(RTC_TypeDef *RTCx);
+void RTC_IntHourClr(RTC_TypeDef *RTCx);
+uint32_t RTC_IntHourStat(RTC_TypeDef *RTCx);
+void RTC_IntDateEn(RTC_TypeDef *RTCx);
+void RTC_IntDateDis(RTC_TypeDef *RTCx);
+void RTC_IntDateClr(RTC_TypeDef *RTCx);
+uint32_t RTC_IntDateStat(RTC_TypeDef *RTCx);
+void RTC_IntAlarmEn(RTC_TypeDef *RTCx);
+void RTC_IntAlarmDis(RTC_TypeDef *RTCx);
+void RTC_IntAlarmClr(RTC_TypeDef *RTCx);
+uint32_t RTC_IntAlarmStat(RTC_TypeDef *RTCx);
 
 #endif //__SWM320_RTC_H__

+ 547 - 515
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 文件名称: SWM320_sdio.c
-* 功能说明:	SWM320单片机的SDIO接口驱动库
-* 技术支持:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 注意事项: 为了通用性、兼容性、易用性,只支持以512字节为单位的读写
-* 版本日期:	V1.1.0		2017年10月25日
-* 升级记录:  
+* 鏂囦欢鍚嶇О: SWM320_sdio.c
+* 鍔熻兘璇存槑:	SWM320鍗曠墖鏈虹殑SDIO鎺ュ彛椹卞姩搴�
+* 鎶€鏈�敮鎸�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 娉ㄦ剰浜嬮」: 涓轰簡閫氱敤鎬с€佸吋瀹规€с€佹槗鐢ㄦ€э紝鍙�敮鎸佷互512瀛楄妭涓哄崟浣嶇殑璇诲啓
+* 鐗堟湰鏃ユ湡:	V1.1.0		2017骞�10鏈�25鏃�
+* 鍗囩骇璁板綍:  
 *
 *
 *******************************************************************************************************************************************
@@ -21,574 +21,606 @@
 #include "SWM320.h"
 #include "SWM320_sdio.h"
 
-
 SD_CardInfo SD_cardInfo;
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_Init()
-* 功能说明:	SDIO读写SD卡初始化,初始化成高速4线模式、读写以512字节大小进行
-* 输    入: uint32_t freq			SDIO_CLK时钟频率
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_Init()
+* 鍔熻兘璇存槑:	SDIO璇诲啓SD鍗″垵濮嬪寲锛屽垵濮嬪寲鎴愰珮閫�4绾挎ā寮忋€佽�鍐欎互512瀛楄妭澶у皬杩涜�
+* 杈�    鍏�: uint32_t freq			SDIO_CLK鏃堕挓棰戠巼
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_Init(uint32_t freq)
 {
-	uint32_t res;
-	uint32_t resp, resps[4];
-	
-	SYS->CLKDIV &= ~SYS_CLKDIV_SDIO_Msk;
-	if(SystemCoreClock > 80000000)		//SDIO时钟需要小于52MHz
-		SYS->CLKDIV |= (2 << SYS_CLKDIV_SDIO_Pos);	//SDCLK = SYSCLK / 4
-	else
-		SYS->CLKDIV |= (1 << SYS_CLKDIV_SDIO_Pos);	//SDCLK = SYSCLK / 2
-	
-	SYS->CLKEN |= (0x01 << SYS_CLKEN_SDIO_Pos);
-	
-	SDIO->CR2 = (1 << SDIO_CR2_RSTALL_Pos);
-	
-	SDIO->CR1 = (1 << SDIO_CR1_CDSRC_Pos) |
-				(0 << SDIO_CR1_8BIT_Pos)  |
-				(0 << SDIO_CR1_4BIT_Pos)  |
-				(1 << SDIO_CR1_PWRON_Pos) |
-				(7 << SDIO_CR1_VOLT_Pos);
-	
-	SDIO->CR2 = (1 << SDIO_CR2_CLKEN_Pos) |
-				(1 << SDIO_CR2_SDCLKEN_Pos) |
-				(calcSDCLKDiv(100000) << SDIO_CR2_SDCLKDIV_Pos) |
-				(0xC << SDIO_CR2_TIMEOUT_Pos);		// 2**25 SDIO_CLK
-	
-	while((SDIO->CR2 & SDIO_CR2_CLKRDY_Msk) == 0);
-	
-	SDIO->IFE = 0xFFFFFFFF;
-	
-	
-	SDIO_SendCmd(SD_CMD_GO_IDLE_STATE, 0x00, SD_RESP_NO, 0);				//CMD0: GO_IDLE_STATE
-	
-	res = SDIO_SendCmd(SD_CMD_SEND_IF_COND, 0x1AA, SD_RESP_32b, &resp);		//CMD8: SEND_IF_COND, 检测工作电压、检测是否支持SD 2.0
-	if(res != SD_RES_OK)
-		return res;
-	
-	if(resp == 0x1AA) SD_cardInfo.CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0;
-	else			  SD_cardInfo.CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1;
-	
-	do																		//ACMD41: SD_CMD_SD_APP_OP_COND
-	{
-		res = SDIO_SendCmd(SD_CMD_APP_CMD, 0x00, SD_RESP_32b, &resp);
-		if(res != SD_RES_OK)
-			return res;
-		
-		if(resp != 0x120) return SD_RES_ERR;	//不是SD卡,可能是MMC卡
-		
-		if(SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)
-			SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000|0x40000000, SD_RESP_32b, &resp);
-		else
-			SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000|0x00000000, SD_RESP_32b, &resp);
-	} while(((resp >> 31) & 0x01) == 0);		//上电没完成时resp[31] == 0
-	
-	if(((resp >> 30) & 0x01) == 1) SD_cardInfo.CardType = SDIO_HIGH_CAPACITY_SD_CARD;
-	
-	
-	SDIO_SendCmd(SD_CMD_ALL_SEND_CID, 0x00, SD_RESP_128b, resps);			//CMD2: SD_CMD_ALL_SEND_CID,获取CID
-	
-	parseCID(resps);
-	
-	
-	SDIO_SendCmd(SD_CMD_SET_REL_ADDR, 0x00, SD_RESP_32b, &resp);			//CMD3: SD_CMD_SET_REL_ADDR,设置RCA
-	
-	SD_cardInfo.RCA = resp >> 16;
-	
-	
-	SDIO_SendCmd(SD_CMD_SEND_CSD, SD_cardInfo.RCA << 16, SD_RESP_128b, resps);	//CMD9: SD_CMD_SEND_CSD,获取CSD
-	
-	parseCSD(resps);
-	
-	if(SD_cardInfo.CardBlockSize < 0x200) return SD_RES_ERR;	//本驱动只支持以512字节为单位的读写,所以最大读写单位必须不小于512
-	
-	
-	SDIO->CR2 &= ~(SDIO_CR2_SDCLKEN_Msk | SDIO_CR2_SDCLKDIV_Msk);
-	SDIO->CR2 |= (1 << SDIO_CR2_SDCLKEN_Pos) |
-				 (calcSDCLKDiv(freq) << SDIO_CR2_SDCLKDIV_Pos);	//初始化完成,SDCLK切换到高速
-	
-	
-	SDIO_SendCmd(SD_CMD_SEL_DESEL_CARD, SD_cardInfo.RCA << 16, SD_RESP_32b_busy, &resp);	//CMD7: 选中卡,从Standy模式进入Transfer模式
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	SDIO_SendCmd(SD_CMD_APP_CMD, SD_cardInfo.RCA << 16, SD_RESP_32b, &resp);
-	
-	SDIO_SendCmd(SD_CMD_APP_SD_SET_BUSWIDTH, SD_BUSWIDTH_4b, SD_RESP_32b, &resp);	//切换成4位总线模式
-	
-	SDIO->CR1 |= (1 << SDIO_CR1_4BIT_Pos);
-	
-	
-	SDIO_SendCmd(SD_CMD_SET_BLOCKLEN, 512, SD_RESP_32b, &resp);		//固定块大小位512字节
-	
-	SDIO->BLK = 512;
-	
-	return SD_RES_OK;
+    uint32_t res;
+    uint32_t resp, resps[4];
+
+    SYS->CLKDIV &= ~SYS_CLKDIV_SDIO_Msk;
+    if (SystemCoreClock > 80000000)                //SDIO鏃堕挓闇€瑕佸皬浜�52MHz
+        SYS->CLKDIV |= (2 << SYS_CLKDIV_SDIO_Pos); //SDCLK = SYSCLK / 4
+    else
+        SYS->CLKDIV |= (1 << SYS_CLKDIV_SDIO_Pos); //SDCLK = SYSCLK / 2
+
+    SYS->CLKEN |= (0x01 << SYS_CLKEN_SDIO_Pos);
+
+    SDIO->CR2 = (1 << SDIO_CR2_RSTALL_Pos);
+
+    SDIO->CR1 = (1 << SDIO_CR1_CDSRC_Pos) |
+                (0 << SDIO_CR1_8BIT_Pos) |
+                (0 << SDIO_CR1_4BIT_Pos) |
+                (1 << SDIO_CR1_PWRON_Pos) |
+                (7 << SDIO_CR1_VOLT_Pos);
+
+    SDIO->CR2 = (1 << SDIO_CR2_CLKEN_Pos) |
+                (1 << SDIO_CR2_SDCLKEN_Pos) |
+                (calcSDCLKDiv(100000) << SDIO_CR2_SDCLKDIV_Pos) |
+                (0xC << SDIO_CR2_TIMEOUT_Pos); // 2**25 SDIO_CLK
+
+    while ((SDIO->CR2 & SDIO_CR2_CLKRDY_Msk) == 0)
+        ;
+
+    SDIO->IFE = 0xFFFFFFFF;
+
+    SDIO_SendCmd(SD_CMD_GO_IDLE_STATE, 0x00, SD_RESP_NO, 0); //CMD0: GO_IDLE_STATE
+
+    res = SDIO_SendCmd(SD_CMD_SEND_IF_COND, 0x1AA, SD_RESP_32b, &resp); //CMD8: SEND_IF_COND, 妫€娴嬪伐浣滅數鍘嬨€佹�娴嬫槸鍚︽敮鎸丼D 2.0
+    if (res != SD_RES_OK)
+        return res;
+
+    if (resp == 0x1AA)
+        SD_cardInfo.CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0;
+    else
+        SD_cardInfo.CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1;
+
+    do //ACMD41: SD_CMD_SD_APP_OP_COND
+    {
+        res = SDIO_SendCmd(SD_CMD_APP_CMD, 0x00, SD_RESP_32b, &resp);
+        if (res != SD_RES_OK)
+            return res;
+
+        if (resp != 0x120)
+            return SD_RES_ERR; //涓嶆槸SD鍗★紝鍙�兘鏄疢MC鍗�
+
+        if (SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)
+            SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000 | 0x40000000, SD_RESP_32b, &resp);
+        else
+            SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000 | 0x00000000, SD_RESP_32b, &resp);
+    } while (((resp >> 31) & 0x01) == 0); //涓婄數娌″畬鎴愭椂resp[31] == 0
+
+    if (((resp >> 30) & 0x01) == 1)
+        SD_cardInfo.CardType = SDIO_HIGH_CAPACITY_SD_CARD;
+
+    SDIO_SendCmd(SD_CMD_ALL_SEND_CID, 0x00, SD_RESP_128b, resps); //CMD2: SD_CMD_ALL_SEND_CID锛岃幏鍙朇ID
+
+    parseCID(resps);
+
+    SDIO_SendCmd(SD_CMD_SET_REL_ADDR, 0x00, SD_RESP_32b, &resp); //CMD3: SD_CMD_SET_REL_ADDR锛岃�缃甊CA
+
+    SD_cardInfo.RCA = resp >> 16;
+
+    SDIO_SendCmd(SD_CMD_SEND_CSD, SD_cardInfo.RCA << 16, SD_RESP_128b, resps); //CMD9: SD_CMD_SEND_CSD锛岃幏鍙朇SD
+
+    parseCSD(resps);
+
+    if (SD_cardInfo.CardBlockSize < 0x200)
+        return SD_RES_ERR; //鏈�┍鍔ㄥ彧鏀�寔浠�512瀛楄妭涓哄崟浣嶇殑璇诲啓锛屾墍浠ユ渶澶ц�鍐欏崟浣嶅繀椤讳笉灏忎簬512
+
+    SDIO->CR2 &= ~(SDIO_CR2_SDCLKEN_Msk | SDIO_CR2_SDCLKDIV_Msk);
+    SDIO->CR2 |= (1 << SDIO_CR2_SDCLKEN_Pos) |
+                 (calcSDCLKDiv(freq) << SDIO_CR2_SDCLKDIV_Pos); //鍒濆�鍖栧畬鎴愶紝SDCLK鍒囨崲鍒伴珮閫�
+
+    SDIO_SendCmd(SD_CMD_SEL_DESEL_CARD, SD_cardInfo.RCA << 16, SD_RESP_32b_busy, &resp); //CMD7: 閫変腑鍗★紝浠嶴tandy妯″紡杩涘叆Transfer妯″紡
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    SDIO_SendCmd(SD_CMD_APP_CMD, SD_cardInfo.RCA << 16, SD_RESP_32b, &resp);
+
+    SDIO_SendCmd(SD_CMD_APP_SD_SET_BUSWIDTH, SD_BUSWIDTH_4b, SD_RESP_32b, &resp); //鍒囨崲鎴�4浣嶆€荤嚎妯″紡
+
+    SDIO->CR1 |= (1 << SDIO_CR1_4BIT_Pos);
+
+    SDIO_SendCmd(SD_CMD_SET_BLOCKLEN, 512, SD_RESP_32b, &resp); //鍥哄畾鍧楀ぇ灏忎綅512瀛楄妭
+
+    SDIO->BLK = 512;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_BlockWrite()
-* 功能说明:	向SD卡写入数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint32_t buff[]			要写入的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_BlockWrite()
+* 鍔熻兘璇存槑:	鍚慡D鍗″啓鍏ユ暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint32_t buff[]			瑕佸啓鍏ョ殑鏁版嵁
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[])
 {
-	uint32_t res, i;
-	uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	res = SDIO_SendCmdWithData(SD_CMD_WRITE_SINGLE_BLOCK, addr, SD_RESP_32b, &resp, 0, 1);
-	if(res != SD_RES_OK)
-		return res;
-	
-    while((SDIO->IF & SDIO_IF_BUFWRRDY_Msk) == 0) __NOP();
-    SDIO->IF = SDIO_IF_BUFWRRDY_Msk;		
-    
-    for(i = 0; i < 512/4; i++) SDIO->DATA = buff[i];
-	
-    while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+    uint32_t res, i;
+    uint32_t addr, resp;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    res = SDIO_SendCmdWithData(SD_CMD_WRITE_SINGLE_BLOCK, addr, SD_RESP_32b, &resp, 0, 1);
+    if (res != SD_RES_OK)
+        return res;
+
+    while ((SDIO->IF & SDIO_IF_BUFWRRDY_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_BUFWRRDY_Msk;
+
+    for (i = 0; i < 512 / 4; i++)
+        SDIO->DATA = buff[i];
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_MultiBlockWrite()
-* 功能说明:	向SD卡写入多块数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint16_t block_cnt		要写入的块数
-*			uint32_t buff[]			要写入的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_MultiBlockWrite()
+* 鍔熻兘璇存槑:	鍚慡D鍗″啓鍏ュ�鍧楁暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint16_t block_cnt		瑕佸啓鍏ョ殑鍧楁暟
+*			uint32_t buff[]			瑕佸啓鍏ョ殑鏁版嵁
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
 {
-	uint32_t res, i, j;
-	uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	res = SDIO_SendCmdWithData(SD_CMD_WRITE_MULT_BLOCK, addr, SD_RESP_32b, &resp, 0, block_cnt);
-	if(res != SD_RES_OK)
-		return res;
-	
-	for(i = 0; i < block_cnt; i++)
-	{
-		while((SDIO->IF & SDIO_IF_BUFWRRDY_Msk) == 0) __NOP();
-		SDIO->IF = SDIO_IF_BUFWRRDY_Msk;
-		
-		for(j = 0; j < 512/4; j++) SDIO->DATA = buff[i*(512/4) + j];
-	}
-	
-	while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+    uint32_t res, i, j;
+    uint32_t addr, resp;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    res = SDIO_SendCmdWithData(SD_CMD_WRITE_MULT_BLOCK, addr, SD_RESP_32b, &resp, 0, block_cnt);
+    if (res != SD_RES_OK)
+        return res;
+
+    for (i = 0; i < block_cnt; i++)
+    {
+        while ((SDIO->IF & SDIO_IF_BUFWRRDY_Msk) == 0)
+            __NOP();
+        SDIO->IF = SDIO_IF_BUFWRRDY_Msk;
+
+        for (j = 0; j < 512 / 4; j++)
+            SDIO->DATA = buff[i * (512 / 4) + j];
+    }
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_DMABlockWrite()
-* 功能说明:	通过DMA向SD卡写入多块数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint16_t block_cnt		要写入的块数
-*			uint32_t buff[]			要写入的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_DMABlockWrite()
+* 鍔熻兘璇存槑:	閫氳繃DMA鍚慡D鍗″啓鍏ュ�鍧楁暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint16_t block_cnt		瑕佸啓鍏ョ殑鍧楁暟
+*			uint32_t buff[]			瑕佸啓鍏ョ殑鏁版嵁
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
 {
-	uint32_t res;
-	uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	SDIO->DMA_MEM_ADDR = (uint32_t) buff;
-	
-	res = SDIO_SendCmdWithDataByDMA(SD_CMD_WRITE_MULT_BLOCK, addr, SD_RESP_32b, &resp, 0, block_cnt);
-	if(res != SD_RES_OK)
-		return res;
-	
-	while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+    uint32_t res;
+    uint32_t addr, resp;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    SDIO->DMA_MEM_ADDR = (uint32_t)buff;
+
+    res = SDIO_SendCmdWithDataByDMA(SD_CMD_WRITE_MULT_BLOCK, addr, SD_RESP_32b, &resp, 0, block_cnt);
+    if (res != SD_RES_OK)
+        return res;
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_BlockRead()
-* 功能说明:	从SD卡读出数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint32_t buff[]			读出的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_BlockRead()
+* 鍔熻兘璇存槑:	浠嶴D鍗¤�鍑烘暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint32_t buff[]			璇诲嚭鐨勬暟鎹�
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[])
 {
-	uint32_t res, i;
+    uint32_t res, i;
     uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	res = SDIO_SendCmdWithData(SD_CMD_READ_SINGLE_BLOCK, addr, SD_RESP_32b, &resp, 1, 1);
-	if(res != SD_RES_OK)
-		return res;
-	
-    while((SDIO->IF & SDIO_IF_BUFRDRDY_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_BUFRDRDY_Msk;
-    
-    for(i = 0; i < 512/4; i++) buff[i] = SDIO->DATA;
-    
-	while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    res = SDIO_SendCmdWithData(SD_CMD_READ_SINGLE_BLOCK, addr, SD_RESP_32b, &resp, 1, 1);
+    if (res != SD_RES_OK)
+        return res;
+
+    while ((SDIO->IF & SDIO_IF_BUFRDRDY_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_BUFRDRDY_Msk;
+
+    for (i = 0; i < 512 / 4; i++)
+        buff[i] = SDIO->DATA;
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_MultiBlockRead()
-* 功能说明:	从SD卡读出多块数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint16_t block_cnt		要读出的块数
-*			uint32_t buff[]			读出的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_MultiBlockRead()
+* 鍔熻兘璇存槑:	浠嶴D鍗¤�鍑哄�鍧楁暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint16_t block_cnt		瑕佽�鍑虹殑鍧楁暟
+*			uint32_t buff[]			璇诲嚭鐨勬暟鎹�
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
 {
-	uint32_t res, i, j;
+    uint32_t res, i, j;
     uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	res = SDIO_SendCmdWithData(SD_CMD_READ_MULT_BLOCK, addr, SD_RESP_32b, &resp, 1, block_cnt);
-	if(res != SD_RES_OK)
-		return res;
-	
-	for(i = 0; i < block_cnt; i++)
-	{
-		while((SDIO->IF & SDIO_IF_BUFRDRDY_Msk) == 0) __NOP();
-		SDIO->IF = SDIO_IF_BUFRDRDY_Msk;
-		
-		for(j = 0; j < 512/4; j++) buff[i*(512/4) + j] = SDIO->DATA;
-	}
-	
-	while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    res = SDIO_SendCmdWithData(SD_CMD_READ_MULT_BLOCK, addr, SD_RESP_32b, &resp, 1, block_cnt);
+    if (res != SD_RES_OK)
+        return res;
+
+    for (i = 0; i < block_cnt; i++)
+    {
+        while ((SDIO->IF & SDIO_IF_BUFRDRDY_Msk) == 0)
+            __NOP();
+        SDIO->IF = SDIO_IF_BUFRDRDY_Msk;
+
+        for (j = 0; j < 512 / 4; j++)
+            buff[i * (512 / 4) + j] = SDIO->DATA;
+    }
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: SDIO_DMABlockRead()
-* 功能说明:	通过DMA从SD卡读出多块数据
-* 输    入: uint32_t block_addr		SD卡块地址,每块512字节
-*			uint16_t block_cnt		要读出的块数
-*			uint32_t buff[]			读出的数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: SDIO_DMABlockRead()
+* 鍔熻兘璇存槑:	閫氳繃DMA浠嶴D鍗¤�鍑哄�鍧楁暟鎹�
+* 杈�    鍏�: uint32_t block_addr		SD鍗″潡鍦板潃锛屾瘡鍧�512瀛楄妭
+*			uint16_t block_cnt		瑕佽�鍑虹殑鍧楁暟
+*			uint32_t buff[]			璇诲嚭鐨勬暟鎹�
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
 uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
 {
-	uint32_t res;
+    uint32_t res;
     uint32_t addr, resp;
-	
-	if(SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	addr = block_addr;
-	else													addr = block_addr * 512;
-	
-	SDIO->DMA_MEM_ADDR = (uint32_t)buff;
-	
-	res = SDIO_SendCmdWithDataByDMA(SD_CMD_READ_MULT_BLOCK, addr, SD_RESP_32b, &resp, 1, block_cnt);
-	if(res != SD_RES_OK)
-		return res;
-	
-	while((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0) __NOP();
-	SDIO->IF = SDIO_IF_TRXDONE_Msk;
-	
-	return SD_RES_OK;
+
+    if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+        addr = block_addr;
+    else
+        addr = block_addr * 512;
+
+    SDIO->DMA_MEM_ADDR = (uint32_t)buff;
+
+    res = SDIO_SendCmdWithDataByDMA(SD_CMD_READ_MULT_BLOCK, addr, SD_RESP_32b, &resp, 1, block_cnt);
+    if (res != SD_RES_OK)
+        return res;
+
+    while ((SDIO->IF & SDIO_IF_TRXDONE_Msk) == 0)
+        __NOP();
+    SDIO->IF = SDIO_IF_TRXDONE_Msk;
+
+    return SD_RES_OK;
 }
 
 /****************************************************************************************************************************************** 
-* 函数名称: _SDIO_SendCmd()
-* 功能说明:	SDIO向SD卡发送命令
-* 输    入: uint32_t cmd			命令索引
-*			uint32_t arg			命令参数
-*			uint32_t _resp_type		响应类型,取值SD_RESP_NO、SD_RESP_32b、SD_RESP_128b、SD_RESP_32b_busy
-*			uint32_t *resp_data		响应内容
-*			uint32_t have_data		是否有数据传输
-*			uint32_t data_read		1 读SD卡    0 写SD卡
-*			uint16_t block_cnt		读写块个数
-*			uint32_t use_dma		1 使用DMA搬运数据
-* 输    出: uint32_t				SD_RES_OK 操作成功    SD_RES_ERR 操作失败    SD_RES_TIMEOUT 操作超时
-* 注意事项: 无
+* 鍑芥暟鍚嶇О: _SDIO_SendCmd()
+* 鍔熻兘璇存槑:	SDIO鍚慡D鍗″彂閫佸懡浠�
+* 杈�    鍏�: uint32_t cmd			鍛戒护绱㈠紩
+*			uint32_t arg			鍛戒护鍙傛暟
+*			uint32_t resp_type		鍝嶅簲绫诲瀷锛屽彇鍊糞D_RESP_NO銆丼D_RESP_32b銆丼D_RESP_128b銆丼D_RESP_32b_busy
+*			uint32_t *resp_data		鍝嶅簲鍐呭�
+*			uint32_t have_data		鏄�惁鏈夋暟鎹�紶杈�
+*			uint32_t data_read		1 璇籗D鍗�    0 鍐橲D鍗�
+*			uint16_t block_cnt		璇诲啓鍧椾釜鏁�
+*			uint32_t use_dma		1 浣跨敤DMA鎼�繍鏁版嵁
+* 杈�    鍑�: uint32_t				SD_RES_OK 鎿嶄綔鎴愬姛    SD_RES_ERR 鎿嶄綔澶辫触    SD_RES_TIMEOUT 鎿嶄綔瓒呮椂
+* 娉ㄦ剰浜嬮」: 鏃�
 ******************************************************************************************************************************************/
-uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma)
-{	
-	SDIO->BLK &= ~SDIO_BLK_COUNT_Msk;
-	SDIO->BLK |= (block_cnt << SDIO_BLK_COUNT_Pos);
-	
-	SDIO->ARG = arg;
-	SDIO->CMD = (cmd             << SDIO_CMD_CMDINDX_Pos)   |
-				(0               << SDIO_CMD_CMDTYPE_Pos)   |
-				(0               << SDIO_CMD_IDXCHECK_Pos)  |
-				(0               << SDIO_CMD_CRCCHECK_Pos)  |
-				(_resp_type      << SDIO_CMD_RESPTYPE_Pos)  |
-				(have_data       << SDIO_CMD_HAVEDATA_Pos)  |
-				(data_read       << SDIO_CMD_DIRREAD_Pos)   |
-				((block_cnt > 1) << SDIO_CMD_MULTBLK_Pos)   |
-				((block_cnt > 1) << SDIO_CMD_BLKCNTEN_Pos)  |
-				((block_cnt > 1) << SDIO_CMD_AUTOCMD12_Pos) |
-				(use_dma         << SDIO_CMD_DMAEN_Pos);
-	
-	while((SDIO->IF & SDIO_IF_CMDDONE_Msk) == 0)
-	{
-		if(SDIO->IF & SDIO_IF_CMDTIMEOUT_Msk)
-		{
-			SDIO->IF = SDIO_IF_CMDTIMEOUT_Msk;
-			
-			return SD_RES_TIMEOUT;
-		}
-		else if(SDIO->IF & SDIO_IF_ERROR_Msk)
-		{
-			SDIO->IF = 0xFFFFFFFF;
-			
-			return SD_RES_ERR;
-		}
-	}
-	SDIO->IF = SDIO_IF_CMDDONE_Msk;
-	
-	if(_resp_type == SD_RESP_32b)
-	{
-		resp_data[0] = SDIO->RESP[0];
-	}
-	else if(_resp_type == SD_RESP_128b)
-	{
-		//寄存器中将CID/CSD[127-8]依次存放在了RESP3-0[119-0],最低位的CRC被丢掉
-		//读出数据时调整了顺序,将CID/CSD[127-8]存放在resp_data0-3[127-8],最低8位填充0x00
-		resp_data[0] = (SDIO->RESP[3] << 8) + ((SDIO->RESP[2] >> 24) & 0xFF);
-		resp_data[1] = (SDIO->RESP[2] << 8) + ((SDIO->RESP[1] >> 24) & 0xFF);
-		resp_data[2] = (SDIO->RESP[1] << 8) + ((SDIO->RESP[0] >> 24) & 0xFF);
-		resp_data[3] = (SDIO->RESP[0] << 8) + 0x00;
-	}
-	
-	return SD_RES_OK;
-}
+uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma)
+{
+    SDIO->BLK &= ~SDIO_BLK_COUNT_Msk;
+    SDIO->BLK |= (block_cnt << SDIO_BLK_COUNT_Pos);
+
+    SDIO->ARG = arg;
+    SDIO->CMD = (cmd << SDIO_CMD_CMDINDX_Pos) |
+                (0 << SDIO_CMD_CMDTYPE_Pos) |
+                (0 << SDIO_CMD_IDXCHECK_Pos) |
+                (0 << SDIO_CMD_CRCCHECK_Pos) |
+                (resp_type << SDIO_CMD_RESPTYPE_Pos) |
+                (have_data << SDIO_CMD_HAVEDATA_Pos) |
+                (data_read << SDIO_CMD_DIRREAD_Pos) |
+                ((block_cnt > 1) << SDIO_CMD_MULTBLK_Pos) |
+                ((block_cnt > 1) << SDIO_CMD_BLKCNTEN_Pos) |
+                ((block_cnt > 1) << SDIO_CMD_AUTOCMD12_Pos) |
+                (use_dma << SDIO_CMD_DMAEN_Pos);
+
+    while ((SDIO->IF & SDIO_IF_CMDDONE_Msk) == 0)
+    {
+        if (SDIO->IF & SDIO_IF_CMDTIMEOUT_Msk)
+        {
+            SDIO->IF = SDIO_IF_CMDTIMEOUT_Msk;
+
+            return SD_RES_TIMEOUT;
+        }
+        else if (SDIO->IF & SDIO_IF_ERROR_Msk)
+        {
+            SDIO->IF = 0xFFFFFFFF;
+
+            return SD_RES_ERR;
+        }
+    }
+    SDIO->IF = SDIO_IF_CMDDONE_Msk;
 
+    if (resp_type == SD_RESP_32b)
+    {
+        resp_data[0] = SDIO->RESP[0];
+    }
+    else if (resp_type == SD_RESP_128b)
+    {
+        //瀵勫瓨鍣ㄤ腑灏咰ID/CSD[127-8]渚濇�瀛樻斁鍦ㄤ簡RESP3-0[119-0]锛屾渶浣庝綅鐨凜RC琚�涪鎺�
+        //璇诲嚭鏁版嵁鏃惰皟鏁翠簡椤哄簭锛屽皢CID/CSD[127-8]瀛樻斁鍦╮esp_data0-3[127-8]锛屾渶浣�8浣嶅~鍏�0x00
+        resp_data[0] = (SDIO->RESP[3] << 8) + ((SDIO->RESP[2] >> 24) & 0xFF);
+        resp_data[1] = (SDIO->RESP[2] << 8) + ((SDIO->RESP[1] >> 24) & 0xFF);
+        resp_data[2] = (SDIO->RESP[1] << 8) + ((SDIO->RESP[0] >> 24) & 0xFF);
+        resp_data[3] = (SDIO->RESP[0] << 8) + 0x00;
+    }
+
+    return SD_RES_OK;
+}
 
 void parseCID(uint32_t CID_Tab[4])
 {
-	uint8_t tmp = 0;
-	
-	/*!< Byte 0 */
-	tmp = (uint8_t)((CID_Tab[0] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_cid.ManufacturerID = tmp;
-	
-	/*!< Byte 1 */
-	tmp = (uint8_t)((CID_Tab[0] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_cid.OEM_AppliID = tmp << 8;
-	
-	/*!< Byte 2 */
-	tmp = (uint8_t)((CID_Tab[0] & 0x000000FF00) >> 8);
-	SD_cardInfo.SD_cid.OEM_AppliID |= tmp;
-	
-	/*!< Byte 3 */
-	tmp = (uint8_t)(CID_Tab[0] & 0x000000FF);
-	SD_cardInfo.SD_cid.ProdName1 = tmp << 24;
-	
-	/*!< Byte 4 */
-	tmp = (uint8_t)((CID_Tab[1] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_cid.ProdName1 |= tmp << 16;
-	
-	/*!< Byte 5 */
-	tmp = (uint8_t)((CID_Tab[1] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_cid.ProdName1 |= tmp << 8;
-	
-	/*!< Byte 6 */
-	tmp = (uint8_t)((CID_Tab[1] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_cid.ProdName1 |= tmp;
-	
-	/*!< Byte 7 */
-	tmp = (uint8_t)(CID_Tab[1] & 0x000000FF);
-	SD_cardInfo.SD_cid.ProdName2 = tmp;
-	
-	/*!< Byte 8 */
-	tmp = (uint8_t)((CID_Tab[2] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_cid.ProdRev = tmp;
-	
-	/*!< Byte 9 */
-	tmp = (uint8_t)((CID_Tab[2] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_cid.ProdSN = tmp << 24;
-	
-	/*!< Byte 10 */
-	tmp = (uint8_t)((CID_Tab[2] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_cid.ProdSN |= tmp << 16;
-	
-	/*!< Byte 11 */
-	tmp = (uint8_t)(CID_Tab[2] & 0x000000FF);
-	SD_cardInfo.SD_cid.ProdSN |= tmp << 8;
-	
-	/*!< Byte 12 */
-	tmp = (uint8_t)((CID_Tab[3] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_cid.ProdSN |= tmp;
-	
-	/*!< Byte 13 */
-	tmp = (uint8_t)((CID_Tab[3] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_cid.Reserved1 |= (tmp & 0xF0) >> 4;
-	SD_cardInfo.SD_cid.ManufactDate = (tmp & 0x0F) << 8;
-	
-	/*!< Byte 14 */
-	tmp = (uint8_t)((CID_Tab[3] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_cid.ManufactDate |= tmp;
+    uint8_t tmp = 0;
+
+    /*!< Byte 0 */
+    tmp = (uint8_t)((CID_Tab[0] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_cid.ManufacturerID = tmp;
+
+    /*!< Byte 1 */
+    tmp = (uint8_t)((CID_Tab[0] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_cid.OEM_AppliID = tmp << 8;
+
+    /*!< Byte 2 */
+    tmp = (uint8_t)((CID_Tab[0] & 0x000000FF00) >> 8);
+    SD_cardInfo.SD_cid.OEM_AppliID |= tmp;
+
+    /*!< Byte 3 */
+    tmp = (uint8_t)(CID_Tab[0] & 0x000000FF);
+    SD_cardInfo.SD_cid.ProdName1 = tmp << 24;
+
+    /*!< Byte 4 */
+    tmp = (uint8_t)((CID_Tab[1] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_cid.ProdName1 |= tmp << 16;
+
+    /*!< Byte 5 */
+    tmp = (uint8_t)((CID_Tab[1] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_cid.ProdName1 |= tmp << 8;
+
+    /*!< Byte 6 */
+    tmp = (uint8_t)((CID_Tab[1] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_cid.ProdName1 |= tmp;
+
+    /*!< Byte 7 */
+    tmp = (uint8_t)(CID_Tab[1] & 0x000000FF);
+    SD_cardInfo.SD_cid.ProdName2 = tmp;
+
+    /*!< Byte 8 */
+    tmp = (uint8_t)((CID_Tab[2] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_cid.ProdRev = tmp;
+
+    /*!< Byte 9 */
+    tmp = (uint8_t)((CID_Tab[2] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_cid.ProdSN = tmp << 24;
+
+    /*!< Byte 10 */
+    tmp = (uint8_t)((CID_Tab[2] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_cid.ProdSN |= tmp << 16;
+
+    /*!< Byte 11 */
+    tmp = (uint8_t)(CID_Tab[2] & 0x000000FF);
+    SD_cardInfo.SD_cid.ProdSN |= tmp << 8;
+
+    /*!< Byte 12 */
+    tmp = (uint8_t)((CID_Tab[3] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_cid.ProdSN |= tmp;
+
+    /*!< Byte 13 */
+    tmp = (uint8_t)((CID_Tab[3] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_cid.Reserved1 |= (tmp & 0xF0) >> 4;
+    SD_cardInfo.SD_cid.ManufactDate = (tmp & 0x0F) << 8;
+
+    /*!< Byte 14 */
+    tmp = (uint8_t)((CID_Tab[3] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_cid.ManufactDate |= tmp;
 }
 
 void parseCSD(uint32_t CSD_Tab[4])
 {
-	uint8_t tmp = 0;
-	
-	/*!< Byte 0 */
-	tmp = (uint8_t)((CSD_Tab[0] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_csd.CSDStruct = (tmp & 0xC0) >> 6;
-	SD_cardInfo.SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2;
-	SD_cardInfo.SD_csd.Reserved1 = tmp & 0x03;
-	
-	/*!< Byte 1 */
-	tmp = (uint8_t)((CSD_Tab[0] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_csd.TAAC = tmp;
-	
-	/*!< Byte 2 */
-	tmp = (uint8_t)((CSD_Tab[0] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_csd.NSAC = tmp;
-	
-	/*!< Byte 3 */
-	tmp = (uint8_t)(CSD_Tab[0] & 0x000000FF);
-	SD_cardInfo.SD_csd.MaxBusClkFrec = tmp;
-	
-	/*!< Byte 4 */
-	tmp = (uint8_t)((CSD_Tab[1] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_csd.CardComdClasses = tmp << 4;
-	
-	/*!< Byte 5 */
-	tmp = (uint8_t)((CSD_Tab[1] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4;
-	SD_cardInfo.SD_csd.RdBlockLen = tmp & 0x0F;
-	
-	/*!< Byte 6 */
-	tmp = (uint8_t)((CSD_Tab[1] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_csd.PartBlockRead = (tmp & 0x80) >> 7;
-	SD_cardInfo.SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6;
-	SD_cardInfo.SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5;
-	SD_cardInfo.SD_csd.DSRImpl = (tmp & 0x10) >> 4;
-	SD_cardInfo.SD_csd.Reserved2 = 0; /*!< Reserved */
-	
-	if ((SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || 
-		(SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0))
-	{
-		SD_cardInfo.SD_csd.DeviceSize = (tmp & 0x03) << 10;
-		
-		/*!< Byte 7 */
-		tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
-		SD_cardInfo.SD_csd.DeviceSize |= (tmp) << 2;
-		
-		/*!< Byte 8 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
-		SD_cardInfo.SD_csd.DeviceSize |= (tmp & 0xC0) >> 6;
-		
-		SD_cardInfo.SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3;
-		SD_cardInfo.SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07);
-		
-		/*!< Byte 9 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
-		SD_cardInfo.SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5;
-		SD_cardInfo.SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2;
-		SD_cardInfo.SD_csd.DeviceSizeMul = (tmp & 0x03) << 1;
-		/*!< Byte 10 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
-		SD_cardInfo.SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7;
-		
-		SD_cardInfo.CardCapacity = (SD_cardInfo.SD_csd.DeviceSize + 1) ;
-		SD_cardInfo.CardCapacity *= (1 << (SD_cardInfo.SD_csd.DeviceSizeMul + 2));
-		SD_cardInfo.CardBlockSize = 1 << (SD_cardInfo.SD_csd.RdBlockLen);
-		SD_cardInfo.CardCapacity *= SD_cardInfo.CardBlockSize;
-	}
-	else if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
-	{
-		/*!< Byte 7 */
-		tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
-		SD_cardInfo.SD_csd.DeviceSize = (tmp & 0x3F) << 16;
-		
-		/*!< Byte 8 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
-		
-		SD_cardInfo.SD_csd.DeviceSize |= (tmp << 8);
-		
-		/*!< Byte 9 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
-		
-		SD_cardInfo.SD_csd.DeviceSize |= (tmp);
-		
-		/*!< Byte 10 */
-		tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
-		
-		SD_cardInfo.CardCapacity = (SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024;
-		SD_cardInfo.CardBlockSize = 512;    
-	}
-	
-	SD_cardInfo.SD_csd.EraseGrSize = (tmp & 0x40) >> 6;
-	SD_cardInfo.SD_csd.EraseGrMul = (tmp & 0x3F) << 1;
-	
-	/*!< Byte 11 */
-	tmp = (uint8_t)(CSD_Tab[2] & 0x000000FF);
-	SD_cardInfo.SD_csd.EraseGrMul |= (tmp & 0x80) >> 7;
-	SD_cardInfo.SD_csd.WrProtectGrSize = (tmp & 0x7F);
-	
-	/*!< Byte 12 */
-	tmp = (uint8_t)((CSD_Tab[3] & 0xFF000000) >> 24);
-	SD_cardInfo.SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7;
-	SD_cardInfo.SD_csd.ManDeflECC = (tmp & 0x60) >> 5;
-	SD_cardInfo.SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2;
-	SD_cardInfo.SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2;
-	
-	/*!< Byte 13 */
-	tmp = (uint8_t)((CSD_Tab[3] & 0x00FF0000) >> 16);
-	SD_cardInfo.SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6;
-	SD_cardInfo.SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5;
-	SD_cardInfo.SD_csd.Reserved3 = 0;
-	SD_cardInfo.SD_csd.ContentProtectAppli = (tmp & 0x01);
-	
-	/*!< Byte 14 */
-	tmp = (uint8_t)((CSD_Tab[3] & 0x0000FF00) >> 8);
-	SD_cardInfo.SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7;
-	SD_cardInfo.SD_csd.CopyFlag = (tmp & 0x40) >> 6;
-	SD_cardInfo.SD_csd.PermWrProtect = (tmp & 0x20) >> 5;
-	SD_cardInfo.SD_csd.TempWrProtect = (tmp & 0x10) >> 4;
-	SD_cardInfo.SD_csd.FileFormat = (tmp & 0x0C) >> 2;
-	SD_cardInfo.SD_csd.ECC = (tmp & 0x03);
+    uint8_t tmp = 0;
+
+    /*!< Byte 0 */
+    tmp = (uint8_t)((CSD_Tab[0] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_csd.CSDStruct = (tmp & 0xC0) >> 6;
+    SD_cardInfo.SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2;
+    SD_cardInfo.SD_csd.Reserved1 = tmp & 0x03;
+
+    /*!< Byte 1 */
+    tmp = (uint8_t)((CSD_Tab[0] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_csd.TAAC = tmp;
+
+    /*!< Byte 2 */
+    tmp = (uint8_t)((CSD_Tab[0] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_csd.NSAC = tmp;
+
+    /*!< Byte 3 */
+    tmp = (uint8_t)(CSD_Tab[0] & 0x000000FF);
+    SD_cardInfo.SD_csd.MaxBusClkFrec = tmp;
+
+    /*!< Byte 4 */
+    tmp = (uint8_t)((CSD_Tab[1] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_csd.CardComdClasses = tmp << 4;
+
+    /*!< Byte 5 */
+    tmp = (uint8_t)((CSD_Tab[1] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4;
+    SD_cardInfo.SD_csd.RdBlockLen = tmp & 0x0F;
+
+    /*!< Byte 6 */
+    tmp = (uint8_t)((CSD_Tab[1] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_csd.PartBlockRead = (tmp & 0x80) >> 7;
+    SD_cardInfo.SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6;
+    SD_cardInfo.SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5;
+    SD_cardInfo.SD_csd.DSRImpl = (tmp & 0x10) >> 4;
+    SD_cardInfo.SD_csd.Reserved2 = 0; /*!< Reserved */
+
+    if ((SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) ||
+        (SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0))
+    {
+        SD_cardInfo.SD_csd.DeviceSize = (tmp & 0x03) << 10;
+
+        /*!< Byte 7 */
+        tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
+        SD_cardInfo.SD_csd.DeviceSize |= (tmp) << 2;
+
+        /*!< Byte 8 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
+        SD_cardInfo.SD_csd.DeviceSize |= (tmp & 0xC0) >> 6;
+
+        SD_cardInfo.SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3;
+        SD_cardInfo.SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07);
+
+        /*!< Byte 9 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
+        SD_cardInfo.SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5;
+        SD_cardInfo.SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2;
+        SD_cardInfo.SD_csd.DeviceSizeMul = (tmp & 0x03) << 1;
+        /*!< Byte 10 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
+        SD_cardInfo.SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7;
+
+        SD_cardInfo.CardCapacity = (SD_cardInfo.SD_csd.DeviceSize + 1);
+        SD_cardInfo.CardCapacity *= (1 << (SD_cardInfo.SD_csd.DeviceSizeMul + 2));
+        SD_cardInfo.CardBlockSize = 1 << (SD_cardInfo.SD_csd.RdBlockLen);
+        SD_cardInfo.CardCapacity *= SD_cardInfo.CardBlockSize;
+    }
+    else if (SD_cardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)
+    {
+        /*!< Byte 7 */
+        tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
+        SD_cardInfo.SD_csd.DeviceSize = (tmp & 0x3F) << 16;
+
+        /*!< Byte 8 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
+
+        SD_cardInfo.SD_csd.DeviceSize |= (tmp << 8);
+
+        /*!< Byte 9 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
+
+        SD_cardInfo.SD_csd.DeviceSize |= (tmp);
+
+        /*!< Byte 10 */
+        tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
+
+        SD_cardInfo.CardCapacity = (uint64_t)(SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024;
+        SD_cardInfo.CardBlockSize = 512;
+    }
+
+    SD_cardInfo.SD_csd.EraseGrSize = (tmp & 0x40) >> 6;
+    SD_cardInfo.SD_csd.EraseGrMul = (tmp & 0x3F) << 1;
+
+    /*!< Byte 11 */
+    tmp = (uint8_t)(CSD_Tab[2] & 0x000000FF);
+    SD_cardInfo.SD_csd.EraseGrMul |= (tmp & 0x80) >> 7;
+    SD_cardInfo.SD_csd.WrProtectGrSize = (tmp & 0x7F);
+
+    /*!< Byte 12 */
+    tmp = (uint8_t)((CSD_Tab[3] & 0xFF000000) >> 24);
+    SD_cardInfo.SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7;
+    SD_cardInfo.SD_csd.ManDeflECC = (tmp & 0x60) >> 5;
+    SD_cardInfo.SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2;
+    SD_cardInfo.SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2;
+
+    /*!< Byte 13 */
+    tmp = (uint8_t)((CSD_Tab[3] & 0x00FF0000) >> 16);
+    SD_cardInfo.SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6;
+    SD_cardInfo.SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5;
+    SD_cardInfo.SD_csd.Reserved3 = 0;
+    SD_cardInfo.SD_csd.ContentProtectAppli = (tmp & 0x01);
+
+    /*!< Byte 14 */
+    tmp = (uint8_t)((CSD_Tab[3] & 0x0000FF00) >> 8);
+    SD_cardInfo.SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7;
+    SD_cardInfo.SD_csd.CopyFlag = (tmp & 0x40) >> 6;
+    SD_cardInfo.SD_csd.PermWrProtect = (tmp & 0x20) >> 5;
+    SD_cardInfo.SD_csd.TempWrProtect = (tmp & 0x10) >> 4;
+    SD_cardInfo.SD_csd.FileFormat = (tmp & 0x0C) >> 2;
+    SD_cardInfo.SD_csd.ECC = (tmp & 0x03);
 }
 
 uint32_t calcSDCLKDiv(uint32_t freq)
 {
-	uint32_t prediv = ((SYS->CLKDIV & SYS_CLKDIV_SDIO_Msk) >> SYS_CLKDIV_SDIO_Pos);
-	uint32_t clkdiv = (SystemCoreClock / (1 << prediv)) / freq;
-	uint32_t regdiv = 0;
-	
-	if(clkdiv > 128)     regdiv = 0x80;
-	else if(clkdiv > 64) regdiv = 0x40;
-	else if(clkdiv > 32) regdiv = 0x20;
-	else if(clkdiv > 16) regdiv = 0x10;
-	else if(clkdiv >  8) regdiv = 0x08;
-	else if(clkdiv >  4) regdiv = 0x04;
-	else if(clkdiv >  2) regdiv = 0x02;
-	else if(clkdiv >  1) regdiv = 0x01;
-	else                 regdiv = 0x00;
-	
-	return regdiv;
+    uint32_t prediv = ((SYS->CLKDIV & SYS_CLKDIV_SDIO_Msk) >> SYS_CLKDIV_SDIO_Pos);
+    uint32_t clkdiv = (SystemCoreClock / (1 << prediv)) / freq;
+    uint32_t regdiv = 0;
+
+    if (clkdiv > 128)
+        regdiv = 0x80;
+    else if (clkdiv > 64)
+        regdiv = 0x40;
+    else if (clkdiv > 32)
+        regdiv = 0x20;
+    else if (clkdiv > 16)
+        regdiv = 0x10;
+    else if (clkdiv > 8)
+        regdiv = 0x08;
+    else if (clkdiv > 4)
+        regdiv = 0x04;
+    else if (clkdiv > 2)
+        regdiv = 0x02;
+    else if (clkdiv > 1)
+        regdiv = 0x01;
+    else
+        regdiv = 0x00;
+
+    return regdiv;
 }

+ 101 - 107
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h

@@ -1,126 +1,120 @@
 #ifndef __SWM320_SDIO_H__
 #define __SWM320_SDIO_H__
 
-
-#define SD_CMD_GO_IDLE_STATE                       ((uint8_t)0)
-#define SD_CMD_SEND_OP_COND                        ((uint8_t)1)
-#define SD_CMD_ALL_SEND_CID                        ((uint8_t)2)
-#define SD_CMD_SET_REL_ADDR                        ((uint8_t)3)
-#define SD_CMD_SET_DSR                             ((uint8_t)4)
-#define SD_CMD_HS_SWITCH                           ((uint8_t)6)
-#define SD_CMD_SEL_DESEL_CARD                      ((uint8_t)7)
-#define SD_CMD_SEND_IF_COND                        ((uint8_t)8)
-#define SD_CMD_SEND_CSD                            ((uint8_t)9)
-#define SD_CMD_SEND_CID                            ((uint8_t)10)
-#define SD_CMD_STOP_TRANSMISSION                   ((uint8_t)12)
-#define SD_CMD_SEND_STATUS                         ((uint8_t)13)
-#define SD_CMD_SET_BLOCKLEN                        ((uint8_t)16)
-#define SD_CMD_READ_SINGLE_BLOCK                   ((uint8_t)17)
-#define SD_CMD_READ_MULT_BLOCK                     ((uint8_t)18)
-#define SD_CMD_WRITE_SINGLE_BLOCK                  ((uint8_t)24)
-#define SD_CMD_WRITE_MULT_BLOCK                    ((uint8_t)25)
-#define SD_CMD_PROG_CID                            ((uint8_t)26)
-#define SD_CMD_PROG_CSD                            ((uint8_t)27)
-#define SD_CMD_APP_CMD                             ((uint8_t)55)
+#define SD_CMD_GO_IDLE_STATE ((uint8_t)0)
+#define SD_CMD_SEND_OP_COND ((uint8_t)1)
+#define SD_CMD_ALL_SEND_CID ((uint8_t)2)
+#define SD_CMD_SET_REL_ADDR ((uint8_t)3)
+#define SD_CMD_SET_DSR ((uint8_t)4)
+#define SD_CMD_HS_SWITCH ((uint8_t)6)
+#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7)
+#define SD_CMD_SEND_IF_COND ((uint8_t)8)
+#define SD_CMD_SEND_CSD ((uint8_t)9)
+#define SD_CMD_SEND_CID ((uint8_t)10)
+#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12)
+#define SD_CMD_SEND_STATUS ((uint8_t)13)
+#define SD_CMD_SET_BLOCKLEN ((uint8_t)16)
+#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17)
+#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18)
+#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24)
+#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25)
+#define SD_CMD_PROG_CID ((uint8_t)26)
+#define SD_CMD_PROG_CSD ((uint8_t)27)
+#define SD_CMD_APP_CMD ((uint8_t)55)
 
 /*Following commands are SD Card Specific commands.
   SDIO_APP_CMD should be sent before sending these commands. */
-#define SD_CMD_APP_SD_SET_BUSWIDTH                 ((uint8_t)6)
-#define SD_CMD_SD_APP_STAUS                        ((uint8_t)13)
-#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS        ((uint8_t)22)
-#define SD_CMD_SD_APP_OP_COND                      ((uint8_t)41)
-#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT          ((uint8_t)42)
-#define SD_CMD_SD_APP_SEND_SCR                     ((uint8_t)51)
-#define SD_CMD_SDIO_RW_DIRECT                      ((uint8_t)52)
-#define SD_CMD_SDIO_RW_EXTENDED                    ((uint8_t)53)
-
-
-#define SD_RESP_NO			0	//0 ÎÞÏìÓ¦
-#define SD_RESP_32b			2	//2 32λÏìÓ¦
-#define SD_RESP_128b		1	//1 128λÏìÓ¦
-#define SD_RESP_32b_busy	3	//3 32λÏìÓ¦£¬check Busy after response
-
-#define SD_BUSWIDTH_1b		0
-#define SD_BUSWIDTH_4b		2
-
-#define SD_RES_OK			0
-#define SD_RES_ERR			1
-#define SD_RES_TIMEOUT		2
-
+#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6)
+#define SD_CMD_SD_APP_STAUS ((uint8_t)13)
+#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22)
+#define SD_CMD_SD_APP_OP_COND ((uint8_t)41)
+#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42)
+#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51)
+#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52)
+#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53)
+
+#define SD_RESP_NO 0       //0 无�应
+#define SD_RESP_32b 2      //2 32��应
+#define SD_RESP_128b 1     //1 128��应
+#define SD_RESP_32b_busy 3 //3 32��应,check Busy after response
+
+#define SD_BUSWIDTH_1b 0
+#define SD_BUSWIDTH_4b 2
+
+#define SD_RES_OK 0
+#define SD_RES_ERR 1
+#define SD_RES_TIMEOUT 2
 
 typedef struct
 {
-  __IO uint8_t  CSDStruct;            // CSD structure 
-  __IO uint8_t  SysSpecVersion;       // System specification version 
-  __IO uint8_t  Reserved1;            // Reserved 
-  __IO uint8_t  TAAC;                 // Data read access-time 1 
-  __IO uint8_t  NSAC;                 // Data read access-time 2 in CLK cycles 
-  __IO uint8_t  MaxBusClkFrec;        // Max. bus clock frequency 
-  __IO uint16_t CardComdClasses;      //< Card command classes 
-  __IO uint8_t  RdBlockLen;           // Max. read data block length 
-  __IO uint8_t  PartBlockRead;        // Partial blocks for read allowed 
-  __IO uint8_t  WrBlockMisalign;      // Write block misalignment 
-  __IO uint8_t  RdBlockMisalign;      // Read block misalignment 
-  __IO uint8_t  DSRImpl;              // DSR implemented 
-  __IO uint8_t  Reserved2;            // Reserved 
-  __IO uint32_t DeviceSize;           // Device Size 
-  __IO uint8_t  MaxRdCurrentVDDMin;   // Max. read current @ VDD min 
-  __IO uint8_t  MaxRdCurrentVDDMax;   // Max. read current @ VDD max 
-  __IO uint8_t  MaxWrCurrentVDDMin;   // Max. write current @ VDD min 
-  __IO uint8_t  MaxWrCurrentVDDMax;   // Max. write current @ VDD max 
-  __IO uint8_t  DeviceSizeMul;        // Device size multiplier 
-  __IO uint8_t  EraseGrSize;          // Erase group size 
-  __IO uint8_t  EraseGrMul;           // Erase group size multiplier 
-  __IO uint8_t  WrProtectGrSize;      // Write protect group size 
-  __IO uint8_t  WrProtectGrEnable;    // Write protect group enable 
-  __IO uint8_t  ManDeflECC;           // Manufacturer default ECC 
-  __IO uint8_t  WrSpeedFact;          // Write speed factor 
-  __IO uint8_t  MaxWrBlockLen;        // Max. write data block length 
-  __IO uint8_t  WriteBlockPaPartial;  // Partial blocks for write allowed 
-  __IO uint8_t  Reserved3;            // Reserded 
-  __IO uint8_t  ContentProtectAppli;  // Content protection application 
-  __IO uint8_t  FileFormatGrouop;     // File format group 
-  __IO uint8_t  CopyFlag;             // Copy flag (OTP) 
-  __IO uint8_t  PermWrProtect;        // Permanent write protection 
-  __IO uint8_t  TempWrProtect;        // Temporary write protection 
-  __IO uint8_t  FileFormat;           // File Format 
-  __IO uint8_t  ECC;                  // ECC code 
+    __IO uint8_t CSDStruct;           // CSD structure
+    __IO uint8_t SysSpecVersion;      // System specification version
+    __IO uint8_t Reserved1;           // Reserved
+    __IO uint8_t TAAC;                // Data read access-time 1
+    __IO uint8_t NSAC;                // Data read access-time 2 in CLK cycles
+    __IO uint8_t MaxBusClkFrec;       // Max. bus clock frequency
+    __IO uint16_t CardComdClasses;    //< Card command classes
+    __IO uint8_t RdBlockLen;          // Max. read data block length
+    __IO uint8_t PartBlockRead;       // Partial blocks for read allowed
+    __IO uint8_t WrBlockMisalign;     // Write block misalignment
+    __IO uint8_t RdBlockMisalign;     // Read block misalignment
+    __IO uint8_t DSRImpl;             // DSR implemented
+    __IO uint8_t Reserved2;           // Reserved
+    __IO uint32_t DeviceSize;         // Device Size
+    __IO uint8_t MaxRdCurrentVDDMin;  // Max. read current @ VDD min
+    __IO uint8_t MaxRdCurrentVDDMax;  // Max. read current @ VDD max
+    __IO uint8_t MaxWrCurrentVDDMin;  // Max. write current @ VDD min
+    __IO uint8_t MaxWrCurrentVDDMax;  // Max. write current @ VDD max
+    __IO uint8_t DeviceSizeMul;       // Device size multiplier
+    __IO uint8_t EraseGrSize;         // Erase group size
+    __IO uint8_t EraseGrMul;          // Erase group size multiplier
+    __IO uint8_t WrProtectGrSize;     // Write protect group size
+    __IO uint8_t WrProtectGrEnable;   // Write protect group enable
+    __IO uint8_t ManDeflECC;          // Manufacturer default ECC
+    __IO uint8_t WrSpeedFact;         // Write speed factor
+    __IO uint8_t MaxWrBlockLen;       // Max. write data block length
+    __IO uint8_t WriteBlockPaPartial; // Partial blocks for write allowed
+    __IO uint8_t Reserved3;           // Reserded
+    __IO uint8_t ContentProtectAppli; // Content protection application
+    __IO uint8_t FileFormatGrouop;    // File format group
+    __IO uint8_t CopyFlag;            // Copy flag (OTP)
+    __IO uint8_t PermWrProtect;       // Permanent write protection
+    __IO uint8_t TempWrProtect;       // Temporary write protection
+    __IO uint8_t FileFormat;          // File Format
+    __IO uint8_t ECC;                 // ECC code
 } SD_CSD;
 
 typedef struct
 {
-  __IO uint8_t  ManufacturerID;       // ManufacturerID 
-  __IO uint16_t OEM_AppliID;          // OEM/Application ID 
-  __IO uint32_t ProdName1;            // Product Name part1 
-  __IO uint8_t  ProdName2;            // Product Name part2
-  __IO uint8_t  ProdRev;              // Product Revision 
-  __IO uint32_t ProdSN;               // Product Serial Number 
-  __IO uint8_t  Reserved1;            // Reserved1 
-  __IO uint16_t ManufactDate;         // Manufacturing Date 
+    __IO uint8_t ManufacturerID; // ManufacturerID
+    __IO uint16_t OEM_AppliID;   // OEM/Application ID
+    __IO uint32_t ProdName1;     // Product Name part1
+    __IO uint8_t ProdName2;      // Product Name part2
+    __IO uint8_t ProdRev;        // Product Revision
+    __IO uint32_t ProdSN;        // Product Serial Number
+    __IO uint8_t Reserved1;      // Reserved1
+    __IO uint16_t ManufactDate;  // Manufacturing Date
 } SD_CID;
 
-
-#define SDIO_STD_CAPACITY_SD_CARD_V1_1             ((uint32_t)0x00000000)
-#define SDIO_STD_CAPACITY_SD_CARD_V2_0             ((uint32_t)0x00000001)
-#define SDIO_HIGH_CAPACITY_SD_CARD                 ((uint32_t)0x00000002)
-#define SDIO_MULTIMEDIA_CARD                       ((uint32_t)0x00000003)
-#define SDIO_SECURE_DIGITAL_IO_CARD                ((uint32_t)0x00000004)
-#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD            ((uint32_t)0x00000005)
-#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD          ((uint32_t)0x00000006)
-#define SDIO_HIGH_CAPACITY_MMC_CARD                ((uint32_t)0x00000007)
-
+#define SDIO_STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000)
+#define SDIO_STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001)
+#define SDIO_HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002)
+#define SDIO_MULTIMEDIA_CARD ((uint32_t)0x00000003)
+#define SDIO_SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004)
+#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005)
+#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006)
+#define SDIO_HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007)
 
 typedef struct
 {
-  SD_CSD SD_csd;
-  SD_CID SD_cid;
-  uint64_t CardCapacity;  // Card Capacity 
-  uint32_t CardBlockSize; // Card Block Size 
-  uint16_t RCA;
-  uint8_t CardType;
+    SD_CSD SD_csd;
+    SD_CID SD_cid;
+    uint64_t CardCapacity;  // Card Capacity
+    uint32_t CardBlockSize; // Card Block Size
+    uint16_t RCA;
+    uint8_t CardType;
 } SD_CardInfo;
 
-
 extern SD_CardInfo SD_cardInfo;
 
 uint32_t SDIO_Init(uint32_t freq);
@@ -133,11 +127,11 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b
 uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]);
 uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]);
 
-uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma);
+uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma);
 
-#define SDIO_SendCmd(cmd, arg, _resp_type, resp_data)                                      _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 0, 0, 0, 0)
-#define SDIO_SendCmdWithData(cmd, arg, _resp_type, resp_data, data_read, block_cnt)        _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 0)
-#define SDIO_SendCmdWithDataByDMA(cmd, arg, _resp_type, resp_data, data_read, block_cnt)   _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 1)
+#define SDIO_SendCmd(cmd, arg, resp_type, resp_data) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 0, 0, 0, 0)
+#define SDIO_SendCmdWithData(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 0)
+#define SDIO_SendCmdWithDataByDMA(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 1)
 
 void parseCID(uint32_t CID_Tab[4]);
 void parseCSD(uint32_t CID_Tab[4]);

+ 83 - 70
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ: SWM320_sdram.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄSDRAMÇý¶¯³ÌÐò
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî:
-* °æ±¾ÈÕÆÚ: V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼: 
+* 文件�称: SWM320_sdram.c
+* 功能说明:	SWM320�片机的SDRAM驱动程�
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项:
+* 版本日期: V1.1.0		2017年10月25日
+* �级记录: 
 *
 *
 *******************************************************************************************************************************************
@@ -22,82 +22,95 @@
 #include "SWM320_sdram.h"
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SDRAM_Init()
-* ¹¦ÄÜ˵Ã÷:	SDRAM¿ØÖÆÆ÷³õʼ»¯
-* Êä    Èë: SDRAM_InitStructure * initStruct    °üº¬ SDRAM ¿ØÖÆÆ÷Ïà¹ØÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SDRAM_Init()
+* 功能说明:	SDRAM控制器�始化
+* 输    入: SDRAM_InitStructure * initStruct    包� SDRAM 控制器相关设定值的结构体
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SDRAM_Init(SDRAM_InitStructure * initStruct)
+void SDRAM_Init(SDRAM_InitStructure *initStruct)
 {
-	uint32_t row_n;
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
-	
-	SYS->CLKDIV &= ~SYS_CLKDIV_SDRAM_Msk;
-	SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos);		//2·ÖƵ
-	
-	SDRAMC->CR0 = (2 << SDRAMC_CR0_BURSTLEN_Pos) |	//2 Burst LengthΪ4
-				  (initStruct->CASLatency << SDRAMC_CR0_CASDELAY_Pos);
-	
-	SDRAMC->CR1 = (initStruct->CellSize << SDRAMC_CR1_CELLSIZE_Pos) |
-				  (initStruct->CellWidth << SDRAMC_CR1_CELL32BIT_Pos) |
-				  (initStruct->CellBank << SDRAMC_CR1_BANK_Pos) |
-				  (0 << SDRAMC_CR1_32BIT_Pos) |
-				  (initStruct->TimeTMRD << SDRAMC_CR1_TMRD_Pos) |
-				  (initStruct->TimeTRRD << SDRAMC_CR1_TRRD_Pos) |
-				  (initStruct->TimeTRAS << SDRAMC_CR1_TRAS_Pos) |
-				  (initStruct->TimeTRC << SDRAMC_CR1_TRC_Pos) |
-				  (initStruct->TimeTRCD << SDRAMC_CR1_TRCD_Pos) |
-				  (initStruct->TimeTRP << SDRAMC_CR1_TRP_Pos);
-	
-	SDRAMC->LATCH = 0x02;
-	
-	switch(initStruct->CellSize)
-	{
-	case SDRAM_CELLSIZE_16Mb:  row_n = 11; break;
-	case SDRAM_CELLSIZE_64Mb:  row_n = 12; break;
-	case SDRAM_CELLSIZE_128Mb: row_n = 12; break;
-	case SDRAM_CELLSIZE_256Mb: row_n = 13; break;
-	default:                   row_n = 13; break;
-	}
-	
-	SDRAMC->REFRESH = (1 << SDRAMC_REFRESH_EN_Pos) |
-					  (((SystemCoreClock/2)/1000*64 / (1 << row_n)) << SDRAMC_REFRESH_RATE_Pos);
-	
-    while(SDRAMC->REFDONE == 0);
+    uint32_t row_n;
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
+
+    SYS->CLKDIV &= ~SYS_CLKDIV_SDRAM_Msk;
+    SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos); //2分频
+
+    SDRAMC->CR0 = (2 << SDRAMC_CR0_BURSTLEN_Pos) | //2 Burst Length为4
+                  (initStruct->CASLatency << SDRAMC_CR0_CASDELAY_Pos);
+
+    SDRAMC->CR1 = (initStruct->CellSize << SDRAMC_CR1_CELLSIZE_Pos) |
+                  (initStruct->CellWidth << SDRAMC_CR1_CELL32BIT_Pos) |
+                  (initStruct->CellBank << SDRAMC_CR1_BANK_Pos) |
+                  (0 << SDRAMC_CR1_32BIT_Pos) |
+                  (initStruct->TimeTMRD << SDRAMC_CR1_TMRD_Pos) |
+                  (initStruct->TimeTRRD << SDRAMC_CR1_TRRD_Pos) |
+                  (initStruct->TimeTRAS << SDRAMC_CR1_TRAS_Pos) |
+                  (initStruct->TimeTRC << SDRAMC_CR1_TRC_Pos) |
+                  (initStruct->TimeTRCD << SDRAMC_CR1_TRCD_Pos) |
+                  (initStruct->TimeTRP << SDRAMC_CR1_TRP_Pos);
+
+    SDRAMC->LATCH = 0x02;
+
+    switch (initStruct->CellSize)
+    {
+    case SDRAM_CELLSIZE_16Mb:
+        row_n = 11;
+        break;
+    case SDRAM_CELLSIZE_64Mb:
+        row_n = 12;
+        break;
+    case SDRAM_CELLSIZE_128Mb:
+        row_n = 12;
+        break;
+    case SDRAM_CELLSIZE_256Mb:
+        row_n = 13;
+        break;
+    default:
+        row_n = 13;
+        break;
+    }
+
+    SDRAMC->REFRESH = (1 << SDRAMC_REFRESH_EN_Pos) |
+                      (((SystemCoreClock / 2) / 1000 * 64 / (1 << row_n)) << SDRAMC_REFRESH_RATE_Pos);
+
+    while (SDRAMC->REFDONE == 0)
+        ;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SDRAM_Enable()
-* ¹¦ÄÜ˵Ã÷:	SDRAMʹÄÜ£¬Ê¹Äܺó¿É¶ÁдSDRAM
-* Êä    Èë: ÎÞ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SDRAM_Enable()
+* 功能说明:	SDRAM使能,使能��读写SDRAM
+* 输    入: 无
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
 void SDRAM_Enable(void)
 {
-	uint32_t i;
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
-	SDRAMC->REFRESH |= (1 << SDRAMC_REFRESH_EN_Pos);
-	
-	for(i = 0; i < 100; i++) __NOP();
+    uint32_t i;
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
+    SDRAMC->REFRESH |= (1 << SDRAMC_REFRESH_EN_Pos);
+
+    for (i = 0; i < 100; i++)
+        __NOP();
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SDRAM_Disable()
-* ¹¦ÄÜ˵Ã÷:	SDRAM½ûÄÜ£¬½ûÄܺóSDRAM¿ÅÁ£½øÈëµÍ¹¦ºÄģʽ¡¢²¢×ÔˢУ¬²»¿É¶Áд
-* Êä    Èë: ÎÞ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SDRAM_Disable()
+* 功能说明:	SDRAM�能,�能�SDRAM颗粒进入低功耗模��并自刷新,��读写
+* 输    入: 无
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
 void SDRAM_Disable(void)
 {
-	uint32_t i;
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
-	SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
-	
-	for(i = 0; i < 100; i++) __NOP();
+    uint32_t i;
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
+    SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
+
+    for (i = 0; i < 100; i++)
+        __NOP();
 }

+ 71 - 72
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h

@@ -1,80 +1,79 @@
 #ifndef __SWM320_SDRAM_H__
 #define __SWM320_SDRAM_H__
 
-typedef struct {	
-	uint8_t CellSize;			// SDRAM颗粒的容量,SDRAM_CELLSIZE_16Mb、SDRAM_CELLSIZE_64Mb、SDRAM_CELLSIZE_128Mb、SDRAM_CELLSIZE_256Mb
-	uint8_t CellBank;			// SDRAM颗粒有几个bank,SDRAM_CELLBANK_2、SDRAM_CELLBANK_4
-	uint8_t CellWidth;			// SDRAM颗粒的位宽,SDRAM_CELLWIDTH_16、SDRAM_CELLWIDTH_32
-	uint8_t CASLatency;			// 列地址到有效数据输出间隔,SDRAM_CASLATENCY_2、SDRAM_CASLATENCY_3
-	
-	uint8_t TimeTMRD;			// MRS to New Command
-	uint8_t TimeTRRD;			// Activate to activate on different banks
-	uint8_t TimeTRAS;			// Self refresh time,最小Self-refresh周期
-	uint8_t TimeTRC;			// Row cycle delay,Refresh命令到Activate命令间延时,也是两个连续Refresh命令间延时
-	uint8_t TimeTRCD;			// Row to column delay,行地址到列地址间延时,也即Activate命令到读写命令间延时
-	uint8_t TimeTRP;			// Row precharge delay,Precharge命令到另一个命令间延时
+typedef struct
+{
+    uint8_t CellSize;   // SDRAM棰楃矑鐨勫�閲忥紝SDRAM_CELLSIZE_16Mb銆丼DRAM_CELLSIZE_64Mb銆丼DRAM_CELLSIZE_128Mb銆丼DRAM_CELLSIZE_256Mb
+    uint8_t CellBank;   // SDRAM棰楃矑鏈夊嚑涓猙ank锛孲DRAM_CELLBANK_2銆丼DRAM_CELLBANK_4
+    uint8_t CellWidth;  // SDRAM棰楃矑鐨勪綅瀹斤紝SDRAM_CELLWIDTH_16銆丼DRAM_CELLWIDTH_32
+    uint8_t CASLatency; // 鍒楀湴鍧€鍒版湁鏁堟暟鎹�緭鍑洪棿闅旓紝SDRAM_CASLATENCY_2銆丼DRAM_CASLATENCY_3
+
+    uint8_t TimeTMRD; // MRS to New Command
+    uint8_t TimeTRRD; // Activate to activate on different banks
+    uint8_t TimeTRAS; // Self refresh time锛屾渶灏廠elf-refresh鍛ㄦ湡
+    uint8_t TimeTRC;  // Row cycle delay锛孯efresh鍛戒护鍒癆ctivate鍛戒护闂村欢鏃讹紝涔熸槸涓や釜杩炵画Refresh鍛戒护闂村欢鏃�
+    uint8_t TimeTRCD; // Row to column delay锛岃�鍦板潃鍒板垪鍦板潃闂村欢鏃讹紝涔熷嵆Activate鍛戒护鍒拌�鍐欏懡浠ら棿寤舵椂
+    uint8_t TimeTRP;  // Row precharge delay锛孭recharge鍛戒护鍒板彟涓€涓�懡浠ら棿寤舵椂
 } SDRAM_InitStructure;
 
-#define SDRAM_CELLSIZE_16Mb		3
-#define SDRAM_CELLSIZE_64Mb		0
-#define SDRAM_CELLSIZE_128Mb	1
-#define SDRAM_CELLSIZE_256Mb	2
-
-#define SDRAM_CELLBANK_2		0
-#define SDRAM_CELLBANK_4		1
-
-#define SDRAM_CELLWIDTH_16		0
-#define SDRAM_CELLWIDTH_32		1
-
-#define SDRAM_CASLATENCY_2		2
-#define SDRAM_CASLATENCY_3		3
-
-#define SDRAM_TMRD_3			3
-#define SDRAM_TMRD_4			4
-#define SDRAM_TMRD_5			5
-#define SDRAM_TMRD_6			6
-#define SDRAM_TMRD_7			7
-
-#define SDRAM_TRRD_2			2
-#define SDRAM_TRRD_3			3
-
-#define SDRAM_TRAS_2			2
-#define SDRAM_TRAS_3			3
-#define SDRAM_TRAS_4			4
-#define SDRAM_TRAS_5			5
-#define SDRAM_TRAS_6			6
-#define SDRAM_TRAS_7			7
-
-#define SDRAM_TRC_2				2
-#define SDRAM_TRC_3				3
-#define SDRAM_TRC_4				4
-#define SDRAM_TRC_5				5
-#define SDRAM_TRC_6				6
-#define SDRAM_TRC_7				7
-#define SDRAM_TRC_8				8
-#define SDRAM_TRC_9				9
-#define SDRAM_TRC_10			10
-#define SDRAM_TRC_11			11
-#define SDRAM_TRC_12			12
-#define SDRAM_TRC_13			13
-#define SDRAM_TRC_14			14
-#define SDRAM_TRC_15			15
-
-#define SDRAM_TRCD_3			3
-#define SDRAM_TRCD_4			4
-#define SDRAM_TRCD_5			5
-#define SDRAM_TRCD_6			6
-#define SDRAM_TRCD_7			7
-
-#define SDRAM_TRP_3				3
-#define SDRAM_TRP_4				4
-#define SDRAM_TRP_5				5
-#define SDRAM_TRP_6				6
-#define SDRAM_TRP_7				7
-
-
-
-void SDRAM_Init(SDRAM_InitStructure * initStruct);
+#define SDRAM_CELLSIZE_16Mb 3
+#define SDRAM_CELLSIZE_64Mb 0
+#define SDRAM_CELLSIZE_128Mb 1
+#define SDRAM_CELLSIZE_256Mb 2
+
+#define SDRAM_CELLBANK_2 0
+#define SDRAM_CELLBANK_4 1
+
+#define SDRAM_CELLWIDTH_16 0
+#define SDRAM_CELLWIDTH_32 1
+
+#define SDRAM_CASLATENCY_2 2
+#define SDRAM_CASLATENCY_3 3
+
+#define SDRAM_TMRD_3 3
+#define SDRAM_TMRD_4 4
+#define SDRAM_TMRD_5 5
+#define SDRAM_TMRD_6 6
+#define SDRAM_TMRD_7 7
+
+#define SDRAM_TRRD_2 2
+#define SDRAM_TRRD_3 3
+
+#define SDRAM_TRAS_2 2
+#define SDRAM_TRAS_3 3
+#define SDRAM_TRAS_4 4
+#define SDRAM_TRAS_5 5
+#define SDRAM_TRAS_6 6
+#define SDRAM_TRAS_7 7
+
+#define SDRAM_TRC_2 2
+#define SDRAM_TRC_3 3
+#define SDRAM_TRC_4 4
+#define SDRAM_TRC_5 5
+#define SDRAM_TRC_6 6
+#define SDRAM_TRC_7 7
+#define SDRAM_TRC_8 8
+#define SDRAM_TRC_9 9
+#define SDRAM_TRC_10 10
+#define SDRAM_TRC_11 11
+#define SDRAM_TRC_12 12
+#define SDRAM_TRC_13 13
+#define SDRAM_TRC_14 14
+#define SDRAM_TRC_15 15
+
+#define SDRAM_TRCD_3 3
+#define SDRAM_TRCD_4 4
+#define SDRAM_TRCD_5 5
+#define SDRAM_TRCD_6 6
+#define SDRAM_TRCD_7 7
+
+#define SDRAM_TRP_3 3
+#define SDRAM_TRP_4 4
+#define SDRAM_TRP_5 5
+#define SDRAM_TRP_6 6
+#define SDRAM_TRP_7 7
+
+void SDRAM_Init(SDRAM_InitStructure *initStruct);
 
 void SDRAM_Enable(void);
 void SDRAM_Disable(void);

+ 338 - 338
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ:	SWM320_spi.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄSPI¹¦ÄÜÇý¶¯¿â
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî:
-* °æ±¾ÈÕÆÚ:	V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼:  
+* 文件�称:	SWM320_spi.c
+* 功能说明:	SWM320�片机的SPI功能驱动库
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项:
+* 版本日期:	V1.1.0		2017年10月25日
+* �级记录:  
 *
 *
 *******************************************************************************************************************************************
@@ -21,523 +21,523 @@
 #include "SWM320.h"
 #include "SWM320_spi.h"
 
-
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_Init()
-* ¹¦ÄÜ˵Ã÷:	SPIͬ²½´®Ðнӿڳõʼ»¯£¬°üÀ¨Ö¡³¤¶ÈÉ趨¡¢Ê±ÐòÉ趨¡¢ËÙ¶ÈÉ趨¡¢ÖжÏÉ趨¡¢FIFO´¥·¢É趨
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-*			SPI_InitStructure * initStruct	°üº¬SPIÏà¹ØÉ趨ֵµÄ½á¹¹Ìå
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
-******************************************************************************************************************************************/
-void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
-{
-	switch((uint32_t)SPIx)
-	{
-	case ((uint32_t)SPI0):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos);
-		break;
+* 函数�称:	SPI_Init()
+* 功能说明:	SPI�步串行接��始化,包括帧长度设定�时�设定�速度设定�中断设定�FIFO触�设定
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+*			SPI_InitStructure * initStruct	包�SPI相关设定值的结构体
+* 输    出: 无
+* 注�事项: 无
+******************************************************************************************************************************************/
+void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStructure *initStruct)
+{
+    switch ((uint32_t)SPIx)
+    {
+    case ((uint32_t)SPI0):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos);
+        break;
+
+    case ((uint32_t)SPI1):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos); //与SPI0使用�一�时钟使能
+        break;
+    }
+
+    SPI_Close(SPIx); //一些关键寄存器�能在SPI关闭时设置
+
+    SPIx->CTRL &= ~(SPI_CTRL_FFS_Msk | SPI_CTRL_CPHA_Msk | SPI_CTRL_CPOL_Msk |
+                    SPI_CTRL_SIZE_Msk | SPI_CTRL_MSTR_Msk | SPI_CTRL_CLKDIV_Msk | SPI_CTRL_SSN_H_Msk);
+    SPIx->CTRL |= (initStruct->FrameFormat << SPI_CTRL_FFS_Pos) |
+                  (initStruct->SampleEdge << SPI_CTRL_CPHA_Pos) |
+                  (initStruct->IdleLevel << SPI_CTRL_CPOL_Pos) |
+                  ((initStruct->WordSize - 1) << SPI_CTRL_SIZE_Pos) |
+                  (initStruct->Master << SPI_CTRL_MSTR_Pos) |
+                  (initStruct->clkDiv << SPI_CTRL_CLKDIV_Pos) |
+                  (0 << SPI_CTRL_SSN_H_Pos);
 
-	case ((uint32_t)SPI1):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos);		//ÓëSPI0ʹÓÃͬһλʱÖÓʹÄÜ
-		break;
-	}
-	
-	SPI_Close(SPIx);	//һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚSPI¹Ø±ÕʱÉèÖÃ
-	
-	SPIx->CTRL &= ~(SPI_CTRL_FFS_Msk | SPI_CTRL_CPHA_Msk | SPI_CTRL_CPOL_Msk |
-				  SPI_CTRL_SIZE_Msk | SPI_CTRL_MSTR_Msk | SPI_CTRL_CLKDIV_Msk | SPI_CTRL_SSN_H_Msk);
-	SPIx->CTRL |= (initStruct->FrameFormat   << SPI_CTRL_FFS_Pos) |
-				(initStruct->SampleEdge    << SPI_CTRL_CPHA_Pos) |
-				(initStruct->IdleLevel     << SPI_CTRL_CPOL_Pos) |
-				((initStruct->WordSize-1)  << SPI_CTRL_SIZE_Pos) |
-				(initStruct->Master        << SPI_CTRL_MSTR_Pos) |
-				(initStruct->clkDiv        << SPI_CTRL_CLKDIV_Pos) |
-				(0                         << SPI_CTRL_SSN_H_Pos);
-	
-	SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos);	//Çå³ýÖжϱêÖ¾
-	SPIx->IE &= ~(SPI_IE_RFHF_Msk | SPI_IE_TFHF_Msk | SPI_IE_FTC_Msk);
-	SPIx->IE |= (initStruct->RXHFullIEn << SPI_IE_RFHF_Pos) |
-				(initStruct->TXEmptyIEn << SPI_IE_TFHF_Pos) |
-				(initStruct->TXCompleteIEn << SPI_IE_FTC_Pos);
-	
-	switch((uint32_t)SPIx)
-	{
-	case ((uint32_t)SPI0):		
-		if(initStruct->RXHFullIEn | initStruct->TXEmptyIEn | initStruct->TXCompleteIEn)
-		{
-			NVIC_EnableIRQ(SPI0_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(SPI0_IRQn);
-		}
-		break;
-	
-	case ((uint32_t)SPI1):		
-		if(initStruct->RXHFullIEn | initStruct->TXEmptyIEn | initStruct->TXCompleteIEn)
-		{
-			NVIC_EnableIRQ(SPI1_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(SPI1_IRQn);
-		}
-		break;
-	}
+    SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos); //清除中断标志
+    SPIx->IE &= ~(SPI_IE_RFHF_Msk | SPI_IE_TFHF_Msk | SPI_IE_FTC_Msk);
+    SPIx->IE |= (initStruct->RXHFullIEn << SPI_IE_RFHF_Pos) |
+                (initStruct->TXEmptyIEn << SPI_IE_TFHF_Pos) |
+                (initStruct->TXCompleteIEn << SPI_IE_FTC_Pos);
+
+    switch ((uint32_t)SPIx)
+    {
+    case ((uint32_t)SPI0):
+        if (initStruct->RXHFullIEn | initStruct->TXEmptyIEn | initStruct->TXCompleteIEn)
+        {
+            NVIC_EnableIRQ(SPI0_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(SPI0_IRQn);
+        }
+        break;
+
+    case ((uint32_t)SPI1):
+        if (initStruct->RXHFullIEn | initStruct->TXEmptyIEn | initStruct->TXCompleteIEn)
+        {
+            NVIC_EnableIRQ(SPI1_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(SPI1_IRQn);
+        }
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_Open()
-* ¹¦ÄÜ˵Ã÷:	SPI´ò¿ª£¬ÔÊÐíÊÕ·¢
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_Open()
+* 功能说明:	SPI打开,�许收�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_Open(SPI_TypeDef * SPIx)
+void SPI_Open(SPI_TypeDef *SPIx)
 {
-	SPIx->CTRL |= (0x01 << SPI_CTRL_EN_Pos);
+    SPIx->CTRL |= (0x01 << SPI_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_Close()
-* ¹¦ÄÜ˵Ã÷:	SPI¹Ø±Õ£¬½ûÖ¹ÊÕ·¢
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_Close()
+* 功能说明:	SPI关闭,�止收�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_Close(SPI_TypeDef * SPIx)
+void SPI_Close(SPI_TypeDef *SPIx)
 {
-	SPIx->CTRL &= ~SPI_CTRL_EN_Msk;
+    SPIx->CTRL &= ~SPI_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_Read()
-* ¹¦ÄÜ˵Ã÷:	¶Áȡһ¸öÊý¾Ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				¶ÁÈ¡µ½µÄÊý¾Ý
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_Read()
+* 功能说明:	读�一个数�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				读�到的数�
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_Read(SPI_TypeDef * SPIx)
+uint32_t SPI_Read(SPI_TypeDef *SPIx)
 {
-	return SPIx->DATA;
+    return SPIx->DATA;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_Write()
-* ¹¦ÄÜ˵Ã÷:	дÈëÒ»¸öÊý¾Ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-*			uint32_t				ҪдÈëµÄÊý¾Ý
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_Write()
+* 功能说明:	写入一个数�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+*			uint32_t				�写入的数�
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_Write(SPI_TypeDef * SPIx, uint32_t data)
+void SPI_Write(SPI_TypeDef *SPIx, uint32_t data)
 {
-	SPIx->DATA = data;
+    SPIx->DATA = data;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_WriteWithWait()
-* ¹¦ÄÜ˵Ã÷:	дÈëÒ»¸öÊý¾Ý²¢µÈ´ýÊý¾ÝÍêÈ«·¢ËͳöÈ¥
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1¡¢SPI1
-*			uint32_t				ҪдÈëµÄÊý¾Ý
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_WriteWithWait()
+* 功能说明:	写入一个数�并等待数�完全��出去
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1�SPI1
+*			uint32_t				�写入的数�
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data)
+void SPI_WriteWithWait(SPI_TypeDef *SPIx, uint32_t data)
 {
-	SPIx->STAT |= (1 << SPI_STAT_WTC_Pos);
-	
-	SPIx->DATA = data;
-	
-	while((SPIx->STAT & SPI_STAT_WTC_Msk) == 0);
+    SPIx->STAT |= (1 << SPI_STAT_WTC_Pos);
+
+    SPIx->DATA = data;
+
+    while ((SPIx->STAT & SPI_STAT_WTC_Msk) == 0)
+        ;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: SPI_ReadWrite()
-* ¹¦ÄÜ˵Ã÷: ·¢ËÍÒ»¸öÊý¾Ý£¬²¢·µ»Ø·¢Ë͹ý³ÌÖнÓÊÕµ½µÄ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-*			uint32_t data 			Òª·¢Ë͵ÄÊý¾Ý
-* Êä    ³ö: uint32_t				½ÓÊÕµ½µÄÊý¾Ý
-* ×¢ÒâÊÂÏî: ¶ÔÓÚͬһ¸öSPIÄ£¿é£¬´Ëº¯Êý²»Ó¦ÓëSPI_Write()»ì×ÅÓã¬ÒòΪSPI_Write()²»Çå³ýSPI_STAT_RFNE״̬
+* 函数�称: SPI_ReadWrite()
+* 功能说明: ��一个数�,并返回��过程中接收到的
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+*			uint32_t data 			���的数�
+* 输    出: uint32_t				接收到的数�
+* 注�事项: 对于�一个SPI模�,此函数�应与SPI_Write()混�用,因为SPI_Write()�清除SPI_STAT_RFNE状�
 ******************************************************************************************************************************************/
-uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data)
+uint32_t SPI_ReadWrite(SPI_TypeDef *SPIx, uint32_t data)
 {
-	SPIx->DATA = data;
-	while(!(SPIx->STAT & SPI_STAT_RFNE_Msk));
-	
-	return SPIx->DATA;
+    SPIx->DATA = data;
+    while (!(SPIx->STAT & SPI_STAT_RFNE_Msk))
+        ;
+
+    return SPIx->DATA;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_IsRXEmpty()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÊÇ·ñ¿Õ£¬Èç¹û²»¿ÕÔò¿ÉÒÔ¼ÌÐøSPI_Read()
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ½ÓÊÕFIFO¿Õ    0 ½ÓÊÕFIFO·Ç¿Õ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_IsRXEmpty()
+* 功能说明:	接收FIFO是�空,如果�空则�以继续SPI_Read()
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 接收FIFO空    0 接收FIFO�空
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx)
+uint32_t SPI_IsRXEmpty(SPI_TypeDef *SPIx)
 {
-	return (SPIx->STAT & SPI_STAT_RFNE_Msk) ? 0 : 1;
+    return (SPIx->STAT & SPI_STAT_RFNE_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_IsTXFull()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFOÊÇ·ñÂú£¬Èç¹û²»ÂúÔò¿ÉÒÔ¼ÌÐøSPI_Write()
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍFIFOÂú    0 ·¢ËÍFIFO²»Âú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_IsTXFull()
+* 功能说明:	��FIFO是�满,如果�满则�以继续SPI_Write()
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��FIFO满    0 ��FIFO�满
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx)
+uint32_t SPI_IsTXFull(SPI_TypeDef *SPIx)
 {
-	return (SPIx->STAT & SPI_STAT_TFNF_Msk) ? 0 : 1;
+    return (SPIx->STAT & SPI_STAT_TFNF_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_IsTXEmpty()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFOÊÇ·ñ¿Õ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍFIFO¿Õ    0 ·¢ËÍFIFO·Ç¿Õ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_IsTXEmpty()
+* 功能说明:	��FIFO是�空
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��FIFO空    0 ��FIFO�空
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx)
+uint32_t SPI_IsTXEmpty(SPI_TypeDef *SPIx)
 {
-	return (SPIx->STAT & SPI_STAT_TFE_Msk) ? 1 : 0;
+    return (SPIx->STAT & SPI_STAT_TFE_Msk) ? 1 : 0;
 }
 
-
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXHalfFullEn()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFO°ëÂúÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXHalfFullEn()
+* 功能说明:	接收FIFO�满中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx)
+void SPI_INTRXHalfFullEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_RFHF_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_RFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXHalfFullDis()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFO°ëÂúÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXHalfFullDis()
+* 功能说明:	接收FIFO�满中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx)
+void SPI_INTRXHalfFullDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_RFHF_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_RFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXHalfFullClr()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFO°ëÂúÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXHalfFullClr()
+* 功能说明:	接收FIFO�满中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx)
+void SPI_INTRXHalfFullClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_RFHF_Pos);
+    SPIx->IF = (1 << SPI_IF_RFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXHalfFullStat()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFO°ëÂúÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ½ÓÊÕFIFO´ïµ½°ëÂú    0 ½ÓÊÕFIFOδ´ïµ½°ëÂú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXHalfFullStat()
+* 功能说明:	接收FIFO�满中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 接收FIFO达到�满    0 接收FIFO未达到�满
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_RFHF_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_RFHF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXFullEn()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÂúÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXFullEn()
+* 功能说明:	接收FIFO满中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXFullEn(SPI_TypeDef * SPIx)
+void SPI_INTRXFullEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_RFF_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_RFF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXFullDis()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÂúÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXFullDis()
+* 功能说明:	接收FIFO满中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXFullDis(SPI_TypeDef * SPIx)
+void SPI_INTRXFullDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_RFF_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_RFF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXFullClr()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÂúÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXFullClr()
+* 功能说明:	接收FIFO满中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXFullClr(SPI_TypeDef * SPIx)
+void SPI_INTRXFullClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_RFF_Pos);
+    SPIx->IF = (1 << SPI_IF_RFF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXFullStat()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÂúÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ½ÓÊÕFIFOÂú    0 ½ÓÊÕFIFOδÂú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXFullStat()
+* 功能说明:	接收FIFO满中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 接收FIFO满    0 接收FIFO未满
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTRXFullStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_RFF_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_RFF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXOverflowEn()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÒç³öÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXOverflowEn()
+* 功能说明:	接收FIFO溢出中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx)
+void SPI_INTRXOverflowEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_RFOVF_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_RFOVF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXOverflowDis()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÒç³öÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXOverflowDis()
+* 功能说明:	接收FIFO溢出中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx)
+void SPI_INTRXOverflowDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_RFOVF_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_RFOVF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXOverflowClr()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÒç³öÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXOverflowClr()
+* 功能说明:	接收FIFO溢出中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx)
+void SPI_INTRXOverflowClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos);
+    SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTRXOverflowStat()
-* ¹¦ÄÜ˵Ã÷:	½ÓÊÕFIFOÒç³öÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ½ÓÊÕFIFOÒç³ö    0 ½ÓÊÕFIFOδÒç³ö
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTRXOverflowStat()
+* 功能说明:	接收FIFO溢出中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 接收FIFO溢出    0 接收FIFO未溢出
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTRXOverflowStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_RFOVF_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_RFOVF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXHalfFullEn()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO°ëÂúÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXHalfFullEn()
+* 功能说明:	��FIFO�满中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx)
+void SPI_INTTXHalfFullEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_TFHF_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_TFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXHalfFullDis()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO°ëÂúÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXHalfFullDis()
+* 功能说明:	��FIFO�满中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx)
+void SPI_INTTXHalfFullDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_TFHF_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_TFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXHalfFullClr()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO°ëÂúÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXHalfFullClr()
+* 功能说明:	��FIFO�满中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx)
+void SPI_INTTXHalfFullClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_TFHF_Pos);
+    SPIx->IF = (1 << SPI_IF_TFHF_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXHalfFullStat()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO°ëÂúÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍFIFO´ïµ½°ëÂú    0 ·¢ËÍFIFOδ´ïµ½°ëÂú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXHalfFullStat()
+* 功能说明:	��FIFO�满中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��FIFO达到�满    0 ��FIFO未达到�满
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_TFHF_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_TFHF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXEmptyEn()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXEmptyEn()
+* 功能说明:	��FIFO空中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx)
+void SPI_INTTXEmptyEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_TFE_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_TFE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXEmptyDis()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXEmptyDis()
+* 功能说明:	��FIFO空中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx)
+void SPI_INTTXEmptyDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_TFE_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_TFE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXEmptyClr()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXEmptyClr()
+* 功能说明:	��FIFO空中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx)
+void SPI_INTTXEmptyClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_TFE_Pos);
+    SPIx->IF = (1 << SPI_IF_TFE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXEmptyStat()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍFIFO¿Õ    0 ·¢ËÍFIFO·Ç¿Õ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXEmptyStat()
+* 功能说明:	��FIFO空中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��FIFO空    0 ��FIFO�空
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTTXEmptyStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_TFE_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_TFE_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXCompleteEn()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXCompleteEn()
+* 功能说明:	��FIFO空且��移�寄存器空中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx)
+void SPI_INTTXCompleteEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_FTC_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_FTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXCompleteDis()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXCompleteDis()
+* 功能说明:	��FIFO空且��移�寄存器空中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx)
+void SPI_INTTXCompleteDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_FTC_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_FTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXCompleteClr()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏ״̬Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXCompleteClr()
+* 功能说明:	��FIFO空且��移�寄存器空中断状�清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx)
+void SPI_INTTXCompleteClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_FTC_Pos);
+    SPIx->IF = (1 << SPI_IF_FTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXCompleteStat()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿Õ    0 ·¢ËÍFIFO»ò·¢ËÍÒÆÎ»¼Ä´æÆ÷·Ç¿Õ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXCompleteStat()
+* 功能说明:	��FIFO空且��移�寄存器空中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��FIFO空且��移�寄存器空    0 ��FIFO或��移�寄存器�空
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTTXCompleteStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_FTC_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_FTC_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXWordCompleteEn()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжÏʹÄÜ
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXWordCompleteEn()
+* 功能说明:	��FIFO字��完�中断使能
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx)
+void SPI_INTTXWordCompleteEn(SPI_TypeDef *SPIx)
 {
-	SPIx->IE |= (0x01 << SPI_IE_WTC_Pos);
+    SPIx->IE |= (0x01 << SPI_IE_WTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXWordCompleteDis()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжϽûÖ¹
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXWordCompleteDis()
+* 功能说明:	��FIFO字��完�中断�止
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx)
+void SPI_INTTXWordCompleteDis(SPI_TypeDef *SPIx)
 {
-	SPIx->IE &= ~(0x01 << SPI_IE_WTC_Pos);
+    SPIx->IE &= ~(0x01 << SPI_IE_WTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXWordCompleteClr()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжϱêÖ¾Çå³ý
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXWordCompleteClr()
+* 功能说明:	��FIFO字��完�中断标志清除
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx)
+void SPI_INTTXWordCompleteClr(SPI_TypeDef *SPIx)
 {
-	SPIx->IF = (1 << SPI_IF_WTC_Pos);
+    SPIx->IF = (1 << SPI_IF_WTC_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	SPI_INTTXWordCompleteStat()
-* ¹¦ÄÜ˵Ã÷:	·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжÏ״̬
-* Êä    Èë: SPI_TypeDef * SPIx		Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1
-* Êä    ³ö: uint32_t				1 ·¢ËÍÍê³ÉÖжÏÒÑ·¢Éú    0 ·¢ËÍÍê³ÉÖжÏδ·¢Éú
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	SPI_INTTXWordCompleteStat()
+* 功能说明:	��FIFO字��完�中断状�
+* 输    入: SPI_TypeDef * SPIx		指定�被设置的SPI,有效值包括SPI0�SPI1
+* 输    出: uint32_t				1 ��完�中断已�生    0 ��完�中断未�生
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef * SPIx)
+uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef *SPIx)
 {
-	return (SPIx->IF & SPI_IF_WTC_Msk) ? 1 : 0;
+    return (SPIx->IF & SPI_IF_WTC_Msk) ? 1 : 0;
 }

+ 73 - 76
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h

@@ -1,83 +1,80 @@
 #ifndef __SWM320_SPI_H__
 #define __SWM320_SPI_H__
 
-typedef struct {
-	uint8_t  FrameFormat;	//帧格式:SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI
-	uint8_t  SampleEdge;	//在SPI帧格式下,选择数据采样边沿:SPI_FIRST_EDGE、SPI_SECOND_EDGE
-	uint8_t  IdleLevel;		//在SPI帧格式下,选择空闲时(无数据传输时)时钟线的电平:SPI_LOW_LEVEL、SPI_HIGH_LEVEL
-	uint8_t  WordSize;		//字长度, 有效值4-16
-	uint8_t  Master;		//1 主机模式    0 从机模式
-	uint8_t  clkDiv;		//SPI_CLK = SYS_CLK / clkDiv,有效值:SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512
-	
-	uint8_t  RXHFullIEn;	//接收FIFO半满中断使能
-	uint8_t  TXEmptyIEn;	//发送FIFO  空中断使能
-	uint8_t  TXCompleteIEn;	//发送FIFO  空且发送移位寄存器空中断使能
+typedef struct
+{
+    uint8_t FrameFormat; //甯ф牸寮忥細SPI_FORMAT_SPI銆丼PI_FORMAT_TI_SSI
+    uint8_t SampleEdge;  //鍦⊿PI甯ф牸寮忎笅锛岄€夋嫨鏁版嵁閲囨牱杈规部锛歋PI_FIRST_EDGE銆丼PI_SECOND_EDGE
+    uint8_t IdleLevel;   //鍦⊿PI甯ф牸寮忎笅锛岄€夋嫨绌洪棽鏃讹紙鏃犳暟鎹�紶杈撴椂锛夋椂閽熺嚎鐨勭數骞筹細SPI_LOW_LEVEL銆丼PI_HIGH_LEVEL
+    uint8_t WordSize;    //瀛楅暱搴�, 鏈夋晥鍊�4-16
+    uint8_t Master;      //1 涓绘満妯″紡    0 浠庢満妯″紡
+    uint8_t clkDiv;      //SPI_CLK = SYS_CLK / clkDiv锛屾湁鏁堝€硷細SPI_CLKDIV_4銆丼PI_CLKDIV_8銆�... ... 銆丼PI_CLKDIV_512
+
+    uint8_t RXHFullIEn;    //鎺ユ敹FIFO鍗婃弧涓�柇浣胯兘
+    uint8_t TXEmptyIEn;    //鍙戦€丗IFO  绌轰腑鏂�娇鑳�
+    uint8_t TXCompleteIEn; //鍙戦€丗IFO  绌轰笖鍙戦€佺Щ浣嶅瘎瀛樺櫒绌轰腑鏂�娇鑳�
 } SPI_InitStructure;
 
-#define SPI_FORMAT_SPI			0		//Motorola SPI 格式
-#define SPI_FORMAT_TI_SSI		1		//TI SSI 格式
-
-#define SPI_FIRST_EDGE			0		//第一个时钟沿开始采样
-#define SPI_SECOND_EDGE			1		//第二个时钟沿开始采样
-
-#define SPI_LOW_LEVEL			0		//空闲时时钟线保持低电平
-#define SPI_HIGH_LEVEL			1		//空闲时时钟线保持高电平
-
-#define SPI_CLKDIV_4			0
-#define SPI_CLKDIV_8			1
-#define SPI_CLKDIV_16			2
-#define SPI_CLKDIV_32			3
-#define SPI_CLKDIV_64			4
-#define SPI_CLKDIV_128			5
-#define SPI_CLKDIV_256			6
-#define SPI_CLKDIV_512			7
-
-
-
-void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct);		//SPI初始化
-void SPI_Open(SPI_TypeDef * SPIx);										//SPI打开,允许收发
-void SPI_Close(SPI_TypeDef * SPIx);										//SPI关闭,禁止收发
-
-uint32_t SPI_Read(SPI_TypeDef * SPIx);
-void SPI_Write(SPI_TypeDef * SPIx, uint32_t data);
-void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data);
-uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data);
-
-uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx);				//接收FIFO是否空,如果不空则可以继续SPI_Read()
-uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx);				//发送FIFO是否满,如果不满则可以继续SPI_Write()
-uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx);				//发送FIFO是否空
-
-
-void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx);
-void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx);
-void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx);
-void SPI_INTRXFullEn(SPI_TypeDef * SPIx);
-void SPI_INTRXFullDis(SPI_TypeDef * SPIx);
-void SPI_INTRXFullClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx);
-void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx);
-void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx);
-void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx);
-
-void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx);
-void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx);
-void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx);
-void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx);
-void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx);
-void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx);
-void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx);
-void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx);
-void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx);
-
-void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx);
-void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx);
-void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx);
-uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef * SPIx);
-
+#define SPI_FORMAT_SPI 0    //Motorola SPI 鏍煎紡
+#define SPI_FORMAT_TI_SSI 1 //TI SSI 鏍煎紡
+
+#define SPI_FIRST_EDGE 0  //绗�竴涓�椂閽熸部寮€濮嬮噰鏍�
+#define SPI_SECOND_EDGE 1 //绗�簩涓�椂閽熸部寮€濮嬮噰鏍�
+
+#define SPI_LOW_LEVEL 0  //绌洪棽鏃舵椂閽熺嚎淇濇寔浣庣數骞�
+#define SPI_HIGH_LEVEL 1 //绌洪棽鏃舵椂閽熺嚎淇濇寔楂樼數骞�
+
+#define SPI_CLKDIV_4 0
+#define SPI_CLKDIV_8 1
+#define SPI_CLKDIV_16 2
+#define SPI_CLKDIV_32 3
+#define SPI_CLKDIV_64 4
+#define SPI_CLKDIV_128 5
+#define SPI_CLKDIV_256 6
+#define SPI_CLKDIV_512 7
+
+void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStructure *initStruct); //SPI鍒濆�鍖�
+void SPI_Open(SPI_TypeDef *SPIx);                                //SPI鎵撳紑锛屽厑璁告敹鍙�
+void SPI_Close(SPI_TypeDef *SPIx);                               //SPI鍏抽棴锛岀�姝㈡敹鍙�
+
+uint32_t SPI_Read(SPI_TypeDef *SPIx);
+void SPI_Write(SPI_TypeDef *SPIx, uint32_t data);
+void SPI_WriteWithWait(SPI_TypeDef *SPIx, uint32_t data);
+uint32_t SPI_ReadWrite(SPI_TypeDef *SPIx, uint32_t data);
+
+uint32_t SPI_IsRXEmpty(SPI_TypeDef *SPIx); //鎺ユ敹FIFO鏄�惁绌猴紝濡傛灉涓嶇┖鍒欏彲浠ョ户缁璖PI_Read()
+uint32_t SPI_IsTXFull(SPI_TypeDef *SPIx);  //鍙戦€丗IFO鏄�惁婊★紝濡傛灉涓嶆弧鍒欏彲浠ョ户缁璖PI_Write()
+uint32_t SPI_IsTXEmpty(SPI_TypeDef *SPIx); //鍙戦€丗IFO鏄�惁绌�
+
+void SPI_INTRXHalfFullEn(SPI_TypeDef *SPIx);
+void SPI_INTRXHalfFullDis(SPI_TypeDef *SPIx);
+void SPI_INTRXHalfFullClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef *SPIx);
+void SPI_INTRXFullEn(SPI_TypeDef *SPIx);
+void SPI_INTRXFullDis(SPI_TypeDef *SPIx);
+void SPI_INTRXFullClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTRXFullStat(SPI_TypeDef *SPIx);
+void SPI_INTRXOverflowEn(SPI_TypeDef *SPIx);
+void SPI_INTRXOverflowDis(SPI_TypeDef *SPIx);
+void SPI_INTRXOverflowClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTRXOverflowStat(SPI_TypeDef *SPIx);
+
+void SPI_INTTXHalfFullEn(SPI_TypeDef *SPIx);
+void SPI_INTTXHalfFullDis(SPI_TypeDef *SPIx);
+void SPI_INTTXHalfFullClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef *SPIx);
+void SPI_INTTXEmptyEn(SPI_TypeDef *SPIx);
+void SPI_INTTXEmptyDis(SPI_TypeDef *SPIx);
+void SPI_INTTXEmptyClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTTXEmptyStat(SPI_TypeDef *SPIx);
+void SPI_INTTXCompleteEn(SPI_TypeDef *SPIx);
+void SPI_INTTXCompleteDis(SPI_TypeDef *SPIx);
+void SPI_INTTXCompleteClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTTXCompleteStat(SPI_TypeDef *SPIx);
+
+void SPI_INTTXWordCompleteEn(SPI_TypeDef *SPIx);
+void SPI_INTTXWordCompleteDis(SPI_TypeDef *SPIx);
+void SPI_INTTXWordCompleteClr(SPI_TypeDef *SPIx);
+uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef *SPIx);
 
 #endif //__SWM320_SPI_H__

+ 35 - 32
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備: SWM320_sram.c
-* 髡夔佽隴:	SWM320等⑵儂腔SRAMЙ雄最唗
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐:
-* 唳掛゜ヽ: V1.1.0		2017爛10堎25゜
-* 汔撰暮翹: 
+* ��辣�滨妍: SWM320_sram.c
+* �蠘�霂湔�:	SWM320�閧��箇�SRAM撽勗𢆡蝔见�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★:
+* ��𧋦�交�: V1.1.0		2017撟�10��25��
+* ��漣霈啣�: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,33 +21,36 @@
 #include "SWM320.h"
 #include "SWM320_sram.h"
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	SRAM_Init()
-* 髡夔佽隴:	SRAM諷秶け場宎趙
-* 怀    ⻌: SRAM_InitStructure * initStruct    婦漪 SRAM 諷秶け眈壽扢隅硉腔賦凳极
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	SRAM_Init()
+* �蠘�霂湔�:	SRAM�批��典�憪见�
+* 颲�    ��: SRAM_InitStructure * initStruct    ��鉄 SRAM �批��函㮾�唾挽摰𡁜�潛�蝏𤘪�雿�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void SRAM_Init(SRAM_InitStructure * initStruct)
+void SRAM_Init(SRAM_InitStructure *initStruct)
 {
-	uint32_t i;
-	
-	// 饜离SRAMゴ剒猁芃陔狟SDRAM諷秶け
-	do {
-		SYS->CLKEN |=  (1 << SYS_CLKEN_SDRAM_Pos);
-		
-		while(SDRAMC->REFDONE == 0);
-		SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
-		
-		for(i = 0; i < 1000; i++) __NOP();
-		SYS->CLKEN &= ~(1 << SYS_CLKEN_SDRAM_Pos);
-	} while(0);
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_RAMC_Pos);
-	for(i = 0; i < 10; i++) __NOP();
-	
-	SRAMC->CR = (initStruct->ClkDiv << SRAMC_CR_RWTIME_Pos) |
-				(initStruct->DataWidth << SRAMC_CR_BYTEIF_Pos) |
-			    (0 << SRAMC_CR_HBLBDIS_Pos);	// 妏夔趼誹﹜圉趼溼恀
+    uint32_t i;
+
+    // �滨蔭SRAM�漤�閬���唬�SDRAM�批���
+    do
+    {
+        SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
+
+        while (SDRAMC->REFDONE == 0)
+            ;
+        SDRAMC->REFRESH &= ~(1 << SDRAMC_REFRESH_EN_Pos);
+
+        for (i = 0; i < 1000; i++)
+            __NOP();
+        SYS->CLKEN &= ~(1 << SYS_CLKEN_SDRAM_Pos);
+    } while (0);
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_RAMC_Pos);
+    for (i = 0; i < 10; i++)
+        __NOP();
+
+    SRAMC->CR = (initStruct->ClkDiv << SRAMC_CR_RWTIME_Pos) |
+                (initStruct->DataWidth << SRAMC_CR_BYTEIF_Pos) |
+                (0 << SRAMC_CR_HBLBDIS_Pos); // 雿輯�摮𡑒����摮𡑒挪��
 }

+ 22 - 24
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h

@@ -1,31 +1,29 @@
 #ifndef __SWM320_SRAM_H__
 #define __SWM320_SRAM_H__
 
-typedef struct {
-	uint8_t ClkDiv;				//SRAM_CLKDIV_5...SRAM_CLKDIV_16,根据SRAM芯片所能跑的最高频率选择合适分频
-	uint8_t DataWidth;			//SRAM_DATAWIDTH_8、SRAM_DATAWIDTH_16
+typedef struct
+{
+    uint8_t ClkDiv;    //SRAM_CLKDIV_5...SRAM_CLKDIV_16锛屾牴鎹甋RAM鑺�墖鎵€鑳借窇鐨勬渶楂橀�鐜囬€夋嫨鍚堥€傚垎棰�
+    uint8_t DataWidth; //SRAM_DATAWIDTH_8銆丼RAM_DATAWIDTH_16
 } SRAM_InitStructure;
 
-
-#define SRAM_CLKDIV_4	3
-#define SRAM_CLKDIV_5	4
-#define SRAM_CLKDIV_6	5
-#define SRAM_CLKDIV_7	6
-#define SRAM_CLKDIV_8	7
-#define SRAM_CLKDIV_9	8
-#define SRAM_CLKDIV_10	9
-#define SRAM_CLKDIV_11	10
-#define SRAM_CLKDIV_12	11
-#define SRAM_CLKDIV_13	12
-#define SRAM_CLKDIV_14	13
-#define SRAM_CLKDIV_15	14
-#define SRAM_CLKDIV_16	15
-
-#define SRAM_DATAWIDTH_8	1
-#define SRAM_DATAWIDTH_16	0
-
-
-void SRAM_Init(SRAM_InitStructure * initStruct);
-
+#define SRAM_CLKDIV_4 3
+#define SRAM_CLKDIV_5 4
+#define SRAM_CLKDIV_6 5
+#define SRAM_CLKDIV_7 6
+#define SRAM_CLKDIV_8 7
+#define SRAM_CLKDIV_9 8
+#define SRAM_CLKDIV_10 9
+#define SRAM_CLKDIV_11 10
+#define SRAM_CLKDIV_12 11
+#define SRAM_CLKDIV_13 12
+#define SRAM_CLKDIV_14 13
+#define SRAM_CLKDIV_15 14
+#define SRAM_CLKDIV_16 15
+
+#define SRAM_DATAWIDTH_8 1
+#define SRAM_DATAWIDTH_16 0
+
+void SRAM_Init(SRAM_InitStructure *initStruct);
 
 #endif //__SWM320_SRAM_H__

+ 349 - 344
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* ÎļþÃû³Æ: SWM320_timr.c
-* ¹¦ÄÜ˵Ã÷:	SWM320µ¥Æ¬»úµÄ¼ÆÊýÆ÷/¶¨Ê±Æ÷¹¦ÄÜÇý¶¯¿â
-* ¼¼ÊõÖ§³Ö:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* ×¢ÒâÊÂÏî:
-* °æ±¾ÈÕÆÚ:	V1.1.0		2017Äê10ÔÂ25ÈÕ
-* Éý¼¶¼Ç¼: 
+* 文件�称: SWM320_timr.c
+* 功能说明:	SWM320�片机的计数器/定时器功能驱动库
+* 技术支�:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 注�事项:
+* 版本日期:	V1.1.0		2017年10月25日
+* �级记录: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,416 +21,421 @@
 #include "SWM320.h"
 #include "SWM320_timr.h"
 
-
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: TIMR_Init()
-* ¹¦ÄÜ˵Ã÷:	TIMR¶¨Ê±Æ÷/¼ÆÊýÆ÷³õʼ»¯
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬ÓÐЧֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-*			uint32_t mode			TIMR_MODE_TIMER ¶¨Ê±Æ÷ģʽ    TIMR_MODE_COUNTER ¼ÆÊýÆ÷ģʽ
-*			uint32_t period			¶¨Ê±/¼ÆÊýÖÜÆÚ
-*			uint32_t int_en			ÖжÏʹÄÜ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: TIMR_Init()
+* 功能说明:	TIMR定时器/计数器�始化
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,有效值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+*			uint32_t mode			TIMR_MODE_TIMER 定时器模�    TIMR_MODE_COUNTER 计数器模�
+*			uint32_t period			定时/计数周期
+*			uint32_t int_en			中断使能
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en)
+void TIMR_Init(TIMR_TypeDef *TIMRx, uint32_t mode, uint32_t period, uint32_t int_en)
 {
-	SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
-	
-	TIMR_Stop(TIMRx);	//һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚ¶¨Ê±Æ÷ֹͣʱÉèÖÃ
-	
-	TIMRx->CTRL &= ~TIMR_CTRL_CLKSRC_Msk;
-	TIMRx->CTRL |= mode << TIMR_CTRL_CLKSRC_Pos;
-	
-	TIMRx->LDVAL = period;
-	
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos);		//ʹÄÜÖжÏǰÇå³ýÖжϱêÖ¾
-		TIMRG->IE &= ~TIMRG_IE_TIMR0_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR0_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR0_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR1_Pos);
-		TIMRG->IE &= ~TIMRG_IE_TIMR1_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR1_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR1_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR2_Pos);
-		TIMRG->IE &= ~TIMRG_IE_TIMR2_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR2_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR2_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR3_Pos);
-		TIMRG->IE &= ~TIMRG_IE_TIMR3_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR3_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR3_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR4_Pos);
-		TIMRG->IE &= ~TIMRG_IE_TIMR4_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR4_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR4_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->IF = (1 << TIMRG_IF_TIMR5_Pos);
-		TIMRG->IE &= ~TIMRG_IE_TIMR5_Msk;
-		TIMRG->IE |= (int_en << TIMRG_IE_TIMR5_Pos);
-	
-		if(int_en) NVIC_EnableIRQ(TIMR5_IRQn);
-		break;
-	}
+    SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
+
+    TIMR_Stop(TIMRx); //一些关键寄存器�能在定时器�止时设置
+
+    TIMRx->CTRL &= ~TIMR_CTRL_CLKSRC_Msk;
+    TIMRx->CTRL |= mode << TIMR_CTRL_CLKSRC_Pos;
+
+    TIMRx->LDVAL = period;
+
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos); //使能中断�清除中断标志
+        TIMRG->IE &= ~TIMRG_IE_TIMR0_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR0_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR0_IRQn);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR1_Pos);
+        TIMRG->IE &= ~TIMRG_IE_TIMR1_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR1_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR1_IRQn);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR2_Pos);
+        TIMRG->IE &= ~TIMRG_IE_TIMR2_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR2_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR2_IRQn);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR3_Pos);
+        TIMRG->IE &= ~TIMRG_IE_TIMR3_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR3_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR3_IRQn);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR4_Pos);
+        TIMRG->IE &= ~TIMRG_IE_TIMR4_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR4_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR4_IRQn);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->IF = (1 << TIMRG_IF_TIMR5_Pos);
+        TIMRG->IE &= ~TIMRG_IE_TIMR5_Msk;
+        TIMRG->IE |= (int_en << TIMRG_IE_TIMR5_Pos);
+
+        if (int_en)
+            NVIC_EnableIRQ(TIMR5_IRQn);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_Start()
-* ¹¦ÄÜ˵Ã÷:	Æô¶¯¶¨Ê±Æ÷£¬´Ó³õʼֵ¿ªÊ¼¼ÆÊ±/¼ÆÊý
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_Start()
+* 功能说明:	�动定时器,从�始值开始计时/计数
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Start(TIMR_TypeDef * TIMRx)
+void TIMR_Start(TIMR_TypeDef *TIMRx)
 {
-	TIMRx->CTRL |= TIMR_CTRL_EN_Msk;
+    TIMRx->CTRL |= TIMR_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_Stop()
-* ¹¦ÄÜ˵Ã÷:	Í£Ö¹¶¨Ê±Æ÷
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_Stop()
+* 功能说明:	�止定时器
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Stop(TIMR_TypeDef * TIMRx)
+void TIMR_Stop(TIMR_TypeDef *TIMRx)
 {
-	TIMRx->CTRL &= ~TIMR_CTRL_EN_Msk;
+    TIMRx->CTRL &= ~TIMR_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_Halt()
-* ¹¦ÄÜ˵Ã÷:	ÔÝÍ£¶¨Ê±Æ÷£¬¼ÆÊýÖµ±£³Ö²»±ä
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_Halt()
+* 功能说明:	暂�定时器,计数值����
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Halt(TIMR_TypeDef * TIMRx)
+void TIMR_Halt(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR0_Pos);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR1_Pos);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR2_Pos);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR3_Pos);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR4_Pos);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR5_Pos);
-		break;
-	}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR0_Pos);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR1_Pos);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR2_Pos);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR3_Pos);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR4_Pos);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->HALT |= (0x01 << TIMRG_HALT_TIMR5_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_Resume()
-* ¹¦ÄÜ˵Ã÷:	»Ö¸´¶¨Ê±Æ÷£¬´ÓÔÝÍ£´¦¼ÌÐø¼ÆÊý
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_Resume()
+* 功能说明:	��定时器,从暂�处继续计数
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Resume(TIMR_TypeDef * TIMRx)
+void TIMR_Resume(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR0_Pos);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR1_Pos);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR2_Pos);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR3_Pos);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR4_Pos);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR5_Pos);
-		break;
-	}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR0_Pos);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR1_Pos);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR2_Pos);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR3_Pos);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR4_Pos);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->HALT &= ~(0x01 << TIMRG_HALT_TIMR5_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: TIMR_SetPeriod()
-* ¹¦ÄÜ˵Ã÷:	ÉèÖö¨Ê±/¼ÆÊýÖÜÆÚ
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-*			uint32_t period			¶¨Ê±/¼ÆÊýÖÜÆÚ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: TIMR_SetPeriod()
+* 功能说明:	设置定时/计数周期
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+*			uint32_t period			定时/计数周期
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period)
+void TIMR_SetPeriod(TIMR_TypeDef *TIMRx, uint32_t period)
 {
-	TIMRx->LDVAL = period;
+    TIMRx->LDVAL = period;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: TIMR_GetPeriod()
-* ¹¦ÄÜ˵Ã÷:	»ñÈ¡¶¨Ê±/¼ÆÊýÖÜÆÚ
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: uint32_t				µ±Ç°¶¨Ê±/¼ÆÊýÖÜÆÚ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: TIMR_GetPeriod()
+* 功能说明:	获�定时/计数周期
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: uint32_t				当�定时/计数周期
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx)
+uint32_t TIMR_GetPeriod(TIMR_TypeDef *TIMRx)
 {
-	return TIMRx->LDVAL; 
+    return TIMRx->LDVAL;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_GetCurValue()
-* ¹¦ÄÜ˵Ã÷:	»ñÈ¡µ±Ç°¼ÆÊýÖµ
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: uint32_t				µ±Ç°¼ÆÊýÖµ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_GetCurValue()
+* 功能说明:	获�当�计数值
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: uint32_t				当�计数值
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx)
+uint32_t TIMR_GetCurValue(TIMR_TypeDef *TIMRx)
 {
-	return TIMRx->CVAL;
+    return TIMRx->CVAL;
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_INTEn()
-* ¹¦ÄÜ˵Ã÷:	ʹÄÜÖжÏ
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_INTEn()
+* 功能说明:	使能中断
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_INTEn(TIMR_TypeDef * TIMRx)
+void TIMR_INTEn(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR0_Pos);
-		NVIC_EnableIRQ(TIMR0_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR1_Pos);
-		NVIC_EnableIRQ(TIMR1_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR2_Pos);
-		NVIC_EnableIRQ(TIMR2_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR3_Pos);
-		NVIC_EnableIRQ(TIMR3_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR4_Pos);
-		NVIC_EnableIRQ(TIMR4_IRQn);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->IE |= (0x01 << TIMRG_IE_TIMR5_Pos);
-		NVIC_EnableIRQ(TIMR5_IRQn);
-		break;
-	}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR0_Pos);
+        NVIC_EnableIRQ(TIMR0_IRQn);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR1_Pos);
+        NVIC_EnableIRQ(TIMR1_IRQn);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR2_Pos);
+        NVIC_EnableIRQ(TIMR2_IRQn);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR3_Pos);
+        NVIC_EnableIRQ(TIMR3_IRQn);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR4_Pos);
+        NVIC_EnableIRQ(TIMR4_IRQn);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->IE |= (0x01 << TIMRG_IE_TIMR5_Pos);
+        NVIC_EnableIRQ(TIMR5_IRQn);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: TIMR_INTDis()
-* ¹¦ÄÜ˵Ã÷:	½ûÄÜÖжÏ
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: TIMR_INTDis()
+* 功能说明:	�能中断
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_INTDis(TIMR_TypeDef * TIMRx)
+void TIMR_INTDis(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR0_Pos);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR1_Pos);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR2_Pos);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR3_Pos);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR4_Pos);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR5_Pos);
-		break;
-	}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR0_Pos);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR1_Pos);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR2_Pos);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR3_Pos);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR4_Pos);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->IE &= ~(0x01 << TIMRG_IE_TIMR5_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ:	TIMR_INTClr()
-* ¹¦ÄÜ˵Ã÷:	Çå³ýÖжϱêÖ¾
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称:	TIMR_INTClr()
+* 功能说明:	清除中断标志
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
-void TIMR_INTClr(TIMR_TypeDef * TIMRx)
+void TIMR_INTClr(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR0_Pos);
-		break;
-	
-	case ((uint32_t)TIMR1):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR1_Pos);
-		break;
-	
-	case ((uint32_t)TIMR2):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR2_Pos);
-		break;
-	
-	case ((uint32_t)TIMR3):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR3_Pos);
-		break;
-	
-	case ((uint32_t)TIMR4):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR4_Pos);
-		break;
-	
-	case ((uint32_t)TIMR5):
-		TIMRG->IF = (0x01 << TIMRG_IF_TIMR5_Pos);
-		break;
-	}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR0_Pos);
+        break;
+
+    case ((uint32_t)TIMR1):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR1_Pos);
+        break;
+
+    case ((uint32_t)TIMR2):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR2_Pos);
+        break;
+
+    case ((uint32_t)TIMR3):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR3_Pos);
+        break;
+
+    case ((uint32_t)TIMR4):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR4_Pos);
+        break;
+
+    case ((uint32_t)TIMR5):
+        TIMRG->IF = (0x01 << TIMRG_IF_TIMR5_Pos);
+        break;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: TIMR_INTStat()
-* ¹¦ÄÜ˵Ã÷:	»ñÈ¡ÖжÏ״̬
-* Êä    Èë: TIMR_TypeDef * TIMRx	Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5
-* Êä    ³ö: uint32_t 				0 TIMRxδ²úÉúÖÐ¶Ï    1 TIMRx²úÉúÁËÖжÏ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: TIMR_INTStat()
+* 功能说明:	获�中断状�
+* 输    入: TIMR_TypeDef * TIMRx	指定�被设置的定时器,��值包括TIMR0�TIMR1�TIMR2�TIMR3�TIMR4�TIMR5
+* 输    出: uint32_t 				0 TIMRx未产生中断    1 TIMRx产生了中断
+* 注�事项: 无
 ******************************************************************************************************************************************/
-uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx)
+uint32_t TIMR_INTStat(TIMR_TypeDef *TIMRx)
 {
-	switch((uint32_t)TIMRx)
-	{
-	case ((uint32_t)TIMR0):
-		return (TIMRG->IF & TIMRG_IF_TIMR0_Msk) ? 1 : 0;
-	
-	case ((uint32_t)TIMR1):
-		return (TIMRG->IF & TIMRG_IF_TIMR1_Msk) ? 1 : 0;
-	
-	case ((uint32_t)TIMR2):
-		return (TIMRG->IF & TIMRG_IF_TIMR2_Msk) ? 1 : 0;
-	
-	case ((uint32_t)TIMR3):
-		return (TIMRG->IF & TIMRG_IF_TIMR3_Msk) ? 1 : 0;
-	
-	case ((uint32_t)TIMR4):
-		return (TIMRG->IF & TIMRG_IF_TIMR4_Msk) ? 1 : 0;
-	
-	case ((uint32_t)TIMR5):
-		return (TIMRG->IF & TIMRG_IF_TIMR5_Msk) ? 1 : 0;
-	}
-	
-	return 0;
-}
+    switch ((uint32_t)TIMRx)
+    {
+    case ((uint32_t)TIMR0):
+        return (TIMRG->IF & TIMRG_IF_TIMR0_Msk) ? 1 : 0;
+
+    case ((uint32_t)TIMR1):
+        return (TIMRG->IF & TIMRG_IF_TIMR1_Msk) ? 1 : 0;
+
+    case ((uint32_t)TIMR2):
+        return (TIMRG->IF & TIMRG_IF_TIMR2_Msk) ? 1 : 0;
+
+    case ((uint32_t)TIMR3):
+        return (TIMRG->IF & TIMRG_IF_TIMR3_Msk) ? 1 : 0;
 
+    case ((uint32_t)TIMR4):
+        return (TIMRG->IF & TIMRG_IF_TIMR4_Msk) ? 1 : 0;
+
+    case ((uint32_t)TIMR5):
+        return (TIMRG->IF & TIMRG_IF_TIMR5_Msk) ? 1 : 0;
+    }
+
+    return 0;
+}
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: Pulse_Init()
-* ¹¦ÄÜ˵Ã÷:	Âö¿í²âÁ¿¹¦Äܳõʼ»¯
-* Êä    Èë: uint32_t pulse			PULSE_LOW ²âÁ¿µÍÂö³å¿í¶È   PULSE_HIGH ²âÁ¿¸ßÂö³å¿í¶È
-*			uint32_t int_en			ÊÇ·ñʹÄÜÂö³å²âÁ¿Íê³ÉÖжÏ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: Pulse_Init()
+* 功能说明:	脉宽测�功能�始化
+* 输    入: uint32_t pulse			PULSE_LOW 测�低脉冲宽度   PULSE_HIGH 测�高脉冲宽度
+*			uint32_t int_en			是�使能脉冲测�完�中断
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
 void Pulse_Init(uint32_t pulse, uint32_t int_en)
-{	
-	SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
-	
-	TIMRG->PCTRL = (0     << TIMRG_PCTRL_CLKSRC_Pos) |		// ϵͳʱÖÓ×÷ΪʱÖÓÔ´
-				   (pulse << TIMRG_PCTRL_HIGH_Pos)   |
-				   (0     << TIMRG_PCTRL_EN_Pos);
-	
-	TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos);		//ʹÄܲÅÄܲéѯÖжϱêÖ¾
-	
-	if(int_en)  NVIC_EnableIRQ(PULSE_IRQn);
+{
+    SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
+
+    TIMRG->PCTRL = (0 << TIMRG_PCTRL_CLKSRC_Pos) | // 系统时钟作为时钟�
+                   (pulse << TIMRG_PCTRL_HIGH_Pos) |
+                   (0 << TIMRG_PCTRL_EN_Pos);
+
+    TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos); //使能�能查询中断标志
+
+    if (int_en)
+        NVIC_EnableIRQ(PULSE_IRQn);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: Pulse_Start()
-* ¹¦ÄÜ˵Ã÷:	Âö¿í²âÁ¿¹¦ÄÜÆô¶¯£¬²âÁ¿µ½Âö¿íºó»á×Ô¶¯¹Ø±Õ²âÁ¿¹¦ÄÜ
-* Êä    Èë: ÎÞ
-* Êä    ³ö: ÎÞ
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: Pulse_Start()
+* 功能说明:	脉宽测�功能�动,测�到脉宽�会自动关闭测�功能
+* 输    入: 无
+* 输    出: 无
+* 注�事项: 无
 ******************************************************************************************************************************************/
 void Pulse_Start(void)
-{	
-	TIMRG->PCTRL |= (1 << TIMRG_PCTRL_EN_Pos);
+{
+    TIMRG->PCTRL |= (1 << TIMRG_PCTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* º¯ÊýÃû³Æ: Pulse_Done()
-* ¹¦ÄÜ˵Ã÷:	Âö¿í²âÁ¿ÊÇ·ñÍê³É
-* Êä    Èë: ÎÞ
-* Êä    ³ö: uint32_t				1 ²âÁ¿ÒÑÍê³É    0 ²âÁ¿Î´Íê³É
-* ×¢ÒâÊÂÏî: ÎÞ
+* 函数�称: Pulse_Done()
+* 功能说明:	脉宽测�是�完�
+* 输    入: 无
+* 输    出: uint32_t				1 测�已完�    0 测�未完�
+* 注�事项: 无
 ******************************************************************************************************************************************/
 uint32_t Pulse_Done(void)
 {
-	if(TIMRG->IF & TIMRG_IF_PULSE_Msk)
-	{
-		TIMRG->IF = TIMRG_IF_PULSE_Msk;		// Çå³ýÖжϱêÖ¾
-		
-		return 1;
-	}
-	else
-	{
-		return 0;
-	}
+    if (TIMRG->IF & TIMRG_IF_PULSE_Msk)
+    {
+        TIMRG->IF = TIMRG_IF_PULSE_Msk; // 清除中断标志
+
+        return 1;
+    }
+    else
+    {
+        return 0;
+    }
 }

+ 16 - 19
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h

@@ -1,32 +1,29 @@
 #ifndef __SWM320_TIMR_H__
 #define __SWM320_TIMR_H__
 
-#define TIMR_MODE_TIMER		0
-#define TIMR_MODE_COUNTER	1
+#define TIMR_MODE_TIMER 0
+#define TIMR_MODE_COUNTER 1
 
-void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en);	//定时器/计数器初始化
-void TIMR_Start(TIMR_TypeDef * TIMRx);							//启动定时器,从初始值开始计时/计数
-void TIMR_Stop(TIMR_TypeDef * TIMRx);							//停止定时器
-void TIMR_Halt(TIMR_TypeDef * TIMRx);							//暂停定时器,计数值保持不变
-void TIMR_Resume(TIMR_TypeDef * TIMRx);							//恢复定时器,从暂停处继续计数
+void TIMR_Init(TIMR_TypeDef *TIMRx, uint32_t mode, uint32_t period, uint32_t int_en); //瀹氭椂鍣�/璁℃暟鍣ㄥ垵濮嬪寲
+void TIMR_Start(TIMR_TypeDef *TIMRx);                                                 //鍚�姩瀹氭椂鍣�紝浠庡垵濮嬪€煎紑濮嬭�鏃�/璁℃暟
+void TIMR_Stop(TIMR_TypeDef *TIMRx);                                                  //鍋滄�瀹氭椂鍣�
+void TIMR_Halt(TIMR_TypeDef *TIMRx);                                                  //鏆傚仠瀹氭椂鍣�紝璁℃暟鍊间繚鎸佷笉鍙�
+void TIMR_Resume(TIMR_TypeDef *TIMRx);                                                //鎭㈠�瀹氭椂鍣�紝浠庢殏鍋滃�缁х画璁℃暟
 
-void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period);		//设置定时/计数周期
-uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx);					//获取定时/计数周期
-uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx);				//获取当前计数值
+void TIMR_SetPeriod(TIMR_TypeDef *TIMRx, uint32_t period); //璁剧疆瀹氭椂/璁℃暟鍛ㄦ湡
+uint32_t TIMR_GetPeriod(TIMR_TypeDef *TIMRx);              //鑾峰彇瀹氭椂/璁℃暟鍛ㄦ湡
+uint32_t TIMR_GetCurValue(TIMR_TypeDef *TIMRx);            //鑾峰彇褰撳墠璁℃暟鍊�
 
-void TIMR_INTEn(TIMR_TypeDef * TIMRx);							//使能中断
-void TIMR_INTDis(TIMR_TypeDef * TIMRx);							//禁能中断
-void TIMR_INTClr(TIMR_TypeDef * TIMRx);							//清除中断标志
-uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx);					//获取中断状态
+void TIMR_INTEn(TIMR_TypeDef *TIMRx);       //浣胯兘涓�柇
+void TIMR_INTDis(TIMR_TypeDef *TIMRx);      //绂佽兘涓�柇
+void TIMR_INTClr(TIMR_TypeDef *TIMRx);      //娓呴櫎涓�柇鏍囧織
+uint32_t TIMR_INTStat(TIMR_TypeDef *TIMRx); //鑾峰彇涓�柇鐘舵€�
 
-
-
-#define PULSE_LOW	 0
-#define PULSE_HIGH	 1
+#define PULSE_LOW 0
+#define PULSE_HIGH 1
 
 void Pulse_Init(uint32_t pulse, uint32_t int_en);
 void Pulse_Start(void);
 uint32_t Pulse_Done(void);
 
-
 #endif //__SWM320_TIMR_H__

+ 393 - 379
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備:	SWM320_uart.c
-* 髡夔佽隴:	SWM320等⑵儂腔UART揹諳髡夔Й雄踱
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐: 羶衄晤迡LIN髡夔眈壽腔滲杅
-* 唳掛゜ヽ:	V1.1.0		2017爛10堎25゜
-* 汔撰暮翹: 
+* ��辣�滨妍:	SWM320_uart.c
+* �蠘�霂湔�:	SWM320�閧��箇�UART銝脣藁�蠘�撽勗𢆡摨�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★: 瘝⊥�蝻硋�LIN�蠘��詨���遆��
+* ��𧋦�交�:	V1.1.0		2017撟�10��25��
+* ��漣霈啣�: 
 *
 *
 *******************************************************************************************************************************************
@@ -21,533 +21,547 @@
 #include "SWM320.h"
 #include "SWM320_uart.h"
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_Init()
-* 髡夔佽隴:	UART揹諳場宎趙
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			UART_InitStructure * initStruct    婦漪UART揹諳眈壽扢隅硉腔賦凳极
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
-******************************************************************************************************************************************/
-void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
-{	
-	switch((uint32_t)UARTx)
-	{
-	case ((uint32_t)UART0):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_UART0_Pos);
-		break;
-	
-	case ((uint32_t)UART1):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_UART1_Pos);
-		break;
-	
-	case ((uint32_t)UART2):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_UART2_Pos);
-		break;
-	
-	case ((uint32_t)UART3):
-		SYS->CLKEN |= (0x01 << SYS_CLKEN_UART3_Pos);
-		break;
-	}
-	
-	UART_Close(UARTx);	//珨虳壽瑩敵湔け硐夔婓揹諳壽敕奀扢离
-	
-	UARTx->CTRL |= (0x01 << UART_CTRL_BAUDEN_Pos);
-	UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
-	UARTx->BAUD |= ((SystemCoreClock/16/initStruct->Baudrate - 1) << UART_BAUD_BAUD_Pos);
-	
-	UARTx->CTRL &= ~(UART_CTRL_DATA9b_Msk | UART_CTRL_PARITY_Msk | UART_CTRL_STOP2b_Msk);
-	UARTx->CTRL |= (initStruct->DataBits << UART_CTRL_DATA9b_Pos) |
-				   (initStruct->Parity   << UART_CTRL_PARITY_Pos) |
-				   (initStruct->StopBits << UART_CTRL_STOP2b_Pos);
-	
-	/* 婓SWM320笢ㄛ絞 RXLVL >= RXTHR 奀揖楷笢剿ㄛ⺼彆RXTHR扢离峈0腔趕ㄛ婓帤諉彶善杅擂奀憩頗珨眻揖楷笢剿˙
-	   [坻郋⑵笢ㄛ絞 RXLVL >  RXTHR 奀揖楷笢剿ㄛ峈賤樵SWM320笢RXTHR祥夔峈0腔恀枙ㄛ甜苀珨踱滲杅APIㄛ涴爵蔚RXTHR扢离硉樓珨
+* �賣㺭�滨妍:	UART_Init()
+* �蠘�霂湔�:	UART銝脣藁�嘥���
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			UART_InitStructure * initStruct    ��鉄UART銝脣藁�詨�霈曉��潛�蝏𤘪�雿�
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
+******************************************************************************************************************************************/
+void UART_Init(UART_TypeDef *UARTx, UART_InitStructure *initStruct)
+{
+    switch ((uint32_t)UARTx)
+    {
+    case ((uint32_t)UART0):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_UART0_Pos);
+        break;
+
+    case ((uint32_t)UART1):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_UART1_Pos);
+        break;
+
+    case ((uint32_t)UART2):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_UART2_Pos);
+        break;
+
+    case ((uint32_t)UART3):
+        SYS->CLKEN |= (0x01 << SYS_CLKEN_UART3_Pos);
+        break;
+    }
+
+    UART_Close(UARTx); //銝�鈭𥕦��桀�摮睃膥�芾��其葡����剜𧒄霈曄蔭
+
+    UARTx->CTRL |= (0x01 << UART_CTRL_BAUDEN_Pos);
+    UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
+    UARTx->BAUD |= ((SystemCoreClock / 16 / initStruct->Baudrate - 1) << UART_BAUD_BAUD_Pos);
+
+    UARTx->CTRL &= ~(UART_CTRL_DATA9b_Msk | UART_CTRL_PARITY_Msk | UART_CTRL_STOP2b_Msk);
+    UARTx->CTRL |= (initStruct->DataBits << UART_CTRL_DATA9b_Pos) |
+                   (initStruct->Parity << UART_CTRL_PARITY_Pos) |
+                   (initStruct->StopBits << UART_CTRL_STOP2b_Pos);
+
+    /* �沒WM320銝哨�敶� RXLVL >= RXTHR �嗉圻�睲葉�哨�憒��RXTHR霈曄蔭銝�0���嚗�銁�芣𦻖�嗅��唳旿�嗅停隡帋��渲圻�睲葉�哨�
+	   �嗡��舐�銝哨�敶� RXLVL >  RXTHR �嗉圻�睲葉�哨�銝箄圾�袖WM320銝苧XTHR銝滩�銝�0��䔮憸矋�撟嗥�銝�摨枏遆�蚊PI嚗諹����RXTHR霈曄蔭�澆�銝�
 	*/
-	switch((uint32_t)UARTx)  // ⻏璃葩弇祥夔ラ錨 NVIC 敵湔けㄛ�祥忒雄ラ壺ㄛ狟醱腔測鎢ラ錨 RXTHR 奀頗絳祡珨眻輛⻌ ISR
+    switch ((uint32_t)UARTx) // 頧臭辣憭滢�銝滩�皜�妟 NVIC 撖���剁��乩��见𢆡皜�膄嚗䔶��Y�隞��皜�妟 RXTHR �嗡�撖潸稲銝��渲��� ISR
     {
-    case ((uint32_t)UART0):  NVIC_DisableIRQ(UART0_IRQn);  break;
-    case ((uint32_t)UART1):  NVIC_DisableIRQ(UART1_IRQn);  break;
-    case ((uint32_t)UART2):  NVIC_DisableIRQ(UART2_IRQn);  break;
-    case ((uint32_t)UART3):  NVIC_DisableIRQ(UART3_IRQn);  break;
+    case ((uint32_t)UART0):
+        NVIC_DisableIRQ(UART0_IRQn);
+        break;
+    case ((uint32_t)UART1):
+        NVIC_DisableIRQ(UART1_IRQn);
+        break;
+    case ((uint32_t)UART2):
+        NVIC_DisableIRQ(UART2_IRQn);
+        break;
+    case ((uint32_t)UART3):
+        NVIC_DisableIRQ(UART3_IRQn);
+        break;
     }
-	UARTx->FIFO &= ~(UART_FIFO_RXTHR_Msk | UART_FIFO_TXTHR_Msk);
-	UARTx->FIFO |= ((initStruct->RXThreshold + 1) << UART_FIFO_RXTHR_Pos) | 
-				   (initStruct->TXThreshold << UART_FIFO_TXTHR_Pos);
-	
-	UARTx->CTRL &= ~UART_CTRL_TOTIME_Msk;
-	UARTx->CTRL |= (initStruct->TimeoutTime << UART_CTRL_TOTIME_Pos);
-	
-	UARTx->CTRL &= ~(UART_CTRL_RXIE_Msk | UART_CTRL_TXIE_Msk | UART_CTRL_TOIE_Msk);
-	UARTx->CTRL |= (initStruct->RXThresholdIEn << UART_CTRL_RXIE_Pos) |
-				   (initStruct->TXThresholdIEn << UART_CTRL_TXIE_Pos) |
-				   (initStruct->TimeoutIEn << UART_CTRL_TOIE_Pos);
-	
-	switch((uint32_t)UARTx)
-	{
-	case ((uint32_t)UART0):		
-		if(initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
-		{
-			NVIC_EnableIRQ(UART0_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(UART0_IRQn);
-		}
-		break;
-	
-	case ((uint32_t)UART1):		
-		if(initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
-		{
-			NVIC_EnableIRQ(UART1_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(UART1_IRQn);
-		}
-		break;
-	
-	case ((uint32_t)UART2):		
-		if(initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
-		{
-			NVIC_EnableIRQ(UART2_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(UART2_IRQn);
-		}
-		break;
-	
-	case ((uint32_t)UART3):		
-		if(initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
-		{
-			NVIC_EnableIRQ(UART3_IRQn);
-		}
-		else
-		{
-			NVIC_DisableIRQ(UART3_IRQn);
-		}
-		break;
-	}
-}
-
-/****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_Open()
-* 髡夔佽隴:	UART揹諳湖羲
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+    UARTx->FIFO &= ~(UART_FIFO_RXTHR_Msk | UART_FIFO_TXTHR_Msk);
+    UARTx->FIFO |= ((initStruct->RXThreshold + 1) << UART_FIFO_RXTHR_Pos) |
+                   (initStruct->TXThreshold << UART_FIFO_TXTHR_Pos);
+
+    UARTx->CTRL &= ~UART_CTRL_TOTIME_Msk;
+    UARTx->CTRL |= (initStruct->TimeoutTime << UART_CTRL_TOTIME_Pos);
+
+    UARTx->CTRL &= ~(UART_CTRL_RXIE_Msk | UART_CTRL_TXIE_Msk | UART_CTRL_TOIE_Msk);
+    UARTx->CTRL |= (initStruct->RXThresholdIEn << UART_CTRL_RXIE_Pos) |
+                   (initStruct->TXThresholdIEn << UART_CTRL_TXIE_Pos) |
+                   (initStruct->TimeoutIEn << UART_CTRL_TOIE_Pos);
+
+    switch ((uint32_t)UARTx)
+    {
+    case ((uint32_t)UART0):
+        if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
+        {
+            NVIC_EnableIRQ(UART0_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(UART0_IRQn);
+        }
+        break;
+
+    case ((uint32_t)UART1):
+        if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
+        {
+            NVIC_EnableIRQ(UART1_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(UART1_IRQn);
+        }
+        break;
+
+    case ((uint32_t)UART2):
+        if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
+        {
+            NVIC_EnableIRQ(UART2_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(UART2_IRQn);
+        }
+        break;
+
+    case ((uint32_t)UART3):
+        if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
+        {
+            NVIC_EnableIRQ(UART3_IRQn);
+        }
+        else
+        {
+            NVIC_DisableIRQ(UART3_IRQn);
+        }
+        break;
+    }
+}
+
+/****************************************************************************************************************************************** 
+* �賣㺭�滨妍:	UART_Open()
+* �蠘�霂湔�:	UART銝脣藁�枏�
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_Open(UART_TypeDef * UARTx)
+void UART_Open(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL |= (0x01 << UART_CTRL_EN_Pos);
+    UARTx->CTRL |= (0x01 << UART_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_Close()
-* 髡夔佽隴:	UART揹諳壽敕
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_Close()
+* �蠘�霂湔�:	UART銝脣藁�喲𡡒
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_Close(UART_TypeDef * UARTx)
+void UART_Close(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL &= ~(0x01 << UART_CTRL_EN_Pos);
+    UARTx->CTRL &= ~(0x01 << UART_CTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_WriteByte()
-* 髡夔佽隴:	楷冞珨跺趼誹杅擂
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ褫龰硉婦嬤UART0﹜UART1﹜UART2﹜UART3﹜UART4
-*			uint32_t data			猁楷冞腔趼誹			
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_WriteByte()
+* �蠘�霂湔�:	�煾���銝芸���㺭��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗�虾�硋�澆��柿ART0��ART1��ART2��ART3��ART4
+*			uint32_t data			閬�����摮𡑒�			
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data)
+void UART_WriteByte(UART_TypeDef *UARTx, uint32_t data)
 {
-	UARTx->DATA = data;
+    UARTx->DATA = data;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_ReadByte()
-* 髡夔佽隴:	黍龰珨跺趼誹杅擂ㄛ甜硌堤杅擂岆瘁Valid
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ褫龰硉婦嬤UART0﹜UART1﹜UART2﹜UART3﹜UART4
-*			uint32_t * data			諉彶善腔杅擂
-* 怀    堤: uint32_t				0 拸渣昫    UART_ERR_PARITY ✽髒苺桄渣昫
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_ReadByte()
+* �蠘�霂湔�:	霂餃�銝�銝芸���㺭�殷�撟嗆��箸㺭�格糓�向alid
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗�虾�硋�澆��柿ART0��ART1��ART2��ART3��ART4
+*			uint32_t * data			�交𤣰�啁��唳旿
+* 颲�    ��: uint32_t				0 �𣳇�霂�    UART_ERR_PARITY 憟���⊿��躰秤
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data)
+uint32_t UART_ReadByte(UART_TypeDef *UARTx, uint32_t *data)
 {
-	uint32_t reg = UARTx->DATA;
-	
-	*data = (reg & UART_DATA_DATA_Msk);
-	
-	if(reg & UART_DATA_PAERR_Msk) return UART_ERR_PARITY;
-	
-	return 0;
+    uint32_t reg = UARTx->DATA;
+
+    *data = (reg & UART_DATA_DATA_Msk);
+
+    if (reg & UART_DATA_PAERR_Msk)
+        return UART_ERR_PARITY;
+
+    return 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_IsTXBusy()
-* 髡夔佽隴:	UART岆瘁淏婓楷冞杅擂
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 UART淏婓楷冞杅擂    0 杅擂眒楷俇
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_IsTXBusy()
+* �蠘�霂湔�:	UART�臬炏甇�銁�煾��㺭��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 UART甇�銁�煾��㺭��    0 �唳旿撌脣�摰�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_IsTXBusy(UART_TypeDef * UARTx)
+uint32_t UART_IsTXBusy(UART_TypeDef *UARTx)
 {
-	return (UARTx->CTRL & UART_CTRL_TXIDLE_Msk) ? 0 : 1;
+    return (UARTx->CTRL & UART_CTRL_TXIDLE_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_IsRXFIFOEmpty()
-* 髡夔佽隴:	諉彶FIFO岆瘁峈諾ㄛ⺼彆祥諾寀佽隴[笢衄杅擂褫眕黍龰
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 諉彶FIFO諾    0 諉彶FIFO準諾
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_IsRXFIFOEmpty()
+* �蠘�霂湔�:	�交𤣰FIFO�臬炏銝箇征嚗���靝�蝛箏�霂湔��嗡葉�㗇㺭�桀虾隞亥粉��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 �交𤣰FIFO蝛�    0 �交𤣰FIFO�䂿征
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx)
+uint32_t UART_IsRXFIFOEmpty(UART_TypeDef *UARTx)
 {
-	return (UARTx->CTRL & UART_CTRL_RXNE_Msk) ? 0 : 1;
+    return (UARTx->CTRL & UART_CTRL_RXNE_Msk) ? 0 : 1;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_IsTXFIFOFull()
-* 髡夔佽隴:	楷冞FIFO岆瘁峈雛ㄛ⺼彆祥雛寀褫眕樟哿砃[笢迡⻌杅擂
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 楷冞FIFO雛    0 楷冞FIFO祥雛
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_IsTXFIFOFull()
+* �蠘�霂湔�:	�煾��IFO�臬炏銝箸說嚗���靝�皛∪��臭誑蝏抒賒�穃�銝剖��交㺭��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 �煾��IFO皛�    0 �煾��IFO銝齿說
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx)
+uint32_t UART_IsTXFIFOFull(UART_TypeDef *UARTx)
 {
-	return (UARTx->CTRL & UART_CTRL_TXFF_Msk) ? 1 : 0;
+    return (UARTx->CTRL & UART_CTRL_TXFF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_SetBaudrate()
-* 髡夔佽隴:	扢离疏杻薹
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			uint32_t baudrate		猁扢离腔疏杻薹
-* 怀    堤: 拸
-* 蛁砩岈砐: 祥猁婓揹諳馱釬奀載蜊疏杻薹ㄛ妏蚚森滲杅ゴワ珂覃蚚UART_Close()壽敕揹諳
+* �賣㺭�滨妍:	UART_SetBaudrate()
+* �蠘�霂湔�:	霈曄蔭瘜Y鸌��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			uint32_t baudrate		閬�挽蝵桃�瘜Y鸌��
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 銝滩��其葡��極雿𨀣𧒄�湔㺿瘜Y鸌���雿輻鍂甇文遆�啣�霂瑕�靚�鍂UART_Close()�喲𡡒銝脣藁
 ******************************************************************************************************************************************/
-void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate)
+void UART_SetBaudrate(UART_TypeDef *UARTx, uint32_t baudrate)
 {
-	UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
-	UARTx->BAUD |= ((SystemCoreClock/16/baudrate - 1) << UART_BAUD_BAUD_Pos);
+    UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
+    UARTx->BAUD |= ((SystemCoreClock / 16 / baudrate - 1) << UART_BAUD_BAUD_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_GetBaudrate()
-* 髡夔佽隴:	脤戙疏杻薹
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				絞ゴ疏杻薹
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_GetBaudrate()
+* �蠘�霂湔�:	�亥砭瘜Y鸌��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				敶枏�瘜Y鸌��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_GetBaudrate(UART_TypeDef * UARTx)
+uint32_t UART_GetBaudrate(UART_TypeDef *UARTx)
 {
-	return SystemCoreClock/16/(((UARTx->BAUD & UART_BAUD_BAUD_Msk) >> UART_BAUD_BAUD_Pos) + 1);
+    return SystemCoreClock / 16 / (((UARTx->BAUD & UART_BAUD_BAUD_Msk) >> UART_BAUD_BAUD_Pos) + 1);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_CTSConfig()
-* 髡夔佽隴:	UART CTS霜諷饜离
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			uint32_t enable			1 妏夔CTS霜諷    0 輦砦CTS霜諷
-*			uint32_t polarity		0 CTS怀⻌峈腴桶尨褫眕楷冞杅擂    1 CTS怀⻌峈詢桶尨褫眕楷冞杅擂
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_CTSConfig()
+* �蠘�霂湔�:	UART CTS瘚�綉�滨蔭
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			uint32_t enable			1 雿輯�CTS瘚�綉    0 蝳�迫CTS瘚�綉
+*			uint32_t polarity		0 CTS颲枏�銝箔�銵函內�臭誑�煾��㺭��    1 CTS颲枏�銝粹�銵函內�臭誑�煾��㺭��
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity)
+void UART_CTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity)
 {
-	UARTx->CTSCR &= ~(UART_CTSCR_EN_Msk | UART_CTSCR_POL_Msk);
-	UARTx->CTSCR |= (enable   << UART_CTSCR_EN_Pos) |
-					(polarity << UART_CTSCR_POL_Pos);
+    UARTx->CTSCR &= ~(UART_CTSCR_EN_Msk | UART_CTSCR_POL_Msk);
+    UARTx->CTSCR |= (enable << UART_CTSCR_EN_Pos) |
+                    (polarity << UART_CTSCR_POL_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_CTSLineState()
-* 髡夔佽隴:	UART CTS盄絞ゴ袨怓
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				0 CTS盄絞ゴ峈腴萇ⅸ    1 CTS盄絞ゴ峈詢萇ⅸ
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_CTSLineState()
+* �蠘�霂湔�:	UART CTS蝥踹��滨𠶖��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				0 CTS蝥踹��滢蛹雿𡒊㩞撟�    1 CTS蝥踹��滢蛹擃条㩞撟�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_CTSLineState(UART_TypeDef * UARTx)
+uint32_t UART_CTSLineState(UART_TypeDef *UARTx)
 {
-	return (UARTx->CTSCR & UART_CTSCR_STAT_Msk) ? 1 : 0;
+    return (UARTx->CTSCR & UART_CTSCR_STAT_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_RTSConfig()
-* 髡夔佽隴:	UART RTS霜諷饜离
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			uint32_t enable			1 妏夔RTS霜諷    0 輦砦RTS霜諷
-*			uint32_t polarity		0 RTS怀堤腴桶尨褫眕諉彶杅擂    1 RTS怀堤詢桶尨褫眕諉彶杅擂
-*			uint32_t threshold		RTS霜諷腔揖楷蓒硉ㄛ褫龰硉UART_RTS_1BYTE﹜UART_RTS_2BYTE﹜UART_RTS_4BYTE﹜UART_RTS_6BYTE
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_RTSConfig()
+* �蠘�霂湔�:	UART RTS瘚�綉�滨蔭
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			uint32_t enable			1 雿輯�RTS瘚�綉    0 蝳�迫RTS瘚�綉
+*			uint32_t polarity		0 RTS颲枏枂雿舘”蝷箏虾隞交𦻖�嗆㺭��    1 RTS颲枏枂擃䁅”蝷箏虾隞交𦻖�嗆㺭��
+*			uint32_t threshold		RTS瘚�綉��圻�煾��潘��臬��墀ART_RTS_1BYTE��ART_RTS_2BYTE��ART_RTS_4BYTE��ART_RTS_6BYTE
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold)
+void UART_RTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold)
 {
-	UARTx->RTSCR &= ~(UART_RTSCR_EN_Msk | UART_RTSCR_POL_Msk | UART_RTSCR_THR_Msk);
-	UARTx->RTSCR |= (enable    << UART_RTSCR_EN_Pos)  |
-					(polarity  << UART_RTSCR_POL_Pos) |
-					(threshold << UART_RTSCR_THR_Pos);
+    UARTx->RTSCR &= ~(UART_RTSCR_EN_Msk | UART_RTSCR_POL_Msk | UART_RTSCR_THR_Msk);
+    UARTx->RTSCR |= (enable << UART_RTSCR_EN_Pos) |
+                    (polarity << UART_RTSCR_POL_Pos) |
+                    (threshold << UART_RTSCR_THR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_RTSLineState()
-* 髡夔佽隴:	UART RTS盄絞ゴ袨怓
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				0 RTS盄絞ゴ峈腴萇ⅸ    1 RTS盄絞ゴ峈詢萇ⅸ
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_RTSLineState()
+* �蠘�霂湔�:	UART RTS蝥踹��滨𠶖��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				0 RTS蝥踹��滢蛹雿𡒊㩞撟�    1 RTS蝥踹��滢蛹擃条㩞撟�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_RTSLineState(UART_TypeDef * UARTx)
+uint32_t UART_RTSLineState(UART_TypeDef *UARTx)
 {
-	return (UARTx->RTSCR & UART_RTSCR_STAT_Msk) ? 1 : 0;
+    return (UARTx->RTSCR & UART_RTSCR_STAT_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_LINConfig()
-* 髡夔佽隴:	UART LIN髡夔饜离
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			uint32_t detectedIEn	潰聆善Break笢剿妏夔
-*			uint32_t generatedIEn	Break楷冞俇傖笢剿妏夔
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_LINConfig()
+* �蠘�霂湔�:	UART LIN�蠘��滨蔭
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			uint32_t detectedIEn	璉�瘚见�Break銝剜鱏雿輯�
+*			uint32_t generatedIEn	Break�煾����𣂷葉�凋蝙��
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generatedIEn)
+void UART_LINConfig(UART_TypeDef *UARTx, uint32_t detectedIEn, uint32_t generatedIEn)
 {
-	UARTx->LINCR &= ~(UART_LINCR_BRKDETIE_Msk | UART_LINCR_GENBRKIE_Msk);
-	UARTx->LINCR |= (detectedIEn  << UART_LINCR_BRKDETIE_Pos) |
-					(generatedIEn << UART_LINCR_GENBRKIE_Pos);
+    UARTx->LINCR &= ~(UART_LINCR_BRKDETIE_Msk | UART_LINCR_GENBRKIE_Msk);
+    UARTx->LINCR |= (detectedIEn << UART_LINCR_BRKDETIE_Pos) |
+                    (generatedIEn << UART_LINCR_GENBRKIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_LINGenerate()
-* 髡夔佽隴:	UART LIN莉汜/楷冞Break
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_LINGenerate()
+* �蠘�霂湔�:	UART LIN鈭抒�/�煾��reak
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_LINGenerate(UART_TypeDef * UARTx)
+void UART_LINGenerate(UART_TypeDef *UARTx)
 {
-	UARTx->LINCR |= (1 << UART_LINCR_GENBRK_Pos);
+    UARTx->LINCR |= (1 << UART_LINCR_GENBRK_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_LINIsDetected()
-* 髡夔佽隴:	UART LIN岆瘁潰聆善Break
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 潰聆善LIN Break    0 帤潰聆善LIN Break
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_LINIsDetected()
+* �蠘�霂湔�:	UART LIN�臬炏璉�瘚见�Break
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 璉�瘚见�LIN Break    0 �芣�瘚见�LIN Break
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_LINIsDetected(UART_TypeDef * UARTx)
+uint32_t UART_LINIsDetected(UART_TypeDef *UARTx)
 {
-	return (UARTx->LINCR & UART_LINCR_BRKDETIF_Msk) ? 1 : 0;
+    return (UARTx->LINCR & UART_LINCR_BRKDETIF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_LINIsGenerated()
-* 髡夔佽隴:	UART LIN Break岆瘁楷冞俇傖
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 LIN Break 楷冞俇傖    0 LIN Break楷冞帤俇傖
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_LINIsGenerated()
+* �蠘�霂湔�:	UART LIN Break�臬炏�煾�����
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 LIN Break �煾�����    0 LIN Break�煾��𧊋摰峕�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx)
+uint32_t UART_LINIsGenerated(UART_TypeDef *UARTx)
 {
-	return (UARTx->LINCR & UART_LINCR_GENBRKIF_Msk) ? 1 : 0;
+    return (UARTx->LINCR & UART_LINCR_GENBRKIF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_ABRStart()
-* 髡夔佽隴:	UART 赻雄疏杻薹潰聆羲宎
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-*			uint32_t detectChar		蚚衾赻雄潰聆﹜數呾疏杻薹腔潰聆趼睫
-*									8弇杅擂奀褫龰硉ㄩ0xFF﹜0xFE﹜0xF8﹜0x80ㄛ煦梗桶尨楷冞源斛剕楷冞0xFF﹜0xFE﹜0xF8﹜0x80
-*									9弇杅擂奀褫龰硉ㄩ0x1FF﹜0x1FE﹜0x1F8﹜0x180ㄛ煦梗桶尨楷冞源斛剕楷冞0x1FF﹜0x1FE﹜0x1F8﹜0x180
-* 怀    堤: 拸
-* 蛁砩岈砐: 赻雄疏杻薹潰聆奀祥夔羲ぎ✽髒苺桄
+* �賣㺭�滨妍:	UART_ABRStart()
+* �蠘�霂湔�:	UART �芸𢆡瘜Y鸌���瘚见�憪�
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+*			uint32_t detectChar		�其��芸𢆡璉�瘚卝��恣蝞埈郭�寧����瘚见�蝚�
+*									8雿齿㺭�格𧒄�臬��潘�0xFF��0xFE��0xF8��0x80嚗���怨”蝷箏���䲮敹�◆�煾��0xFF��0xFE��0xF8��0x80
+*									9雿齿㺭�格𧒄�臬��潘�0x1FF��0x1FE��0x1F8��0x180嚗���怨”蝷箏���䲮敹�◆�煾��0x1FF��0x1FE��0x1F8��0x180
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: �芸𢆡瘜Y鸌���瘚𧢲𧒄銝滩�撘��臬��嗆嵗撉�
 ******************************************************************************************************************************************/
-void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar)
+void UART_ABRStart(UART_TypeDef *UARTx, uint32_t detectChar)
 {
-	uint32_t bits;
-	
-	if((detectChar == 0xFF) || (detectChar == 0x1FF))      bits = 0;
-	else if((detectChar == 0xFE) || (detectChar == 0x1FE)) bits = 1;
-	else if((detectChar == 0xF8) || (detectChar == 0x1F8)) bits = 2;
-	else if((detectChar == 0x80) || (detectChar == 0x180)) bits = 3;
-	else while(1);
-	
-	UARTx->BAUD &= ~(UART_BAUD_ABREN_Msk | UART_BAUD_ABRBIT_Msk);
-	UARTx->BAUD |= (1    << UART_BAUD_ABREN_Pos) |
-				   (bits << UART_BAUD_ABRBIT_Pos);
+    uint32_t bits;
+
+    if ((detectChar == 0xFF) || (detectChar == 0x1FF))
+        bits = 0;
+    else if ((detectChar == 0xFE) || (detectChar == 0x1FE))
+        bits = 1;
+    else if ((detectChar == 0xF8) || (detectChar == 0x1F8))
+        bits = 2;
+    else if ((detectChar == 0x80) || (detectChar == 0x180))
+        bits = 3;
+    else
+        while (1)
+            ;
+
+    UARTx->BAUD &= ~(UART_BAUD_ABREN_Msk | UART_BAUD_ABRBIT_Msk);
+    UARTx->BAUD |= (1 << UART_BAUD_ABREN_Pos) |
+                   (bits << UART_BAUD_ABRBIT_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_ABRIsDone()
-* 髡夔佽隴:	UART 赻雄疏杻薹岆瘁俇傖
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				0 帤俇傖    UART_ABR_RES_OK 眒俇傖ㄛブ傖髡    UART_ABR_RES_ERR 眒俇傖ㄛ筍囮啖﹜堤渣
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_ABRIsDone()
+* �蠘�霂湔�:	UART �芸𢆡瘜Y鸌��糓�血���
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				0 �芸���    UART_ABR_RES_OK 撌脣��琜�銝娍���    UART_ABR_RES_ERR 撌脣��琜�雿�仃韐乓��枂��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_ABRIsDone(UART_TypeDef * UARTx)
+uint32_t UART_ABRIsDone(UART_TypeDef *UARTx)
 {
-	if(UARTx->BAUD & UART_BAUD_ABREN_Msk)
-	{
-		return 0;
-	}
-	else if(UARTx->BAUD & UART_BAUD_ABRERR_Msk)
-	{
-		return UART_ABR_RES_ERR;
-	}
-	else
-	{
-		return UART_ABR_RES_OK;
-	}
+    if (UARTx->BAUD & UART_BAUD_ABREN_Msk)
+    {
+        return 0;
+    }
+    else if (UARTx->BAUD & UART_BAUD_ABRERR_Msk)
+    {
+        return UART_ABR_RES_ERR;
+    }
+    else
+    {
+        return UART_ABR_RES_OK;
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTRXThresholdEn()
-* 髡夔佽隴:	絞RX FIFO笢杅擂跺杅 >= RXThreshold奀 揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTRXThresholdEn()
+* �蠘�霂湔�:	敶𣫮X FIFO銝剜㺭�桐葵�� >= RXThreshold�� 閫血�銝剜鱏
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTRXThresholdEn(UART_TypeDef * UARTx)
+void UART_INTRXThresholdEn(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL |= (0x01 << UART_CTRL_RXIE_Pos);
+    UARTx->CTRL |= (0x01 << UART_CTRL_RXIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTRXThresholdDis()
-* 髡夔佽隴:	絞RX FIFO笢杅擂跺杅 >= RXThreshold奀 祥揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTRXThresholdDis()
+* �蠘�霂湔�:	敶𣫮X FIFO銝剜㺭�桐葵�� >= RXThreshold�� 銝滩圻�睲葉��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTRXThresholdDis(UART_TypeDef * UARTx)
+void UART_INTRXThresholdDis(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL &= ~(0x01 << UART_CTRL_RXIE_Pos);
+    UARTx->CTRL &= ~(0x01 << UART_CTRL_RXIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTRXThresholdStat()
-* 髡夔佽隴:	岆瘁RX FIFO笢杅擂跺杅 >= RXThreshold
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 RX FIFO笢杅擂跺杅 >= RXThreshold		0 RX FIFO笢杅擂跺杅 < RXThreshold
-* 蛁砩岈砐: RXIF = RXTHRF & RXIE
+* �賣㺭�滨妍:	UART_INTRXThresholdStat()
+* �蠘�霂湔�:	�臬炏RX FIFO銝剜㺭�桐葵�� >= RXThreshold
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 RX FIFO銝剜㺭�桐葵�� >= RXThreshold		0 RX FIFO銝剜㺭�桐葵�� < RXThreshold
+* 瘜冽�鈭钅★: RXIF = RXTHRF & RXIE
 ******************************************************************************************************************************************/
-uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx)
+uint32_t UART_INTRXThresholdStat(UART_TypeDef *UARTx)
 {
-	return (UARTx->BAUD & UART_BAUD_RXIF_Msk) ? 1 : 0;
+    return (UARTx->BAUD & UART_BAUD_RXIF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXThresholdEn()
-* 髡夔佽隴:	絞TX FIFO笢杅擂跺杅 <= TXThreshold奀 揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTXThresholdEn()
+* �蠘�霂湔�:	敶孏X FIFO銝剜㺭�桐葵�� <= TXThreshold�� 閫血�銝剜鱏
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTXThresholdEn(UART_TypeDef * UARTx)
+void UART_INTTXThresholdEn(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL |= (0x01 << UART_CTRL_TXIE_Pos);	
+    UARTx->CTRL |= (0x01 << UART_CTRL_TXIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXThresholdDis()
-* 髡夔佽隴:	絞TX FIFO笢杅擂跺杅 <= TXThreshold奀 祥揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTXThresholdDis()
+* �蠘�霂湔�:	敶孏X FIFO銝剜㺭�桐葵�� <= TXThreshold�� 銝滩圻�睲葉��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTXThresholdDis(UART_TypeDef * UARTx)
+void UART_INTTXThresholdDis(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL &= ~(0x01 << UART_CTRL_TXIE_Pos);
+    UARTx->CTRL &= ~(0x01 << UART_CTRL_TXIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXThresholdStat()
-* 髡夔佽隴:	岆瘁TX FIFO笢杅擂跺杅 <= TXThreshold
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 TX FIFO笢杅擂跺杅 <= TXThreshold		0 TX FIFO笢杅擂跺杅 > TXThreshold
-* 蛁砩岈砐: TXIF = TXTHRF & TXIE
+* �賣㺭�滨妍:	UART_INTTXThresholdStat()
+* �蠘�霂湔�:	�臬炏TX FIFO銝剜㺭�桐葵�� <= TXThreshold
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 TX FIFO銝剜㺭�桐葵�� <= TXThreshold		0 TX FIFO銝剜㺭�桐葵�� > TXThreshold
+* 瘜冽�鈭钅★: TXIF = TXTHRF & TXIE
 ******************************************************************************************************************************************/
-uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx)
+uint32_t UART_INTTXThresholdStat(UART_TypeDef *UARTx)
 {
-	return (UARTx->BAUD & UART_BAUD_TXIF_Msk) ? 1 : 0;
+    return (UARTx->BAUD & UART_BAUD_TXIF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTimeoutEn()
-* 髡夔佽隴:	諉彶楷汜閉奀奀 揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTimeoutEn()
+* �蠘�霂湔�:	�交𤣰�𤑳�頞�𧒄�� 閫血�銝剜鱏
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTimeoutEn(UART_TypeDef * UARTx)
+void UART_INTTimeoutEn(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL |= (0x01 << UART_CTRL_TOIE_Pos);	
+    UARTx->CTRL |= (0x01 << UART_CTRL_TOIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTimeoutDis()
-* 髡夔佽隴:	諉彶楷汜閉奀奀 祥揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTimeoutDis()
+* �蠘�霂湔�:	�交𤣰�𤑳�頞�𧒄�� 銝滩圻�睲葉��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTimeoutDis(UART_TypeDef * UARTx)
+void UART_INTTimeoutDis(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL &= ~(0x01 << UART_CTRL_TOIE_Pos);
+    UARTx->CTRL &= ~(0x01 << UART_CTRL_TOIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTimeoutStat()
-* 髡夔佽隴:	岆瘁楷汜賸諉彶閉奀ㄛ撈閉徹 TimeoutTime/(Baudrate/10) 鏃羶衄婓RX盄奻諉彶善杅擂奀揖楷笢剿
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 楷汜賸諉彶閉奀		0 帤楷汜諉彶閉奀
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTimeoutStat()
+* �蠘�霂湔�:	�臬炏�𤑳�鈭�𦻖�嗉��塚��唾�餈� TimeoutTime/(Baudrate/10) 蝘埝瓷�匧銁RX蝥蹂��交𤣰�唳㺭�格𧒄閫血�銝剜鱏
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 �𤑳�鈭�𦻖�嗉���		0 �芸���𦻖�嗉���
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx)
+uint32_t UART_INTTimeoutStat(UART_TypeDef *UARTx)
 {
-	return (UARTx->BAUD & UART_BAUD_TOIF_Msk) ? 1 : 0;
+    return (UARTx->BAUD & UART_BAUD_TOIF_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXDoneEn()
-* 髡夔佽隴:	楷冞FIFO諾ブ楷冞痄弇敵湔け諾笢剿妏夔
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTXDoneEn()
+* �蠘�霂湔�:	�煾��IFO蝛箔��煾��宏雿滚�摮睃膥蝛箔葉�凋蝙��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTXDoneEn(UART_TypeDef * UARTx)
+void UART_INTTXDoneEn(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL |= (0x01 << UART_CTRL_TXDOIE_Pos);	
+    UARTx->CTRL |= (0x01 << UART_CTRL_TXDOIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXDoneDis()
-* 髡夔佽隴:	楷冞FIFO諾ブ楷冞痄弇敵湔け諾笢剿輦砦
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTXDoneDis()
+* �蠘�霂湔�:	�煾��IFO蝛箔��煾��宏雿滚�摮睃膥蝛箔葉�剔�甇�
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void UART_INTTXDoneDis(UART_TypeDef * UARTx)
+void UART_INTTXDoneDis(UART_TypeDef *UARTx)
 {
-	UARTx->CTRL &= ~(0x01 << UART_CTRL_TXDOIE_Pos);
+    UARTx->CTRL &= ~(0x01 << UART_CTRL_TXDOIE_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	UART_INTTXDoneStat()
-* 髡夔佽隴:	楷冞FIFO諾ブ楷冞痄弇敵湔け諾笢剿袨怓
-* 怀    ⻌: UART_TypeDef * UARTx	硌隅猁掩扢离腔UART揹諳ㄛ衄虴硉婦嬤UART0﹜UART1﹜UART2﹜UART3
-* 怀    堤: uint32_t				1 楷冞FIFO諾ブ楷冞痄弇敵湔け諾		0 楷冞FIFO麼楷冞痄弇敵湔け帤諾
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	UART_INTTXDoneStat()
+* �蠘�霂湔�:	�煾��IFO蝛箔��煾��宏雿滚�摮睃膥蝛箔葉�剔𠶖��
+* 颲�    ��: UART_TypeDef * UARTx	���閬�◤霈曄蔭��ART銝脣藁嚗峕����澆��柿ART0��ART1��ART2��ART3
+* 颲�    ��: uint32_t				1 �煾��IFO蝛箔��煾��宏雿滚�摮睃膥蝛�		0 �煾��IFO�硋���宏雿滚�摮睃膥�芰征
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t UART_INTTXDoneStat(UART_TypeDef * UARTx)
+uint32_t UART_INTTXDoneStat(UART_TypeDef *UARTx)
 {
-	return (UARTx->BAUD & UART_BAUD_TXDOIF_Msk) ? 1 : 0;
+    return (UARTx->BAUD & UART_BAUD_TXDOIF_Msk) ? 1 : 0;
 }

+ 64 - 68
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h

@@ -1,94 +1,90 @@
 #ifndef __SWM320_UART_H__
 #define __SWM320_UART_H__
 
-typedef struct {
-	uint32_t Baudrate;
-	
-	uint8_t  DataBits;			//数据位位数,可取值UART_DATA_8BIT、UART_DATA_9BIT
-	
-	uint8_t  Parity;			//奇偶校验位,可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、UART_PARITY_ZERO
-	
-	uint8_t  StopBits;			//停止位位数,可取值UART_STOP_1BIT、UART_STOP_2BIT
-	
-	uint8_t  RXThreshold;		//取值0--7
-	uint8_t  RXThresholdIEn;	//当RX FIFO中数据个数 >  RXThreshold时触发中断
-	
-	uint8_t  TXThreshold;		//取值0--7
-	uint8_t  TXThresholdIEn;	//当TX FIFO中数据个数 <= TXThreshold时触发中断
-	
-	uint8_t  TimeoutTime;		//超时时长 = TimeoutTime/(Baudrate/10) 秒
-	uint8_t  TimeoutIEn;		//超时中断,RX FIFO非空,且超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据时触发中断
-} UART_InitStructure;
+typedef struct
+{
+    uint32_t Baudrate;
+
+    uint8_t DataBits; //鏁版嵁浣嶄綅鏁帮紝鍙�彇鍊糢ART_DATA_8BIT銆乁ART_DATA_9BIT
 
+    uint8_t Parity; //濂囧伓鏍¢獙浣嶏紝鍙�彇鍊糢ART_PARITY_NONE銆乁ART_PARITY_ODD銆乁ART_PARITY_EVEN銆乁ART_PARITY_ONE銆乁ART_PARITY_ZERO
 
-#define UART_DATA_8BIT		0
-#define UART_DATA_9BIT		1
+    uint8_t StopBits; //鍋滄�浣嶄綅鏁帮紝鍙�彇鍊糢ART_STOP_1BIT銆乁ART_STOP_2BIT
 
-#define UART_PARITY_NONE	0
-#define UART_PARITY_ODD		1
-#define UART_PARITY_EVEN	3
-#define UART_PARITY_ONE		5
-#define UART_PARITY_ZERO	7
+    uint8_t RXThreshold;    //鍙栧€�0--7
+    uint8_t RXThresholdIEn; //褰揜X FIFO涓�暟鎹�釜鏁� >  RXThreshold鏃惰Е鍙戜腑鏂�
 
-#define UART_STOP_1BIT		0
-#define UART_STOP_2BIT		1
+    uint8_t TXThreshold;    //鍙栧€�0--7
+    uint8_t TXThresholdIEn; //褰揟X FIFO涓�暟鎹�釜鏁� <= TXThreshold鏃惰Е鍙戜腑鏂�
 
-#define UART_RTS_1BYTE		0
-#define UART_RTS_2BYTE		1
-#define UART_RTS_4BYTE		2
-#define UART_RTS_6BYTE		3
+    uint8_t TimeoutTime; //瓒呮椂鏃堕暱 = TimeoutTime/(Baudrate/10) 绉�
+    uint8_t TimeoutIEn;  //瓒呮椂涓�柇锛孯X FIFO闈炵┖锛屼笖瓒呰繃 TimeoutTime/(Baudrate/10) 绉掓病鏈夊湪RX绾夸笂鎺ユ敹鍒版暟鎹�椂瑙﹀彂涓�柇
+} UART_InitStructure;
 
-#define UART_ABR_RES_OK		1
-#define UART_ABR_RES_ERR	2
+#define UART_DATA_8BIT 0
+#define UART_DATA_9BIT 1
 
-#define UART_ERR_FRAME		1
-#define UART_ERR_PARITY		2
-#define UART_ERR_NOISE		3
+#define UART_PARITY_NONE 0
+#define UART_PARITY_ODD 1
+#define UART_PARITY_EVEN 3
+#define UART_PARITY_ONE 5
+#define UART_PARITY_ZERO 7
 
+#define UART_STOP_1BIT 0
+#define UART_STOP_2BIT 1
 
-void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct);	//UART串口初始化
-void UART_Open(UART_TypeDef * UARTx);
-void UART_Close(UART_TypeDef * UARTx);
+#define UART_RTS_1BYTE 0
+#define UART_RTS_2BYTE 1
+#define UART_RTS_4BYTE 2
+#define UART_RTS_6BYTE 3
 
-void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data);				//发送一个字节数据
-uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data);			//读取一个字节数据,并指出数据是否Valid
+#define UART_ABR_RES_OK 1
+#define UART_ABR_RES_ERR 2
 
-uint32_t UART_IsTXBusy(UART_TypeDef * UARTx);
-uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx);						//接收FIFO是否空,如果不空则可以继续UART_ReadByte()
-uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx);						//发送FIFO是否满,如果不满则可以继续UART_WriteByte()
+#define UART_ERR_FRAME 1
+#define UART_ERR_PARITY 2
+#define UART_ERR_NOISE 3
 
+void UART_Init(UART_TypeDef *UARTx, UART_InitStructure *initStruct); //UART涓插彛鍒濆�鍖�
+void UART_Open(UART_TypeDef *UARTx);
+void UART_Close(UART_TypeDef *UARTx);
 
-void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate);			//设置波特率
-uint32_t UART_GetBaudrate(UART_TypeDef * UARTx);			 			//获取当前使用的波特率
+void UART_WriteByte(UART_TypeDef *UARTx, uint32_t data);     //鍙戦€佷竴涓�瓧鑺傛暟鎹�
+uint32_t UART_ReadByte(UART_TypeDef *UARTx, uint32_t *data); //璇诲彇涓€涓�瓧鑺傛暟鎹�紝骞舵寚鍑烘暟鎹�槸鍚�alid
 
-void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity);
-uint32_t UART_CTSLineState(UART_TypeDef * UARTx);
+uint32_t UART_IsTXBusy(UART_TypeDef *UARTx);
+uint32_t UART_IsRXFIFOEmpty(UART_TypeDef *UARTx); //鎺ユ敹FIFO鏄�惁绌猴紝濡傛灉涓嶇┖鍒欏彲浠ョ户缁璘ART_ReadByte()
+uint32_t UART_IsTXFIFOFull(UART_TypeDef *UARTx);  //鍙戦€丗IFO鏄�惁婊★紝濡傛灉涓嶆弧鍒欏彲浠ョ户缁璘ART_WriteByte()
 
-void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold);
-uint32_t UART_RTSLineState(UART_TypeDef * UARTx);
+void UART_SetBaudrate(UART_TypeDef *UARTx, uint32_t baudrate); //璁剧疆娉㈢壒鐜�
+uint32_t UART_GetBaudrate(UART_TypeDef *UARTx);                //鑾峰彇褰撳墠浣跨敤鐨勬尝鐗圭巼
 
-void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generatedIEn);
-void UART_LINGenerate(UART_TypeDef * UARTx);
-uint32_t UART_LINIsDetected(UART_TypeDef * UARTx);
-uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx);
+void UART_CTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity);
+uint32_t UART_CTSLineState(UART_TypeDef *UARTx);
 
-void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar);
-uint32_t UART_ABRIsDone(UART_TypeDef * UARTx);
+void UART_RTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold);
+uint32_t UART_RTSLineState(UART_TypeDef *UARTx);
 
+void UART_LINConfig(UART_TypeDef *UARTx, uint32_t detectedIEn, uint32_t generatedIEn);
+void UART_LINGenerate(UART_TypeDef *UARTx);
+uint32_t UART_LINIsDetected(UART_TypeDef *UARTx);
+uint32_t UART_LINIsGenerated(UART_TypeDef *UARTx);
 
-void UART_INTRXThresholdEn(UART_TypeDef * UARTx);
-void UART_INTRXThresholdDis(UART_TypeDef * UARTx);
-uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx);
-void UART_INTTXThresholdEn(UART_TypeDef * UARTx);
-void UART_INTTXThresholdDis(UART_TypeDef * UARTx);
-uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx);
-void UART_INTTimeoutEn(UART_TypeDef * UARTx);
-void UART_INTTimeoutDis(UART_TypeDef * UARTx);
-uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx);
+void UART_ABRStart(UART_TypeDef *UARTx, uint32_t detectChar);
+uint32_t UART_ABRIsDone(UART_TypeDef *UARTx);
 
-void UART_INTTXDoneEn(UART_TypeDef * UARTx);
-void UART_INTTXDoneDis(UART_TypeDef * UARTx);
-uint32_t UART_INTTXDoneStat(UART_TypeDef * UARTx);
+void UART_INTRXThresholdEn(UART_TypeDef *UARTx);
+void UART_INTRXThresholdDis(UART_TypeDef *UARTx);
+uint32_t UART_INTRXThresholdStat(UART_TypeDef *UARTx);
+void UART_INTTXThresholdEn(UART_TypeDef *UARTx);
+void UART_INTTXThresholdDis(UART_TypeDef *UARTx);
+uint32_t UART_INTTXThresholdStat(UART_TypeDef *UARTx);
+void UART_INTTimeoutEn(UART_TypeDef *UARTx);
+void UART_INTTimeoutDis(UART_TypeDef *UARTx);
+uint32_t UART_INTTimeoutStat(UART_TypeDef *UARTx);
 
+void UART_INTTXDoneEn(UART_TypeDef *UARTx);
+void UART_INTTXDoneDis(UART_TypeDef *UARTx);
+uint32_t UART_INTTXDoneStat(UART_TypeDef *UARTx);
 
 #endif //__SWM320_UART_H__

+ 74 - 75
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c

@@ -1,10 +1,10 @@
 /****************************************************************************************************************************************** 
-* 恅璃靡備: SWM320_wdt.c
-* 髡夔佽隴:	SWM320等⑵儂腔WDT艘藷僩髡夔Й雄踱
-* 撮扲盓厥:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
-* 蛁砩岈砐:
-* 唳掛゜ヽ:	V1.1.0		2017爛10堎25゜
-* 汔撰暮翹:  
+* ��辣�滨妍: SWM320_wdt.c
+* �蠘�霂湔�:	SWM320�閧��箇�WDT�钅秄�堒��賡店�典�
+* ���舀𣈲��:	http://www.synwit.com.cn/e/tool/gbook/?bid=1
+* 瘜冽�鈭钅★:
+* ��𧋦�交�:	V1.1.0		2017撟�10��25��
+* ��漣霈啣�:  
 *
 *
 *******************************************************************************************************************************************
@@ -21,106 +21,105 @@
 #include "SWM320.h"
 #include "SWM320_wdt.h"
 
-
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_Init()
-* 髡夔佽隴:	WDT艘藷僩場宎趙
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-*			uint32_t peroid			龰硉0--4294967295ㄛ等弇峈等⑵儂炵苀奀笘笚ヽ
-*			uint32_t mode			WDT_MODE_RESET 閉奀莉汜葩弇    WDT_MODE_INTERRUPT 閉奀莉汜笢剿
-* 怀    堤: 拸
-* 蛁砩岈砐: 葩弇妏夔奀笢剿祥お釬蚚ㄛ秪峈數杅笚ヽ賦旰奀郋⑵眻諉葩弇賸ㄛ拸楊砒茼笢剿
+* �賣㺭�滨妍:	WDT_Init()
+* �蠘�霂湔�:	WDT�钅秄�堒�憪见�
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+*			uint32_t peroid			�硋��0--4294967295嚗��雿滢蛹�閧��箇頂蝏�𧒄�笔𪂹��
+*			uint32_t mode			WDT_MODE_RESET 頞�𧒄鈭抒�憭滢�    WDT_MODE_INTERRUPT 頞�𧒄鈭抒�銝剜鱏
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 憭滢�雿輯��嗡葉�凋�韏瑚��剁��牐蛹霈⊥㺭�冽�蝏𤘪��嗉塳��凒�亙�雿滢�嚗峕�瘜訫�摨𥪯葉��
 ******************************************************************************************************************************************/
-void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode)
+void WDT_Init(WDT_TypeDef *WDTx, uint32_t peroid, uint32_t mode)
 {
-	SYS->CLKEN |= (0x01 << SYS_CLKEN_WDT_Pos);
-	
-	WDT_Stop(WDTx);		//扢离ゴ珂壽敕
-	
-	WDTx->LOAD = peroid;
-	
-	if(mode == WDT_MODE_RESET)
-	{
-		NVIC_DisableIRQ(WDT_IRQn);
-		
-		WDTx->CR |= (1 << WDT_CR_RSTEN_Pos);
-	}
-	else //mode == WDT_MODE_INTERRUPT
-	{
-		NVIC_EnableIRQ(WDT_IRQn);
-		
-		WDTx->CR &= ~(1 << WDT_CR_RSTEN_Pos);
-	}
+    SYS->CLKEN |= (0x01 << SYS_CLKEN_WDT_Pos);
+
+    WDT_Stop(WDTx); //霈曄蔭�滚��喲𡡒
+
+    WDTx->LOAD = peroid;
+
+    if (mode == WDT_MODE_RESET)
+    {
+        NVIC_DisableIRQ(WDT_IRQn);
+
+        WDTx->CR |= (1 << WDT_CR_RSTEN_Pos);
+    }
+    else //mode == WDT_MODE_INTERRUPT
+    {
+        NVIC_EnableIRQ(WDT_IRQn);
+
+        WDTx->CR &= ~(1 << WDT_CR_RSTEN_Pos);
+    }
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_Start()
-* 髡夔佽隴:	ぎ雄硌隅WDTㄛ羲宎給數奀
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_Start()
+* �蠘�霂湔�:	�臬𢆡���WDT嚗��憪见�坿恣��
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void WDT_Start(WDT_TypeDef * WDTx)
+void WDT_Start(WDT_TypeDef *WDTx)
 {
-	WDTx->CR |= (0x01 << WDT_CR_EN_Pos);
+    WDTx->CR |= (0x01 << WDT_CR_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_Stop()
-* 髡夔佽隴:	壽敕硌隅WDTㄛ礿砦給數奀
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_Stop()
+* �蠘�霂湔�:	�喲𡡒���WDT嚗��甇W�坿恣��
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void WDT_Stop(WDT_TypeDef * WDTx)
+void WDT_Stop(WDT_TypeDef *WDTx)
 {
-	WDTx->CR &= ~(0x01 << WDT_CR_EN_Pos);
+    WDTx->CR &= ~(0x01 << WDT_CR_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_Feed()
-* 髡夔佽隴:	庣僩ㄛ笭陔植蚾婥硉羲宎給數奀
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_Feed()
+* �蠘�霂湔�:	���嚗屸��唬�鋆�蝸�澆�憪见�坿恣��
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void WDT_Feed(WDT_TypeDef * WDTx)
+void WDT_Feed(WDT_TypeDef *WDTx)
 {
-	WDTx->FEED = 0x55;
+    WDTx->FEED = 0x55;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_GetValue()
-* 髡夔佽隴:	鳳龰硌隅艘藷僩隅奀け腔絞ゴ給數奀硉
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: int32_t					艘藷僩絞ゴ數杅硉
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_GetValue()
+* �蠘�霂湔�:	�瑕�����钅秄�堒��嗅膥����滚�坿恣�嗅��
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: int32_t					�钅秄�堒��滩恣�啣��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-int32_t WDT_GetValue(WDT_TypeDef * WDTx)
+int32_t WDT_GetValue(WDT_TypeDef *WDTx)
 {
-	return WDTx->VALUE;
+    return WDTx->VALUE;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_INTClr()
-* 髡夔佽隴:	笢剿梓祩ラ壺
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_INTClr()
+* �蠘�霂湔�:	銝剜鱏���皜�膄
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void WDT_INTClr(WDT_TypeDef * WDTx)
+void WDT_INTClr(WDT_TypeDef *WDTx)
 {
-	WDTx->IF = 1;
+    WDTx->IF = 1;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	WDT_INTStat()
-* 髡夔佽隴:	笢剿袨怓脤戙
-* 怀    ⻌: WDT_TypeDef * WDTx		硌隅猁掩扢离腔艘藷僩ㄛ衄虴硉婦嬤WDT
-* 怀    堤: int32_t					1 楷汜笢剿祛堤    0 帤楷汜笢剿祛堤
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	WDT_INTStat()
+* �蠘�霂湔�:	銝剜鱏�嗆��䰻霂�
+* 颲�    ��: WDT_TypeDef * WDTx		���閬�◤霈曄蔭����函�嚗峕����澆��柱DT
+* 颲�    ��: int32_t					1 �𤑳�銝剜鱏皞W枂    0 �芸��煺葉�剜滯��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t WDT_INTStat(WDT_TypeDef * WDTx)
+uint32_t WDT_INTStat(WDT_TypeDef *WDTx)
 {
-	return WDTx->IF;
+    return WDTx->IF;
 }

+ 10 - 11
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h

@@ -1,19 +1,18 @@
 #ifndef __SWM320_WDT_H__
-#define	__SWM320_WDT_H__
+#define __SWM320_WDT_H__
 
-#define WDT_MODE_RESET		0
-#define WDT_MODE_INTERRUPT	1
+#define WDT_MODE_RESET 0
+#define WDT_MODE_INTERRUPT 1
 
-void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode);	//WDT看门狗初始化
-void WDT_Start(WDT_TypeDef * WDTx);			//启动指定WDT,开始倒计时
-void WDT_Stop(WDT_TypeDef * WDTx);			//关闭指定WDT,停止倒计时
+void WDT_Init(WDT_TypeDef *WDTx, uint32_t peroid, uint32_t mode); //WDT鐪嬮棬鐙楀垵濮嬪寲
+void WDT_Start(WDT_TypeDef *WDTx);                                //鍚�姩鎸囧畾WDT锛屽紑濮嬪€掕�鏃�
+void WDT_Stop(WDT_TypeDef *WDTx);                                 //鍏抽棴鎸囧畾WDT锛屽仠姝㈠€掕�鏃�
 
-void WDT_Feed(WDT_TypeDef * WDTx);			//喂狗,重新从装载值开始倒计时
+void WDT_Feed(WDT_TypeDef *WDTx); //鍠傜嫍锛岄噸鏂颁粠瑁呰浇鍊煎紑濮嬪€掕�鏃�
 
-int32_t WDT_GetValue(WDT_TypeDef * WDTx);	//获取指定看门狗定时器的当前倒计时值
+int32_t WDT_GetValue(WDT_TypeDef *WDTx); //鑾峰彇鎸囧畾鐪嬮棬鐙楀畾鏃跺櫒鐨勫綋鍓嶅€掕�鏃跺€�
 
+void WDT_INTClr(WDT_TypeDef *WDTx);      //涓�柇鏍囧織娓呴櫎
+uint32_t WDT_INTStat(WDT_TypeDef *WDTx); //涓�柇鐘舵€佹煡璇�
 
-void WDT_INTClr(WDT_TypeDef * WDTx);		//中断标志清除
-uint32_t WDT_INTStat(WDT_TypeDef * WDTx);	//中断状态查询
- 
 #endif //__SWM320_WDT_H__