Browse Source

format utf-8

yanmowudi 4 years ago
parent
commit
2c05296948
46 changed files with 8309 additions and 8232 deletions
  1. 3288 3345
      bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h
  2. 15 15
      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. 199 198
      bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c
  6. 12 16
      bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h
  7. 242 227
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c
  8. 72 74
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h
  9. 462 463
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c
  10. 110 106
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h
  11. 29 30
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c
  12. 8 11
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h
  13. 83 81
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c
  14. 10 13
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h
  15. 86 86
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c
  16. 12 14
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h
  17. 36 38
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c
  18. 0 4
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h
  19. 288 289
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c
  20. 16 18
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h
  21. 168 164
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c
  22. 22 22
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h
  23. 53 51
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c
  24. 58 61
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h
  25. 136 121
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c
  26. 17 21
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h
  27. 183 184
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c
  28. 410 418
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h
  29. 481 400
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c
  30. 48 49
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h
  31. 140 134
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c
  32. 58 58
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h
  33. 483 451
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c
  34. 100 106
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h
  35. 62 49
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c
  36. 71 72
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h
  37. 138 138
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c
  38. 73 76
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h
  39. 24 21
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c
  40. 22 24
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h
  41. 263 258
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c
  42. 16 19
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h
  43. 208 194
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c
  44. 64 68
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h
  45. 31 32
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c
  46. 10 11
      bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h

File diff suppressed because it is too large
+ 3288 - 3345
bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h


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

@@ -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

+ 199 - 198
bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c

@@ -17,56 +17,48 @@
 * -ECTION WITH THEIR PRODUCTS.
 *
 * COPYRIGHT 2012 Synwit Technology
-*******************************************************************************************************************************************/ 
+*******************************************************************************************************************************************/
 #include <stdint.h>
 #include "SWM320.h"
 
-
 /******************************************************************************************************************************************
  * 系统时钟设定
  *****************************************************************************************************************************************/
-#define SYS_CLK_20MHz	0	 	//0 内部高频20MHz RC振荡器
-#define SYS_CLK_40MHz	1		//1 内部高频40MHz RC振荡器
-#define SYS_CLK_32KHz	2		//2 内部低频32KHz RC振荡器
-#define SYS_CLK_XTAL	3		//3 外部晶体振荡器(2-30MHz)
-#define SYS_CLK_PLL		4		//4 片内锁相环输出
-
-#define SYS_CLK   SYS_CLK_PLL
-
+#define SYS_CLK_20MHz 0 //0 内部高频20MHz RC振荡器
+#define SYS_CLK_40MHz 1 //1 内部高频40MHz RC振荡器
+#define SYS_CLK_32KHz 2 //2 内部低频32KHz RC振荡器
+#define SYS_CLK_XTAL 3  //3 外部晶体振荡器(2-30MHz)
+#define SYS_CLK_PLL 4   //4 片内锁相环输出
 
-#define SYS_CLK_DIV_1	0
-#define SYS_CLK_DIV_2	1
+#define SYS_CLK SYS_CLK_PLL
 
-#define SYS_CLK_DIV   	SYS_CLK_DIV_1
+#define SYS_CLK_DIV_1 0
+#define SYS_CLK_DIV_2 1
 
+#define SYS_CLK_DIV SYS_CLK_DIV_1
 
-#define __HSI		(20000000UL)		//高速内部时钟
-#define __LSI		(   32000UL)		//低速内部时钟
-#define __HSE		(20000000UL)		//高速外部时钟
-
+#define __HSI (20000000UL) //高速内部时钟
+#define __LSI (32000UL)    //低速内部时钟
+#define __HSE (20000000UL) //高速外部时钟
 
 /********************************** PLL 设定 **********************************************
  * VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
  * PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV         
- *****************************************************************************************/ 
-#define SYS_PLL_SRC   	SYS_CLK_20MHz	//可取值SYS_CLK_20MHz、SYS_CLK_XTAL
-
-#define PLL_IN_DIV		5
-
-#define PLL_FB_DIV		60
+ *****************************************************************************************/
+#define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
 
+#define PLL_IN_DIV 5
 
-#define PLL_OUT_DIV8	0
-#define PLL_OUT_DIV4	1
-#define PLL_OUT_DIV2	2
+#define PLL_FB_DIV 60
 
-#define PLL_OUT_DIV		PLL_OUT_DIV8
+#define PLL_OUT_DIV8 0
+#define PLL_OUT_DIV4 1
+#define PLL_OUT_DIV2 2
 
+#define PLL_OUT_DIV PLL_OUT_DIV8
 
-
-uint32_t SystemCoreClock  = __HSI;   				//System Clock Frequency (Core Clock)
-uint32_t CyclesPerUs      = (__HSI / 1000000); 		//Cycles per micro second
-
+uint32_t SystemCoreClock = __HSI;         //System Clock Frequency (Core Clock)
+uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second
 
 /****************************************************************************************************************************************** 
 * 函数名称: 
@@ -75,50 +67,51 @@ uint32_t CyclesPerUs      = (__HSI / 1000000); 		//Cycles per micro second
 * 输    出: 
 * 注意事项: 
 ******************************************************************************************************************************************/
-void SystemCoreClockUpdate(void)    
+void SystemCoreClockUpdate(void)
 {
-	if(SYS->CLKSEL & SYS_CLKSEL_SYS_Msk)			//SYS_CLK  <= HFCK
-	{
-		if(SYS->CLKSEL & SYS_CLKSEL_HFCK_Msk)			//HFCK <= XTAL
-		{
-			SystemCoreClock =  __HSE;
-		}
-		else											//HFCK <= HRC
-		{
-			if(SYS->HRCCR & SYS_HRCCR_DBL_Msk)				//HRC = 40MHz
-			{
-				SystemCoreClock = __HSI*2;
-			}
-			else											//HRC = 20MHz
-			{
-				SystemCoreClock = __HSI;
-			}
-		}
-	}
-	else											//SYS_CLK  <= LFCK
-	{
-		if(SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk)			//LFCK <= PLL
-		{
-			if(SYS->PLLCR & SYS_PLLCR_INSEL_Msk)			//PLL_SRC <= HRC
-			{
-				SystemCoreClock = __HSI;
-			}
-			else											//PLL_SRC <= XTAL
-			{
-				SystemCoreClock = __HSE;
-			}
-			
-			SystemCoreClock = SystemCoreClock / PLL_IN_DIV * PLL_FB_DIV * 4 / (2 << (2 - PLL_OUT_DIV));
-		}
-		else											//LFCK <= LRC
-		{
-			SystemCoreClock = __LSI;
-		}
-	}
-	
-	if(SYS->CLKDIV & SYS_CLKDIV_SYS_Msk) SystemCoreClock /= 2;
-	
-	CyclesPerUs = SystemCoreClock / 1000000;
+    if (SYS->CLKSEL & SYS_CLKSEL_SYS_Msk) //SYS_CLK  <= HFCK
+    {
+        if (SYS->CLKSEL & SYS_CLKSEL_HFCK_Msk) //HFCK <= XTAL
+        {
+            SystemCoreClock = __HSE;
+        }
+        else //HFCK <= HRC
+        {
+            if (SYS->HRCCR & SYS_HRCCR_DBL_Msk) //HRC = 40MHz
+            {
+                SystemCoreClock = __HSI * 2;
+            }
+            else //HRC = 20MHz
+            {
+                SystemCoreClock = __HSI;
+            }
+        }
+    }
+    else //SYS_CLK  <= LFCK
+    {
+        if (SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk) //LFCK <= PLL
+        {
+            if (SYS->PLLCR & SYS_PLLCR_INSEL_Msk) //PLL_SRC <= HRC
+            {
+                SystemCoreClock = __HSI;
+            }
+            else //PLL_SRC <= XTAL
+            {
+                SystemCoreClock = __HSE;
+            }
+
+            SystemCoreClock = SystemCoreClock / PLL_IN_DIV * PLL_FB_DIV * 4 / (2 << (2 - PLL_OUT_DIV));
+        }
+        else //LFCK <= LRC
+        {
+            SystemCoreClock = __LSI;
+        }
+    }
+
+    if (SYS->CLKDIV & SYS_CLKDIV_SYS_Msk)
+        SystemCoreClock /= 2;
+
+    CyclesPerUs = SystemCoreClock / 1000000;
 }
 
 /****************************************************************************************************************************************** 
@@ -129,152 +122,160 @@ void SystemCoreClockUpdate(void)
 * 注意事项: 
 ******************************************************************************************************************************************/
 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振荡器
-			switchCLK_20MHz();
-			break;
-		
-		case SYS_CLK_40MHz:			//1 内部高频40MHz RC振荡器
-			switchCLK_40MHz();
-			break;
-		
-		case SYS_CLK_32KHz:			//2 内部低频32KHz RC振荡器
-			switchCLK_32KHz();
-			break;
-		
-		case SYS_CLK_XTAL:			//3 外部晶体振荡器(2-30MHz)
-			switchCLK_XTAL();
-			break;
-		
-		case SYS_CLK_PLL:			//4 片内锁相环输出
-			switchCLK_PLL();
-			break;
-	}
-	
-	SYS->CLKDIV &= ~SYS_CLKDIV_SYS_Msk;
-	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);
-	}
+{
+    SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos);
+
+    Flash_Param_at_xMHz(120);
+
+    switch (SYS_CLK)
+    {
+    case SYS_CLK_20MHz: //0 内部高频20MHz RC振荡器
+        switchCLK_20MHz();
+        break;
+
+    case SYS_CLK_40MHz: //1 内部高频40MHz RC振荡器
+        switchCLK_40MHz();
+        break;
+
+    case SYS_CLK_32KHz: //2 内部低频32KHz RC振荡器
+        switchCLK_32KHz();
+        break;
+
+    case SYS_CLK_XTAL: //3 外部晶体振荡器(2-30MHz)
+        switchCLK_XTAL();
+        break;
+
+    case SYS_CLK_PLL: //4 片内锁相环输出
+        switchCLK_PLL();
+        break;
+    }
+
+    SYS->CLKDIV &= ~SYS_CLKDIV_SYS_Msk;
+    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)
 {
-	uint32_t i;
-	
-	SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
-				 (0 << SYS_HRCCR_DBL_Pos);			//HRC = 20MHz
-	
-	for(i = 0; i < 1000; i++) __NOP();
-	
-	SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk;			//HFCK  <=  HRC
-	SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos);		//SYS_CLK  <= HFCK
+    uint32_t i;
+
+    SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
+                 (0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
+
+    for (i = 0; i < 1000; i++)
+        __NOP();
+
+    SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk;      //HFCK  <=  HRC
+    SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK  <= HFCK
 }
 
 void switchCLK_40MHz(void)
 {
-	uint32_t i;
-	
-	SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
-				 (1 << SYS_HRCCR_DBL_Pos);			//HRC = 40MHz		
-	
-	for(i = 0; i < 1000; i++) __NOP();
-	
-	SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk;			//HFCK  <=  HRC
-	SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos);		//SYS_CLK  <= HFCK
+    uint32_t i;
+
+    SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
+                 (1 << SYS_HRCCR_DBL_Pos); //HRC = 40MHz
+
+    for (i = 0; i < 1000; i++)
+        __NOP();
+
+    SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk;      //HFCK  <=  HRC
+    SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK  <= HFCK
 }
 
 void switchCLK_32KHz(void)
 {
-	uint32_t i;
-	
-	SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
-			
-	SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
-	
-	for(i = 0; i < 100; i++) __NOP();
-	
-	SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk;			//LFCK  <=  LRC
-	SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk;				//SYS_CLK  <= LFCK
+    uint32_t i;
+
+    SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
+
+    SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
+
+    for (i = 0; i < 100; i++)
+        __NOP();
+
+    SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk; //LFCK  <=  LRC
+    SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk;  //SYS_CLK  <= LFCK
 }
 
 void switchCLK_XTAL(void)
 {
-	uint32_t i;
-	
-	SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
-		
-	for(i = 0; i < 1000; i++) __NOP();
-	
-	SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos);		//HFCK  <=  XTAL
-	SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos);		//SYS_CLK  <= HFCK
+    uint32_t i;
+
+    SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
+
+    for (i = 0; i < 1000; i++)
+        __NOP();
+
+    SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos); //HFCK  <=  XTAL
+    SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos);  //SYS_CLK  <= HFCK
 }
 
 void switchCLK_PLL(void)
 {
-	uint32_t i;
-	
-	PLLInit();
-	SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
-	
-	for(i = 0; i < 10000; i++) __NOP();
-	
-	SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos);		//LFCK  <=  PLL
-	SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk;				//SYS_CLK  <= LFCK
+    uint32_t i;
+
+    PLLInit();
+    SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
+
+    for (i = 0; i < 10000; i++)
+        __NOP();
+
+    SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos); //LFCK  <=  PLL
+    SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk;        //SYS_CLK  <= LFCK
 }
 
 void PLLInit(void)
 {
-	uint32_t i;
-	
-	if(SYS_PLL_SRC == SYS_CLK_20MHz)
-	{
-		SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
-					 (0 << SYS_HRCCR_DBL_Pos);		//HRC = 20MHz
-		
-		for(i = 0; i < 1000; i++) __NOP();
-		
-		SYS->PLLCR |= (1 << SYS_PLLCR_INSEL_Pos);	//PLL_SRC <= HRC
-	}
-	else if(SYS_PLL_SRC == SYS_CLK_XTAL)
-	{
-		SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
-		
-		for(i = 0; i < 20000; i++);
-		
-		SYS->PLLCR &= ~(1 << SYS_PLLCR_INSEL_Pos);	//PLL_SRC <= XTAL
-	}
-	
-	SYS->PLLDIV &= ~(SYS_PLLDIV_INDIV_Msk |
-					 SYS_PLLDIV_FBDIV_Msk |
-					 SYS_PLLDIV_OUTDIV_Msk);
-	SYS->PLLDIV |= (PLL_IN_DIV << SYS_PLLDIV_INDIV_Pos) |
-				   (PLL_FB_DIV << SYS_PLLDIV_FBDIV_Pos) |
-				   (PLL_OUT_DIV<< SYS_PLLDIV_OUTDIV_Pos);
-	
-	SYS->PLLCR &= ~(1 << SYS_PLLCR_OFF_Pos);
-	
-	while(SYS->PLLLOCK == 0);		//等待PLL锁定
+    uint32_t i;
+
+    if (SYS_PLL_SRC == SYS_CLK_20MHz)
+    {
+        SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
+                     (0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
+
+        for (i = 0; i < 1000; i++)
+            __NOP();
+
+        SYS->PLLCR |= (1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= HRC
+    }
+    else if (SYS_PLL_SRC == SYS_CLK_XTAL)
+    {
+        SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
+
+        for (i = 0; i < 20000; i++)
+            ;
+
+        SYS->PLLCR &= ~(1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= XTAL
+    }
+
+    SYS->PLLDIV &= ~(SYS_PLLDIV_INDIV_Msk |
+                     SYS_PLLDIV_FBDIV_Msk |
+                     SYS_PLLDIV_OUTDIV_Msk);
+    SYS->PLLDIV |= (PLL_IN_DIV << SYS_PLLDIV_INDIV_Pos) |
+                   (PLL_FB_DIV << SYS_PLLDIV_FBDIV_Pos) |
+                   (PLL_OUT_DIV << SYS_PLLDIV_OUTDIV_Pos);
+
+    SYS->PLLCR &= ~(1 << SYS_PLLCR_OFF_Pos);
+
+    while (SYS->PLLLOCK == 0)
+        ; //等待PLL锁定
 }

+ 12 - 16
bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h

@@ -2,28 +2,24 @@
 #define __SYSTEM_SWM320_H__
 
 #ifdef __cplusplus
- extern "C" {
+extern "C"
+{
 #endif
 
+    extern uint32_t SystemCoreClock; // System Clock Frequency (Core Clock)
+    extern uint32_t CyclesPerUs;     // Cycles per micro second
 
-extern uint32_t SystemCoreClock;		// System Clock Frequency (Core Clock)
-extern uint32_t CyclesPerUs;			// Cycles per micro second
+    extern void SystemInit(void);
 
+    extern void SystemCoreClockUpdate(void);
 
-extern void SystemInit(void);
-
-extern void SystemCoreClockUpdate (void);
-	 
-	 
-	 
-extern void switchCLK_20MHz(void);
-extern void switchCLK_40MHz(void);
-extern void switchCLK_32KHz(void);
-extern void switchCLK_XTAL(void);
-extern void switchCLK_PLL(void);
-
-extern void PLLInit(void);
+    extern void switchCLK_20MHz(void);
+    extern void switchCLK_40MHz(void);
+    extern void switchCLK_32KHz(void);
+    extern void switchCLK_XTAL(void);
+    extern void switchCLK_PLL(void);
 
+    extern void PLLInit(void);
 
 #ifdef __cplusplus
 }

+ 242 - 227
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c

@@ -19,7 +19,6 @@
 #include "SWM320.h"
 #include "SWM320_adc.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称: ADC_Init()
 * 功能说明:	ADC模数转换器初始化
@@ -28,128 +27,129 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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); //一些关键寄存器只能在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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -159,9 +159,9 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -171,9 +171,9 @@ void ADC_Open(ADC_TypeDef * ADCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -183,9 +183,9 @@ void ADC_Close(ADC_TypeDef * ADCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -195,28 +195,44 @@ void ADC_Start(ADC_TypeDef * ADCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
 }
 
 /****************************************************************************************************************************************** 
@@ -227,16 +243,16 @@ static uint32_t chn2idx(uint32_t chn)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -247,11 +263,11 @@ uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -262,13 +278,12 @@ uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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()
 * 功能说明:	转换完成中断使能
@@ -277,11 +292,11 @@ void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -292,11 +307,11 @@ void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -307,11 +322,11 @@ void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -322,11 +337,11 @@ void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -337,11 +352,11 @@ uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -352,11 +367,11 @@ void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -367,11 +382,11 @@ void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -382,11 +397,11 @@ void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -397,11 +412,11 @@ uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -412,11 +427,11 @@ void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -427,11 +442,11 @@ void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -442,11 +457,11 @@ void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -457,11 +472,11 @@ uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -472,11 +487,11 @@ void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -487,11 +502,11 @@ void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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));
 }
 
 /****************************************************************************************************************************************** 
@@ -502,9 +517,9 @@ void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
 * 输    出: 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、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及其组合(即“按位或”运算)
 } 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和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满中断状态
 
 #endif //__SWM320_ADC_H__

+ 462 - 463
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,584 +21,583 @@
 #include "SWM320.h"
 #include "SWM320_can.h"
 
+/****************************************************************************************************************************************** 
+* �賣㺭�滨妍:	CAN_Init()
+* �蠘�霂湔�:	CAN�亙藁�嘥���
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+*			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); //銝�鈭𥕦��桀�摮睃膥�芾��每AN�喲𡡒�嗉挽蝵�
+
+    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_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_Close()
+* �蠘�霂湔�:	CAN�亙藁�喲𡡒
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
+******************************************************************************************************************************************/
+void CAN_Close(CAN_TypeDef *CANx)
+{
+    CANx->CR |= (0x01 << CAN_CR_RST_Pos); //餈𥕦�憭滢�璅∪�嚗䔶��賢�����交𤣰�唳旿
+}
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_TXSuccess()
-* 髡夔佽隴:	楷冞岆瘁傖髡
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: uint32_t			1 楷冞傖髡    0 楷冞囮啖
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	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		�芸����甈∴��喃蝙�煾��仃韐伐�隞脰�銝W仃�����枂�踺��AK嚗劐�銝滚�霂閖���
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t CAN_TXSuccess(CAN_TypeDef * CANx)
-{
-	return (CANx->SR & CAN_SR_TXOK_Msk) ? 1 : 0;
-}
+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		�芸����甈∴��喃蝙�煾��仃韐伐�隞脰�銝W仃�����枂�踺��AK嚗劐�銝滚�霂閖���
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
+******************************************************************************************************************************************/
+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	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+*			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_AbortTransmit()
-* 髡夔佽隴:	笝砦楷冞
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 淏婓輛俴腔楷冞拸楊笝砦ㄛ筍硒俴森韜鍔綴�楷冞囮啖祥頗婬笭楷
+* �賣㺭�滨妍:	CAN_TXComplete()
+* �蠘�霂湔�:	�煾��糓�血���
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: uint32_t			1 撌脩�摰峕�    0 餈䀹𧊋摰峕�
+* 瘜冽�鈭钅★: �煾��◤Abort銋煺�閫血��煾����琜�雿��隡朞圻�穃������
 ******************************************************************************************************************************************/
-void CAN_AbortTransmit(CAN_TypeDef * CANx)
+uint32_t CAN_TXComplete(CAN_TypeDef *CANx)
 {
-	CANx->CMD = (1 << CAN_CMD_ABTTX_Pos);
+    return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_TXBufferReady()
-* 髡夔佽隴:	TX Buffer岆瘁袧掘疑褫眕迡⻌秏洘
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: uint32_t			1 眒袧掘疑    0 帤袧掘疑
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_TXSuccess()
+* �蠘�霂湔�:	�煾��糓�行���
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: uint32_t			1 �煾�����    0 �煾��仃韐�
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-uint32_t CAN_TXBufferReady(CAN_TypeDef * CANx)
+uint32_t CAN_TXSuccess(CAN_TypeDef *CANx)
 {
-	return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
+    return (CANx->SR & CAN_SR_TXOK_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_RXDataAvailable()
-* 髡夔佽隴:	RX FIFO笢岆瘁衄杅擂褫黍堤
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: uint32_t			1 衄杅擂褫黍堤    0 羶衄杅擂
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_AbortTransmit()
+* �蠘�霂湔�:	蝏�迫�煾��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 甇�銁餈𥡝�������瘜閧�甇g�雿��銵峕迨�賭誘�舘𥅾�煾��仃韐乩�隡𡁜��滚�
 ******************************************************************************************************************************************/
-uint32_t CAN_RXDataAvailable(CAN_TypeDef * CANx)
+void CAN_AbortTransmit(CAN_TypeDef *CANx)
 {
-	return (CANx->SR & CAN_SR_RXDA_Msk) ? 1 : 0;
+    CANx->CMD = (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_TXBufferReady()
+* �蠘�霂湔�:	TX Buffer�臬炏���憟賢虾隞亙��交���
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: uint32_t			1 撌脣�憭�末    0 �芸�憭�末
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_SetBaudrate(CAN_TypeDef * CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW)
+uint32_t CAN_TXBufferReady(CAN_TypeDef *CANx)
 {
-	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);
+    return (CANx->SR & CAN_SR_TXBR_Msk) ? 1 : 0;
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_SetFilter32b()
-* 髡夔佽隴:	扢离諉彶薦疏けㄛ1跺32弇薦疏け
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-*			uint32_t check		迵mask珨お樵隅賸諉彶善腔Message岆瘁岆赻撩剒猁腔ㄩcheck & (~mask) == ID & (~mask)腔Message籵徹徹薦
+* �賣㺭�滨妍:	CAN_RXDataAvailable()
+* �蠘�霂湔�:	RX FIFO銝剜糓�行��唳旿�航粉��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: uint32_t			1 �㗇㺭�桀虾霂餃枂    0 瘝⊥��唳旿
+* 瘜冽�鈭钅★: ��
+******************************************************************************************************************************************/
+uint32_t CAN_RXDataAvailable(CAN_TypeDef *CANx)
+{
+    return (CANx->SR & CAN_SR_RXDA_Msk) ? 1 : 0;
+}
+
+/****************************************************************************************************************************************** 
+* �賣㺭�滨妍:	CAN_SetBaudrate()
+* �蠘�霂湔�:	霈曄蔭瘜Y鸌��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+*			uint32_t baudrate	瘜Y鸌����喃�隡㰘��毺�
+*			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_SetBaudrate(CAN_TypeDef *CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW)
+{
+    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_SetFilter32b()
+* �蠘�霂湔�:	霈曄蔭�交𤣰皛斗郭�剁�1銝�32雿齿誘瘜W膥
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+*			uint32_t check		銝蒒ask銝�韏瑕�摰帋��交𤣰�啁�Message�臬炏�航䌊撌梢�閬��嚗䬙heck & (~mask) == ID & (~mask)��essage�朞�餈�誘
 *			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籵徹徹薦
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 霈曄蔭�漤�閬��靚�鍂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雿齿誘瘜W膥
+* 颲�    ��: 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耀輸
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: 霈曄蔭�漤�閬��靚�鍂CAN_Close()�喲𡡒CAN璅∪�
 ******************************************************************************************************************************************/
-void CAN_SetFilter16b(CAN_TypeDef * CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2)
+void CAN_SetFilter16b(CAN_TypeDef *CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2)
 {
-	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;
+    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_INTRXNotEmptyEn()
-* 髡夔佽隴:	絞RX FIFO笢衄杅擂奀ㄗ準諾ㄘ揖楷笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTRXNotEmptyEn()
+* �蠘�霂湔�:	敶𣫮X FIFO銝剜��唳旿�塚��䂿征嚗㕑圻�睲葉�凋蝙��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTRXNotEmptyEn(CAN_TypeDef * CANx)
+void CAN_INTRXNotEmptyEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_RXDA_Pos);
+    CANx->IE |= (1 << CAN_IE_RXDA_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTRXNotEmptyDis()
-* 髡夔佽隴:	絞RX FIFO笢衄杅擂奀ㄗ準諾ㄘ揖楷笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTRXNotEmptyDis()
+* �蠘�霂湔�:	敶𣫮X FIFO銝剜��唳旿�塚��䂿征嚗㕑圻�睲葉�剔�甇�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx)
+void CAN_INTRXNotEmptyDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_RXDA_Pos);
+    CANx->IE &= ~(1 << CAN_IE_RXDA_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTTXBufEmptyEn()
-* 髡夔佽隴:	絞TX Buffer諾奀揖楷笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTTXBufEmptyEn()
+* �蠘�霂湔�:	敶孏X Buffer蝛箸𧒄閫血�銝剜鱏雿輯�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx)
+void CAN_INTTXBufEmptyEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_TXBR_Pos);
+    CANx->IE |= (1 << CAN_IE_TXBR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTTXBufEmptyDis()
-* 髡夔佽隴:	絞TX Buffer諾奀揖楷笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTTXBufEmptyDis()
+* �蠘�霂湔�:	敶孏X Buffer蝛箸𧒄閫血�銝剜鱏蝳�迫
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx)
+void CAN_INTTXBufEmptyDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_TXBR_Pos);
+    CANx->IE &= ~(1 << CAN_IE_TXBR_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTErrWarningEn()
-* 髡夔佽隴:	TXERR/RXERR數杅硉湛善Error Warning Limit奀揖楷笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTErrWarningEn()
+* �蠘�霂湔�:	TXERR/RXERR霈⊥㺭�潸噢�蚩rror Warning Limit�嗉圻�睲葉�凋蝙��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTErrWarningEn(CAN_TypeDef * CANx)
+void CAN_INTErrWarningEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_ERRWARN_Pos);
+    CANx->IE |= (1 << CAN_IE_ERRWARN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTErrWarningDis()
-* 髡夔佽隴:	TXERR/RXERR數杅硉湛善Error Warning Limit奀揖楷笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTErrWarningDis()
+* �蠘�霂湔�:	TXERR/RXERR霈⊥㺭�潸噢�蚩rror Warning Limit�嗉圻�睲葉�剔�甇�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTErrWarningDis(CAN_TypeDef * CANx)
+void CAN_INTErrWarningDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos);
+    CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTRXOverflowEn()
-* 髡夔佽隴:	RX FIFO 祛堤奀揖楷笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTRXOverflowEn()
+* �蠘�霂湔�:	RX FIFO 皞W枂�嗉圻�睲葉�凋蝙��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowEn(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_RXOV_Pos);
+    CANx->IE |= (1 << CAN_IE_RXOV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTRXOverflowDis()
-* 髡夔佽隴:	RX FIFO 祛堤奀揖楷笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTRXOverflowDis()
+* �蠘�霂湔�:	RX FIFO 皞W枂�嗉圻�睲葉�剔�甇�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowDis(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_RXOV_Pos);
+    CANx->IE &= ~(1 << CAN_IE_RXOV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTRXOverflowClear()
-* 髡夔佽隴:	RX FIFO 祛堤笢剿ラ壺
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTRXOverflowClear()
+* �蠘�霂湔�:	RX FIFO 皞W枂銝剜鱏皜�膄
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTRXOverflowClear(CAN_TypeDef * CANx)
+void CAN_INTRXOverflowClear(CAN_TypeDef *CANx)
 {
-	CANx->CMD = (1 << CAN_CMD_CLROV_Pos);
+    CANx->CMD = (1 << CAN_CMD_CLROV_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTWakeupEn()
-* 髡夔佽隴:	遢倳岈璃揖楷笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTWakeupEn()
+* �蠘�霂湔�:	�日�鈭衤辣閫血�銝剜鱏雿輯�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTWakeupEn(CAN_TypeDef * CANx)
+void CAN_INTWakeupEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_WKUP_Pos);
+    CANx->IE |= (1 << CAN_IE_WKUP_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTWakeupDis()
-* 髡夔佽隴:	遢倳岈璃揖楷笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTWakeupDis()
+* �蠘�霂湔�:	�日�鈭衤辣閫血�銝剜鱏蝳�迫
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTWakeupDis(CAN_TypeDef * CANx)
+void CAN_INTWakeupDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_WKUP_Pos);
+    CANx->IE &= ~(1 << CAN_IE_WKUP_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTErrPassiveEn()
-* 髡夔佽隴:	TXERR/RXERR數杅硉湛善127奀笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTErrPassiveEn()
+* �蠘�霂湔�:	TXERR/RXERR霈⊥㺭�潸噢��127�嗡葉�凋蝙��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTErrPassiveEn(CAN_TypeDef * CANx)
+void CAN_INTErrPassiveEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_ERRPASS_Pos);
+    CANx->IE |= (1 << CAN_IE_ERRPASS_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTErrPassiveDis()
-* 髡夔佽隴:	TXERR/RXERR數杅硉湛善127奀笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTErrPassiveDis()
+* �蠘�霂湔�:	TXERR/RXERR霈⊥㺭�潸噢��127�嗡葉�剔�甇�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTErrPassiveDis(CAN_TypeDef * CANx)
+void CAN_INTErrPassiveDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos);
+    CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTArbitrLostEn()
-* 髡夔佽隴:	笯笛囮啖笢剿妏夔
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTArbitrLostEn()
+* �蠘�霂湔�:	隞脰�憭梯揖銝剜鱏雿輯�
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTArbitrLostEn(CAN_TypeDef * CANx)
+void CAN_INTArbitrLostEn(CAN_TypeDef *CANx)
 {
-	CANx->IE |= (1 << CAN_IE_ARBLOST_Pos);
+    CANx->IE |= (1 << CAN_IE_ARBLOST_Pos);
 }
 
 /****************************************************************************************************************************************** 
-* 滲杅靡備:	CAN_INTArbitrLostDis()
-* 髡夔佽隴:	笯笛囮啖笢剿輦砦
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: 拸
-* 蛁砩岈砐: 拸
+* �賣㺭�滨妍:	CAN_INTArbitrLostDis()
+* �蠘�霂湔�:	隞脰�憭梯揖銝剜鱏蝳�迫
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: ��
+* 瘜冽�鈭钅★: ��
 ******************************************************************************************************************************************/
-void CAN_INTArbitrLostDis(CAN_TypeDef * CANx)
+void CAN_INTArbitrLostDis(CAN_TypeDef *CANx)
 {
-	CANx->IE &= ~(1 << CAN_IE_ARBLOST_Pos);
+    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_INTStat()
-* 髡夔佽隴:	脤戙笢剿袨怓
-* 怀    ⻌: CAN_TypeDef * CANx	硌隅猁掩扢离腔CAN諉諳ㄛ衄虴硉婦嬤CAN
-* 怀    堤: uint32_t			絞ゴ笢剿袨怓
-* 蛁砩岈砐: CANx->IF黍龰ラ錨ㄛ秪森婓笢剿ISR笢硐夔黍龰珨棒ㄛ祥夔嗣棒黍龰
+* �賣㺭�滨妍:	CAN_INTStat()
+* �蠘�霂湔�:	�亥砭銝剜鱏�嗆��
+* 颲�    ��: CAN_TypeDef * CANx	���閬�◤霈曄蔭��AN�亙藁嚗峕����澆��拴AN
+* 颲�    ��: uint32_t			敶枏�銝剜鱏�嗆��
+* 瘜冽�鈭钅★: CANx->IF霂餃�皜�妟嚗��甇文銁銝剜鱏ISR銝剖蘨�質粉�碶�甈∴�銝滩�憭𡁏活霂餃�
 ******************************************************************************************************************************************/
-uint32_t CAN_INTStat(CAN_TypeDef * CANx)
+uint32_t CAN_INTStat(CAN_TypeDef *CANx)
 {
-	return CANx->IF;
+    return CANx->IF;
 }

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

@@ -1,130 +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、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
 } 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、CAN_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);
+void CAN_INTErrWarningEn(CAN_TypeDef *CANx);
+void CAN_INTErrWarningDis(CAN_TypeDef *CANx);
 
-void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx);
-void CAN_INTTXBufEmptyDis(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);
+void CAN_INTWakeupEn(CAN_TypeDef *CANx);
+void CAN_INTWakeupDis(CAN_TypeDef *CANx);
 
-void CAN_INTRXOverflowEn(CAN_TypeDef * CANx);
-void CAN_INTRXOverflowDis(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);
+void CAN_INTArbitrLostEn(CAN_TypeDef *CANx);
+void CAN_INTArbitrLostDis(CAN_TypeDef *CANx);
 
-void CAN_INTErrPassiveEn(CAN_TypeDef * CANx);
-void CAN_INTErrPassiveDis(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);
-
-void CAN_INTBusErrorEn(CAN_TypeDef * CANx);
-void CAN_INTBusErrorDis(CAN_TypeDef * CANx);
-
-uint32_t CAN_INTStat(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;
 }

+ 8 - 11
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h

@@ -1,16 +1,13 @@
 #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()
@@ -21,7 +18,7 @@ void CRC_Init(CRC_TypeDef * CRCx, uint32_t mode, uint32_t out_not, uint32_t out_
 ******************************************************************************************************************************************/
 static __INLINE void CRC_Write(uint32_t data)
 {
-	CRC->DATAIN = data;
+    CRC->DATAIN = data;
 }
 
 /****************************************************************************************************************************************** 
@@ -33,7 +30,7 @@ static __INLINE void CRC_Write(uint32_t data)
 ******************************************************************************************************************************************/
 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通道配置,用于存储器间(如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 数据搬运未完成
 
 #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__

+ 36 - 38
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c

@@ -19,13 +19,11 @@
 #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擦除
@@ -34,14 +32,14 @@ IAP_Flash_Write_t IAP_Flash_Write = (IAP_Flash_Write_t)0x11000801;
 * 注意事项: 无
 ******************************************************************************************************************************************/
 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();
 }
 
 /****************************************************************************************************************************************** 
@@ -55,13 +53,13 @@ void FLASH_Erase(uint32_t addr)
 ******************************************************************************************************************************************/
 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();
 }
 
 /****************************************************************************************************************************************** 
@@ -73,25 +71,25 @@ void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count)
 ******************************************************************************************************************************************/
 void Flash_Param_at_xMHz(uint32_t x)
 {
-	__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();
+    __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();
 }

+ 0 - 4
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h

@@ -1,14 +1,11 @@
 #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_xMHz(uint32_t x);
 
-
-
 typedef void (*IAP_Cache_Reset_t)(void);
 typedef void (*IAP_Flash_Param_t)(uint32_t cfg0, uint32_t cfg1);
 typedef void (*IAP_Flash_Erase_t)(uint32_t sector);
@@ -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只有下拉(PN0、PN1、PN2三个引脚有上拉没下拉)
+* 鍑芥暟鍚嶇О: 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);     //将参数指定的从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);
 
 #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__

+ 53 - 51
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c

@@ -31,45 +31,47 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
-	}
+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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -79,9 +81,9 @@ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -91,9 +93,9 @@ void LCD_Start(LCD_TypeDef * LCDx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -103,9 +105,9 @@ uint32_t LCD_IsBusy(LCD_TypeDef * LCDx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTEn(LCD_TypeDef * LCDx)
+void LCD_INTEn(LCD_TypeDef *LCDx)
 {
-	LCDx->IM = 0;
+    LCDx->IM = 0;
 }
 
 /****************************************************************************************************************************************** 
@@ -115,9 +117,9 @@ void LCD_INTEn(LCD_TypeDef * LCDx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTDis(LCD_TypeDef * LCDx)
+void LCD_INTDis(LCD_TypeDef *LCDx)
 {
-	LCDx->IM = 1;
+    LCDx->IM = 1;
 }
 
 /****************************************************************************************************************************************** 
@@ -127,9 +129,9 @@ void LCD_INTDis(LCD_TypeDef * LCDx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void LCD_INTClr(LCD_TypeDef * LCDx)
+void LCD_INTClr(LCD_TypeDef *LCDx)
 {
-	LCDx->IF = 1;
+    LCDx->IF = 1;
 }
 
 /****************************************************************************************************************************************** 
@@ -139,7 +141,7 @@ void LCD_INTClr(LCD_TypeDef * LCDx)
 * 输    出: 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 - 61
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h

@@ -1,73 +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 {	
-	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_SAMPLEDGE_RISE	0	//屏幕在DOTCLK的上升沿采样数据
-#define LCD_SAMPLEDGE_FALL	1	//屏幕在DOTCLK的下降沿采样数据
+#define LCD_HSYNC_1DOTCLK 0 //1涓狣OTCLK
+#define LCD_HSYNC_2DOTCLK 1
+#define LCD_HSYNC_3DOTCLK 2
+#define LCD_HSYNC_4DOTCLK 3
 
-#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
 
-#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;
 }

+ 17 - 21
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__

+ 183 - 184
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_port.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称: PORT_Init()
 * 功能说明:	端口引脚功能选择,可用的功能见"SWM320_port.h"文件
@@ -35,187 +34,187 @@
 ******************************************************************************************************************************************/
 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;
+    }
 }

+ 410 - 418
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_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
+#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
+#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 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__

File diff suppressed because it is too large
+ 481 - 400
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c


+ 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、PWM_CLKDIV_8
 
-#define PWM_CH_A	0
-#define PWM_CH_B	1
+    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 高电平
 
-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,开始PWM输出
+void PWM_Stop(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB);    //关闭PWM,停止PWM输出
+
+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__

+ 140 - 134
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_rtc.h"
 
-
 static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date);
 /****************************************************************************************************************************************** 
 * 函数名称:	RTC_Init()
@@ -31,44 +30,45 @@ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date);
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -78,9 +78,9 @@ void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void RTC_Start(RTC_TypeDef * RTCx)
+void RTC_Start(RTC_TypeDef *RTCx)
 {
-	RTCx->EN = 1;
+    RTCx->EN = 1;
 }
 
 /****************************************************************************************************************************************** 
@@ -90,9 +90,9 @@ void RTC_Start(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void RTC_Stop(RTC_TypeDef * RTCx)
+void RTC_Stop(RTC_TypeDef *RTCx)
 {
-	RTCx->EN = 0;
+    RTCx->EN = 0;
 }
 
 /****************************************************************************************************************************************** 
@@ -103,15 +103,15 @@ void RTC_Stop(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
 }
 
 /****************************************************************************************************************************************** 
@@ -122,24 +122,27 @@ void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -155,21 +158,24 @@ 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -179,9 +185,9 @@ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -191,9 +197,9 @@ void RTC_IntSecondEn(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -203,9 +209,9 @@ void RTC_IntSecondDis(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -215,9 +221,9 @@ void RTC_IntSecondClr(RTC_TypeDef * RTCx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -227,9 +233,9 @@ uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -239,9 +245,9 @@ void RTC_IntMinuteEn(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -251,9 +257,9 @@ void RTC_IntMinuteDis(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -263,9 +269,9 @@ void RTC_IntMinuteClr(RTC_TypeDef * RTCx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -275,9 +281,9 @@ uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -287,9 +293,9 @@ void RTC_IntHourEn(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -299,9 +305,9 @@ void RTC_IntHourDis(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -311,9 +317,9 @@ void RTC_IntHourClr(RTC_TypeDef * RTCx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -323,9 +329,9 @@ uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -335,9 +341,9 @@ void RTC_IntDateEn(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -347,9 +353,9 @@ void RTC_IntDateDis(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -359,9 +365,9 @@ void RTC_IntDateClr(RTC_TypeDef * RTCx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -371,9 +377,9 @@ uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -383,9 +389,9 @@ void RTC_IntAlarmEn(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -395,9 +401,9 @@ void RTC_IntAlarmDis(RTC_TypeDef * RTCx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -407,7 +413,7 @@ void RTC_IntAlarmClr(RTC_TypeDef * RTCx)
 * 输    出: 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__

+ 483 - 451
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_sdio.h"
 
-
 SD_CardInfo SD_cardInfo;
 
 /****************************************************************************************************************************************** 
@@ -33,98 +32,97 @@ SD_CardInfo SD_cardInfo;
 ******************************************************************************************************************************************/
 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, 检测工作电压、检测是否支持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;
 }
 
 /****************************************************************************************************************************************** 
@@ -137,25 +135,30 @@ uint32_t SDIO_Init(uint32_t freq)
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -169,28 +172,33 @@ uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[])
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -204,22 +212,25 @@ uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -232,25 +243,30 @@ uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t bu
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -264,28 +280,33 @@ uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[])
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -299,22 +320,25 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b
 ******************************************************************************************************************************************/
 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -332,263 +356,271 @@ uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buf
 * 注意事项: 无
 ******************************************************************************************************************************************/
 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;
-}
+{
+    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;
+}
 
 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 = (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);
+    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;
 }

+ 100 - 106
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);
@@ -135,9 +129,9 @@ uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buf
 
 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]);

+ 62 - 49
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c

@@ -28,44 +28,55 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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)
+        ;
 }
 
 /****************************************************************************************************************************************** 
@@ -77,12 +88,13 @@ void SDRAM_Init(SDRAM_InitStructure * initStruct)
 ******************************************************************************************************************************************/
 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();
 }
 
 /****************************************************************************************************************************************** 
@@ -94,10 +106,11 @@ void SDRAM_Enable(void)
 ******************************************************************************************************************************************/
 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、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命令到另一个命令间延时
 } 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);

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

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_spi.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称:	SPI_Init()
 * 功能说明:	SPI同步串行接口初始化,包括帧长度设定、时序设定、速度设定、中断设定、FIFO触发设定
@@ -30,61 +29,61 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
-	
-	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;
-	}
+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);
+
+    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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -94,9 +93,9 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -106,9 +105,9 @@ void SPI_Open(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void SPI_Close(SPI_TypeDef * SPIx)
+void SPI_Close(SPI_TypeDef *SPIx)
 {
-	SPIx->CTRL &= ~SPI_CTRL_EN_Msk;
+    SPIx->CTRL &= ~SPI_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
@@ -118,9 +117,9 @@ void SPI_Close(SPI_TypeDef * SPIx)
 * 输    出: uint32_t				读取到的数据
 * 注意事项: 无
 ******************************************************************************************************************************************/
-uint32_t SPI_Read(SPI_TypeDef * SPIx)
+uint32_t SPI_Read(SPI_TypeDef *SPIx)
 {
-	return SPIx->DATA;
+    return SPIx->DATA;
 }
 
 /****************************************************************************************************************************************** 
@@ -131,9 +130,9 @@ uint32_t SPI_Read(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void SPI_Write(SPI_TypeDef * SPIx, uint32_t data)
+void SPI_Write(SPI_TypeDef *SPIx, uint32_t data)
 {
-	SPIx->DATA = data;
+    SPIx->DATA = data;
 }
 
 /****************************************************************************************************************************************** 
@@ -144,13 +143,14 @@ void SPI_Write(SPI_TypeDef * SPIx, uint32_t data)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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)
+        ;
 }
 
 /****************************************************************************************************************************************** 
@@ -161,12 +161,13 @@ void SPI_WriteWithWait(SPI_TypeDef * SPIx, 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -176,9 +177,9 @@ uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -188,9 +189,9 @@ uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -200,12 +201,11 @@ uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx)
 * 输    出: 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半满中断使能
@@ -213,9 +213,9 @@ uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -225,9 +225,9 @@ void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -237,9 +237,9 @@ void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -249,9 +249,9 @@ void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -261,9 +261,9 @@ uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -273,9 +273,9 @@ void SPI_INTRXFullEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -285,9 +285,9 @@ void SPI_INTRXFullDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -297,9 +297,9 @@ void SPI_INTRXFullClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -309,9 +309,9 @@ uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -321,9 +321,9 @@ void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -333,9 +333,9 @@ void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -345,9 +345,9 @@ void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -357,9 +357,9 @@ uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -369,9 +369,9 @@ void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -381,9 +381,9 @@ void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -393,9 +393,9 @@ void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -405,9 +405,9 @@ uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -417,9 +417,9 @@ void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -429,9 +429,9 @@ void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -441,9 +441,9 @@ void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -453,9 +453,9 @@ uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -465,9 +465,9 @@ void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -477,9 +477,9 @@ void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -489,9 +489,9 @@ void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -501,9 +501,9 @@ uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -513,9 +513,9 @@ void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -525,9 +525,9 @@ void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -537,7 +537,7 @@ void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx)
 * 输    出: 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、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  空且发送移位寄存器空中断使能
 } 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是否空,如果不空则可以继续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);
 
 #endif //__SWM320_SPI_H__

+ 24 - 21
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_sram.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称:	SRAM_Init()
 * 功能说明:	SRAM控制器初始化
@@ -29,25 +28,29 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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,根据SRAM芯片所能跑的最高频率选择合适分频
+    uint8_t DataWidth; //SRAM_DATAWIDTH_8、SRAM_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__

+ 263 - 258
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_timr.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称: TIMR_Init()
 * 功能说明:	TIMR定时器/计数器初始化
@@ -32,67 +31,73 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -102,9 +107,9 @@ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t in
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Start(TIMR_TypeDef * TIMRx)
+void TIMR_Start(TIMR_TypeDef *TIMRx)
 {
-	TIMRx->CTRL |= TIMR_CTRL_EN_Msk;
+    TIMRx->CTRL |= TIMR_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
@@ -114,9 +119,9 @@ void TIMR_Start(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void TIMR_Stop(TIMR_TypeDef * TIMRx)
+void TIMR_Stop(TIMR_TypeDef *TIMRx)
 {
-	TIMRx->CTRL &= ~TIMR_CTRL_EN_Msk;
+    TIMRx->CTRL &= ~TIMR_CTRL_EN_Msk;
 }
 
 /****************************************************************************************************************************************** 
@@ -126,34 +131,34 @@ void TIMR_Stop(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -163,34 +168,34 @@ void TIMR_Halt(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -201,9 +206,9 @@ void TIMR_Resume(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period)
+void TIMR_SetPeriod(TIMR_TypeDef *TIMRx, uint32_t period)
 {
-	TIMRx->LDVAL = period;
+    TIMRx->LDVAL = period;
 }
 
 /****************************************************************************************************************************************** 
@@ -213,9 +218,9 @@ void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period)
 * 输    出: uint32_t				当前定时/计数周期
 * 注意事项: 无
 ******************************************************************************************************************************************/
-uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx)
+uint32_t TIMR_GetPeriod(TIMR_TypeDef *TIMRx)
 {
-	return TIMRx->LDVAL; 
+    return TIMRx->LDVAL;
 }
 
 /****************************************************************************************************************************************** 
@@ -225,9 +230,9 @@ uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx)
 * 输    出: uint32_t				当前计数值
 * 注意事项: 无
 ******************************************************************************************************************************************/
-uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx)
+uint32_t TIMR_GetCurValue(TIMR_TypeDef *TIMRx)
 {
-	return TIMRx->CVAL;
+    return TIMRx->CVAL;
 }
 
 /****************************************************************************************************************************************** 
@@ -237,40 +242,40 @@ uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -280,34 +285,34 @@ void TIMR_INTEn(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -317,34 +322,34 @@ void TIMR_INTDis(TIMR_TypeDef * TIMRx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -354,32 +359,31 @@ void TIMR_INTClr(TIMR_TypeDef * TIMRx)
 * 输    出: 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()
@@ -390,16 +394,17 @@ uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx)
 * 注意事项: 无
 ******************************************************************************************************************************************/
 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);
 }
 
 /****************************************************************************************************************************************** 
@@ -410,8 +415,8 @@ void Pulse_Init(uint32_t pulse, uint32_t int_en)
 * 注意事项: 无
 ******************************************************************************************************************************************/
 void Pulse_Start(void)
-{	
-	TIMRG->PCTRL |= (1 << TIMRG_PCTRL_EN_Pos);
+{
+    TIMRG->PCTRL |= (1 << TIMRG_PCTRL_EN_Pos);
 }
 
 /****************************************************************************************************************************************** 
@@ -423,14 +428,14 @@ void Pulse_Start(void)
 ******************************************************************************************************************************************/
 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__

+ 208 - 194
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_uart.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称:	UART_Init()
 * 功能说明:	UART串口初始化
@@ -30,106 +29,114 @@
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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的话,在未接收到数据时就会一直触发中断;
+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设置值加一
 	*/
-	switch((uint32_t)UARTx)  // 软件复位不能清零 NVIC 寄存器,若不手动清除,下面的代码清零 RXTHR 时会导致一直进入 ISR
+    switch ((uint32_t)UARTx) // 软件复位不能清零 NVIC 寄存器,若不手动清除,下面的代码清零 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;
     }
-	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;
-	}
 }
 
 /****************************************************************************************************************************************** 
@@ -139,9 +146,9 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -151,9 +158,9 @@ void UART_Open(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -164,9 +171,9 @@ void UART_Close(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data)
+void UART_WriteByte(UART_TypeDef *UARTx, uint32_t data)
 {
-	UARTx->DATA = data;
+    UARTx->DATA = data;
 }
 
 /****************************************************************************************************************************************** 
@@ -177,15 +184,16 @@ void UART_WriteByte(UART_TypeDef * UARTx, 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -195,9 +203,9 @@ uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -207,9 +215,9 @@ uint32_t UART_IsTXBusy(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -219,9 +227,9 @@ uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx)
 * 输    出: uint32_t				1 发送FIFO满    0 发送FIFO不满
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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;
 }
 
 /****************************************************************************************************************************************** 
@@ -232,10 +240,10 @@ uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 不要在串口工作时更改波特率,使用此函数前请先调用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);
 }
 
 /****************************************************************************************************************************************** 
@@ -245,9 +253,9 @@ void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate)
 * 输    出: uint32_t				当前波特率
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -259,11 +267,11 @@ uint32_t UART_GetBaudrate(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -273,9 +281,9 @@ void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -288,12 +296,12 @@ uint32_t UART_CTSLineState(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -303,9 +311,9 @@ void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, ui
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -317,11 +325,11 @@ uint32_t UART_RTSLineState(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -331,9 +339,9 @@ void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generat
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -343,9 +351,9 @@ void UART_LINGenerate(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -355,9 +363,9 @@ uint32_t UART_LINIsDetected(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -370,19 +378,25 @@ uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 自动波特率检测时不能开启奇偶校验
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -392,20 +406,20 @@ void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar)
 * 输    出: 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;
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -415,9 +429,9 @@ uint32_t UART_ABRIsDone(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -427,9 +441,9 @@ void UART_INTRXThresholdEn(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -439,9 +453,9 @@ void UART_INTRXThresholdDis(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -451,9 +465,9 @@ uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -463,9 +477,9 @@ void UART_INTTXThresholdEn(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -475,9 +489,9 @@ void UART_INTTXThresholdDis(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -487,9 +501,9 @@ uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -499,9 +513,9 @@ void UART_INTTimeoutEn(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -511,9 +525,9 @@ void UART_INTTimeoutDis(UART_TypeDef * UARTx)
 * 输    出: 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;
 }
 
 /****************************************************************************************************************************************** 
@@ -523,9 +537,9 @@ uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -535,9 +549,9 @@ void UART_INTTXDoneEn(UART_TypeDef * UARTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -547,7 +561,7 @@ void UART_INTTXDoneDis(UART_TypeDef * UARTx)
 * 输    出: uint32_t				1 发送FIFO空且发送移位寄存器空		0 发送FIFO或发送移位寄存器未空
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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; //数据位位数,可取值UART_DATA_8BIT、UART_DATA_9BIT
 
+    uint8_t Parity; //奇偶校验位,可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、UART_PARITY_ZERO
 
-#define UART_DATA_8BIT		0
-#define UART_DATA_9BIT		1
+    uint8_t StopBits; //停止位位数,可取值UART_STOP_1BIT、UART_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; //当RX FIFO中数据个数 >  RXThreshold时触发中断
 
-#define UART_STOP_1BIT		0
-#define UART_STOP_2BIT		1
+    uint8_t TXThreshold;    //取值0--7
+    uint8_t TXThresholdIEn; //当TX 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;  //超时中断,RX 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); //读取一个字节数据,并指出数据是否Valid
 
-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是否空,如果不空则可以继续UART_ReadByte()
+uint32_t UART_IsTXFIFOFull(UART_TypeDef *UARTx);  //发送FIFO是否满,如果不满则可以继续UART_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__

+ 31 - 32
bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c

@@ -21,7 +21,6 @@
 #include "SWM320.h"
 #include "SWM320_wdt.h"
 
-
 /****************************************************************************************************************************************** 
 * 函数名称:	WDT_Init()
 * 功能说明:	WDT看门狗初始化
@@ -31,26 +30,26 @@
 * 输    出: 无
 * 注意事项: 复位使能时中断不起作用,因为计数周期结束时芯片直接复位了,无法响应中断
 ******************************************************************************************************************************************/
-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);
+    }
 }
 
 /****************************************************************************************************************************************** 
@@ -60,9 +59,9 @@ void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -72,9 +71,9 @@ void WDT_Start(WDT_TypeDef * WDTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-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);
 }
 
 /****************************************************************************************************************************************** 
@@ -84,9 +83,9 @@ void WDT_Stop(WDT_TypeDef * WDTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void WDT_Feed(WDT_TypeDef * WDTx)
+void WDT_Feed(WDT_TypeDef *WDTx)
 {
-	WDTx->FEED = 0x55;
+    WDTx->FEED = 0x55;
 }
 
 /****************************************************************************************************************************************** 
@@ -96,9 +95,9 @@ void WDT_Feed(WDT_TypeDef * WDTx)
 * 输    出: int32_t					看门狗当前计数值
 * 注意事项: 无
 ******************************************************************************************************************************************/
-int32_t WDT_GetValue(WDT_TypeDef * WDTx)
+int32_t WDT_GetValue(WDT_TypeDef *WDTx)
 {
-	return WDTx->VALUE;
+    return WDTx->VALUE;
 }
 
 /****************************************************************************************************************************************** 
@@ -108,9 +107,9 @@ int32_t WDT_GetValue(WDT_TypeDef * WDTx)
 * 输    出: 无
 * 注意事项: 无
 ******************************************************************************************************************************************/
-void WDT_INTClr(WDT_TypeDef * WDTx)
+void WDT_INTClr(WDT_TypeDef *WDTx)
 {
-	WDTx->IF = 1;
+    WDTx->IF = 1;
 }
 
 /****************************************************************************************************************************************** 
@@ -120,7 +119,7 @@ void WDT_INTClr(WDT_TypeDef * WDTx)
 * 输    出: int32_t					1 发生中断溢出    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__

Some files were not shown because too many files changed in this diff