From 22513fe86ceed359b0f6bd3ea055b65ff41a92df Mon Sep 17 00:00:00 2001 From: yanmowudi Date: Thu, 6 May 2021 10:10:29 +0800 Subject: update swm320 libraries --- bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h | 6633 ++++++++++---------- .../libraries/CMSIS/DeviceSupport/system_SWM320.c | 426 +- .../libraries/CMSIS/DeviceSupport/system_SWM320.h | 28 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_adc.c | 298 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_adc.h | 78 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_can.c | 96 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_can.h | 52 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_crc.h | 30 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_dma.h | 14 +- .../SWM320_StdPeriph_Driver/SWM320_exti.h | 22 +- .../SWM320_StdPeriph_Driver/SWM320_flash.c | 66 +- .../SWM320_StdPeriph_Driver/SWM320_flash.h | 2 +- .../SWM320_StdPeriph_Driver/SWM320_gpio.c | 2 +- .../SWM320_StdPeriph_Driver/SWM320_gpio.h | 18 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h | 22 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c | 119 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h | 9 +- .../SWM320_StdPeriph_Driver/SWM320_norflash.h | 10 +- .../SWM320_StdPeriph_Driver/SWM320_port.c | 30 +- .../SWM320_StdPeriph_Driver/SWM320_port.h | 8 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c | 230 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h | 74 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c | 284 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h | 14 +- .../SWM320_StdPeriph_Driver/SWM320_sdio.c | 164 +- .../SWM320_StdPeriph_Driver/SWM320_sdio.h | 16 +- .../SWM320_StdPeriph_Driver/SWM320_sdram.c | 46 +- .../SWM320_StdPeriph_Driver/SWM320_sdram.h | 16 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_spi.c | 406 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_spi.h | 42 +- .../SWM320_StdPeriph_Driver/SWM320_sram.c | 26 +- .../SWM320_StdPeriph_Driver/SWM320_sram.h | 4 +- .../SWM320_StdPeriph_Driver/SWM320_timr.c | 182 +- .../SWM320_StdPeriph_Driver/SWM320_timr.h | 28 +- .../SWM320_StdPeriph_Driver/SWM320_uart.c | 368 +- .../SWM320_StdPeriph_Driver/SWM320_uart.h | 32 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c | 88 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h | 14 +- 38 files changed, 4994 insertions(+), 5003 deletions(-) diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h index 55eb7812f0..4ac927b7b9 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h @@ -8,83 +8,83 @@ */ typedef enum IRQn { - /****** Cortex-M0 Processor Exceptions Numbers **********************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ - - /****** Cortex-M4 specific Interrupt Numbers ************************************************/ - GPIOA0_IRQn = 0, - GPIOA1_IRQn = 1, - GPIOA2_IRQn = 2, - GPIOA3_IRQn = 3, - GPIOA4_IRQn = 4, - GPIOA5_IRQn = 5, - GPIOA6_IRQn = 6, - GPIOA7_IRQn = 7, - GPIOB0_IRQn = 8, - GPIOB1_IRQn = 9, - GPIOB2_IRQn = 10, - GPIOB3_IRQn = 11, - GPIOB4_IRQn = 12, - GPIOB5_IRQn = 13, - GPIOB6_IRQn = 14, - GPIOB7_IRQn = 15, - GPIOC0_IRQn = 16, - GPIOC1_IRQn = 17, - GPIOC2_IRQn = 18, - GPIOC3_IRQn = 19, - GPIOC4_IRQn = 20, - GPIOC5_IRQn = 21, - GPIOC6_IRQn = 22, - GPIOC7_IRQn = 23, - GPIOM0_IRQn = 24, - GPIOM1_IRQn = 25, - GPIOM2_IRQn = 26, - GPIOM3_IRQn = 27, - GPIOM4_IRQn = 28, - GPIOM5_IRQn = 29, - GPIOM6_IRQn = 30, - GPIOM7_IRQn = 31, - DMA_IRQn = 32, - LCD_IRQn = 33, - NORFLC_IRQn = 34, - CAN_IRQn = 35, - PULSE_IRQn = 36, - WDT_IRQn = 37, - PWM_IRQn = 38, - UART0_IRQn = 39, - UART1_IRQn = 40, - UART2_IRQn = 41, - UART3_IRQn = 42, - UART4_IRQn = 43, - I2C0_IRQn = 44, - I2C1_IRQn = 45, - SPI0_IRQn = 46, - ADC0_IRQn = 47, - RTC_IRQn = 48, - BOD_IRQn = 49, - SDIO_IRQn = 50, - GPIOA_IRQn = 51, - GPIOB_IRQn = 52, - GPIOC_IRQn = 53, - GPIOM_IRQn = 54, - GPION_IRQn = 55, - GPIOP_IRQn = 56, - ADC1_IRQn = 57, - FPU_IRQn = 58, - SPI1_IRQn = 59, - TIMR0_IRQn = 60, - TIMR1_IRQn = 61, - TIMR2_IRQn = 62, - TIMR3_IRQn = 63, - TIMR4_IRQn = 64, - TIMR5_IRQn = 65, +/****** Cortex-M0 Processor Exceptions Numbers **********************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ + +/****** Cortex-M4 specific Interrupt Numbers ************************************************/ + GPIOA0_IRQn = 0, + GPIOA1_IRQn = 1, + GPIOA2_IRQn = 2, + GPIOA3_IRQn = 3, + GPIOA4_IRQn = 4, + GPIOA5_IRQn = 5, + GPIOA6_IRQn = 6, + GPIOA7_IRQn = 7, + GPIOB0_IRQn = 8, + GPIOB1_IRQn = 9, + GPIOB2_IRQn = 10, + GPIOB3_IRQn = 11, + GPIOB4_IRQn = 12, + GPIOB5_IRQn = 13, + GPIOB6_IRQn = 14, + GPIOB7_IRQn = 15, + GPIOC0_IRQn = 16, + GPIOC1_IRQn = 17, + GPIOC2_IRQn = 18, + GPIOC3_IRQn = 19, + GPIOC4_IRQn = 20, + GPIOC5_IRQn = 21, + GPIOC6_IRQn = 22, + GPIOC7_IRQn = 23, + GPIOM0_IRQn = 24, + GPIOM1_IRQn = 25, + GPIOM2_IRQn = 26, + GPIOM3_IRQn = 27, + GPIOM4_IRQn = 28, + GPIOM5_IRQn = 29, + GPIOM6_IRQn = 30, + GPIOM7_IRQn = 31, + DMA_IRQn = 32, + LCD_IRQn = 33, + NORFLC_IRQn = 34, + CAN_IRQn = 35, + PULSE_IRQn = 36, + WDT_IRQn = 37, + PWM_IRQn = 38, + UART0_IRQn = 39, + UART1_IRQn = 40, + UART2_IRQn = 41, + UART3_IRQn = 42, + UART4_IRQn = 43, + I2C0_IRQn = 44, + I2C1_IRQn = 45, + SPI0_IRQn = 46, + ADC0_IRQn = 47, + RTC_IRQn = 48, + BOD_IRQn = 49, + SDIO_IRQn = 50, + GPIOA_IRQn = 51, + GPIOB_IRQn = 52, + GPIOC_IRQn = 53, + GPIOM_IRQn = 54, + GPION_IRQn = 55, + GPIOP_IRQn = 56, + ADC1_IRQn = 57, + FPU_IRQn = 58, + SPI1_IRQn = 59, + TIMR0_IRQn = 60, + TIMR1_IRQn = 61, + TIMR2_IRQn = 62, + TIMR3_IRQn = 63, + TIMR4_IRQn = 64, + TIMR5_IRQn = 65, } IRQn_Type; /* @@ -94,3454 +94,3512 @@ typedef enum IRQn */ /* Configuration of the Cortex-M0 Processor and Core Peripherals */ -#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< SWM320 provides an MPU */ -#define __NVIC_PRIO_BITS 3 /*!< SWM320 uses 3 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ -#define __FPU_PRESENT 0 /*!< FPU present */ - -#if defined(__CC_ARM) -#pragma anon_unions +#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1 /*!< SWM320 provides an MPU */ +#define __NVIC_PRIO_BITS 3 /*!< SWM320 uses 3 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 0 /*!< FPU present */ + +#if defined ( __CC_ARM ) + #pragma anon_unions #endif #include -#include "core_cm4.h" /* Cortex-M0 processor and core peripherals */ +#include "core_cm4.h" /* Cortex-M0 processor and core peripherals */ #include "system_SWM320.h" + /******************************************************************************/ /* Device Specific Peripheral registers structures */ /******************************************************************************/ -typedef struct -{ - __IO uint32_t CLKSEL; //Clock Select - - __IO uint32_t CLKDIV; - - __IO uint32_t CLKEN; //Clock Enable +typedef struct { + __IO uint32_t CLKSEL; //Clock Select - __IO uint32_t SLEEP; + __IO uint32_t CLKDIV; - uint32_t RESERVED0[6]; + __IO uint32_t CLKEN; //Clock Enable - __IO uint32_t RTCBKP_ISO; //[0] 1 RTC备份电æº�域处于隔离状æ€� 0 RTC备份电æº�域å�¯è®¿é—® + __IO uint32_t SLEEP; + + uint32_t RESERVED0[6]; + + __IO uint32_t RTCBKP_ISO; //[0] 1 RTC±¸·ÝµçÔ´Óò´¦ÓÚ¸ôÀë״̬ 0 RTC±¸·ÝµçÔ´Óò¿É·ÃÎÊ + + __IO uint32_t RTCWKEN; //[0] 1 ʹÄÜRTC»½Ðѹ¦ÄÜ - __IO uint32_t RTCWKEN; //[0] 1 使能RTC唤醒功能 + uint32_t RESERVED[52+64]; - uint32_t RESERVED[52 + 64]; + __IO uint32_t PAWKEN; //Port A Wakeup Enable + __IO uint32_t PBWKEN; + __IO uint32_t PCWKEN; + + uint32_t RESERVED2[1+4]; - __IO uint32_t PAWKEN; //Port A Wakeup Enable - __IO uint32_t PBWKEN; - __IO uint32_t PCWKEN; + __IO uint32_t PAWKSR; //Port A Wakeup Status Register£¬Ð´1ÇåÁã + __IO uint32_t PBWKSR; + __IO uint32_t PCWKSR; - uint32_t RESERVED2[1 + 4]; + uint32_t RESERVED3[64-10]; - __IO uint32_t PAWKSR; //Port A Wakeup Status Register,写1清零 - __IO uint32_t PBWKSR; - __IO uint32_t PCWKSR; + __IO uint32_t RSTCR; //Reset Control Register + __IO uint32_t RSTSR; //Reset Status Register - uint32_t RESERVED3[64 - 10]; - - __IO uint32_t RSTCR; //Reset Control Register - __IO uint32_t RSTSR; //Reset Status Register - - uint32_t RESERVED4[61 + 64]; - - __IO uint32_t BKP[3]; //æ•°æ�®å¤‡ä»½å¯„存器 + uint32_t RESERVED4[61+64]; + __IO uint32_t BKP[3]; //Êý¾Ý±¸·Ý¼Ä´æÆ÷ + //RTC Power Domain: 0x4001E000 - uint32_t RESERVED5[(0x4001E000 - 0x40000508) / 4 - 1]; - - __IO uint32_t RTCBKP[8]; //RTC电æº�域数æ�®å¤‡ä»½å¯„存器 - - __IO uint32_t LRCCR; //Low speed RC Control Register - __IO uint32_t LRCTRIM0; //Low speed RC Trim + uint32_t RESERVED5[(0x4001E000-0x40000508)/4-1]; + + __IO uint32_t RTCBKP[8]; //RTCµçÔ´ÓòÊý¾Ý±¸·Ý¼Ä´æÆ÷ + + __IO uint32_t LRCCR; //Low speed RC Control Register + __IO uint32_t LRCTRIM0; //Low speed RC Trim __IO uint32_t LRCTRIM1; - - uint32_t RESERVED6; - - __IO uint32_t RTCLDOTRIM; //RTC Power Domain LDO Trim - + + uint32_t RESERVED6; + + __IO uint32_t RTCLDOTRIM; //RTC Power Domain LDO Trim + //Analog Control: 0x40031000 - uint32_t RESERVED7[(0x40031000 - 0x4001E030) / 4 - 1]; - - __IO uint32_t HRCCR; //High speed RC Control Register - - uint32_t RESERVED8[7]; - + uint32_t RESERVED7[(0x40031000-0x4001E030)/4-1]; + + __IO uint32_t HRCCR; //High speed RC Control Register + + uint32_t RESERVED8[7]; + __IO uint32_t XTALCR; - + __IO uint32_t PLLCR; __IO uint32_t PLLDIV; __IO uint32_t PLLSET; - __IO uint32_t PLLLOCK; //[0] 1 PLLå·²é”�定 - + __IO uint32_t PLLLOCK; //[0] 1 PLLÒÑËø¶¨ + __IO uint32_t BODIE; __IO uint32_t BODIF; - - __IO uint32_t ADC1IN7; + + __IO uint32_t ADC1IN7; } SYS_TypeDef; -#define SYS_CLKSEL_LFCK_Pos 0 //Low Frequency Clock Source 0 LRC 1 PLL -#define SYS_CLKSEL_LFCK_Msk (0x01 << SYS_CLKSEL_LFCK_Pos) -#define SYS_CLKSEL_HFCK_Pos 1 //High Frequency Clock Source 0 HRC 1 XTAL -#define SYS_CLKSEL_HFCK_Msk (0x01 << SYS_CLKSEL_HFCK_Pos) -#define SYS_CLKSEL_SYS_Pos 2 //系统时钟选择 0 LFCK 1 HFCK -#define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos) - -#define SYS_CLKDIV_SYS_Pos 0 //系统时钟分频 0 1分频 1 2分频 -#define SYS_CLKDIV_SYS_Msk (0x01 << SYS_CLKDIV_SYS_Pos) -#define SYS_CLKDIV_PWM_Pos 1 //PWM 时钟分频 0 1分频 1 8分频 -#define SYS_CLKDIV_PWM_Msk (0x01 << SYS_CLKDIV_PWM_Pos) -#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAM时钟分频 0 1分频 1 2分频 2 4分频 -#define SYS_CLKDIV_SDRAM_Msk (0x03 << SYS_CLKDIV_SDRAM_Pos) -#define SYS_CLKDIV_SDIO_Pos 4 //SDIO时钟分频 0 1分频 1 2分频 2 4分频 3 8分频 -#define SYS_CLKDIV_SDIO_Msk (0x03 << SYS_CLKDIV_SDIO_Pos) - -#define SYS_CLKEN_GPIOA_Pos 0 -#define SYS_CLKEN_GPIOA_Msk (0x01 << SYS_CLKEN_GPIOA_Pos) -#define SYS_CLKEN_GPIOB_Pos 1 -#define SYS_CLKEN_GPIOB_Msk (0x01 << SYS_CLKEN_GPIOB_Pos) -#define SYS_CLKEN_GPIOC_Pos 2 -#define SYS_CLKEN_GPIOC_Msk (0x01 << SYS_CLKEN_GPIOC_Pos) -#define SYS_CLKEN_GPIOM_Pos 4 -#define SYS_CLKEN_GPIOM_Msk (0x01 << SYS_CLKEN_GPIOM_Pos) -#define SYS_CLKEN_GPION_Pos 5 -#define SYS_CLKEN_GPION_Msk (0x01 << SYS_CLKEN_GPION_Pos) -#define SYS_CLKEN_TIMR_Pos 6 -#define SYS_CLKEN_TIMR_Msk (0x01 << SYS_CLKEN_TIMR_Pos) -#define SYS_CLKEN_WDT_Pos 7 -#define SYS_CLKEN_WDT_Msk (0x01 << SYS_CLKEN_WDT_Pos) -#define SYS_CLKEN_ADC0_Pos 8 -#define SYS_CLKEN_ADC0_Msk (0x01 << SYS_CLKEN_ADC0_Pos) -#define SYS_CLKEN_PWM_Pos 9 -#define SYS_CLKEN_PWM_Msk (0x01 << SYS_CLKEN_PWM_Pos) -#define SYS_CLKEN_RTC_Pos 10 -#define SYS_CLKEN_RTC_Msk (0x01 << SYS_CLKEN_RTC_Pos) -#define SYS_CLKEN_UART0_Pos 11 -#define SYS_CLKEN_UART0_Msk (0x01 << SYS_CLKEN_UART0_Pos) -#define SYS_CLKEN_UART1_Pos 12 -#define SYS_CLKEN_UART1_Msk (0x01 << SYS_CLKEN_UART1_Pos) -#define SYS_CLKEN_UART2_Pos 13 -#define SYS_CLKEN_UART2_Msk (0x01 << SYS_CLKEN_UART2_Pos) -#define SYS_CLKEN_UART3_Pos 14 -#define SYS_CLKEN_UART3_Msk (0x01 << SYS_CLKEN_UART3_Pos) -#define SYS_CLKEN_UART4_Pos 15 -#define SYS_CLKEN_UART4_Msk (0x01 << SYS_CLKEN_UART4_Pos) -#define SYS_CLKEN_SPI0_Pos 16 -#define SYS_CLKEN_SPI0_Msk (0x01 << SYS_CLKEN_SPI0_Pos) -#define SYS_CLKEN_I2C0_Pos 17 -#define SYS_CLKEN_I2C0_Msk (0x01 << SYS_CLKEN_I2C0_Pos) -#define SYS_CLKEN_I2C1_Pos 18 -#define SYS_CLKEN_I2C1_Msk (0x01 << SYS_CLKEN_I2C1_Pos) -#define SYS_CLKEN_I2C2_Pos 19 -#define SYS_CLKEN_I2C2_Msk (0x01 << SYS_CLKEN_I2C2_Pos) -#define SYS_CLKEN_LCD_Pos 20 -#define SYS_CLKEN_LCD_Msk (0x01 << SYS_CLKEN_LCD_Pos) -#define SYS_CLKEN_GPIOP_Pos 21 -#define SYS_CLKEN_GPIOP_Msk (0x01 << SYS_CLKEN_GPIOP_Pos) -#define SYS_CLKEN_ANAC_Pos 22 //模拟控制å�•元时钟使能 -#define SYS_CLKEN_ANAC_Msk (0x01 << SYS_CLKEN_ANAC_Pos) -#define SYS_CLKEN_CRC_Pos 23 -#define SYS_CLKEN_CRC_Msk (0x01 << SYS_CLKEN_CRC_Pos) -#define SYS_CLKEN_RTCBKP_Pos 24 -#define SYS_CLKEN_RTCBKP_Msk (0x01 << SYS_CLKEN_RTCBKP_Pos) -#define SYS_CLKEN_CAN_Pos 25 -#define SYS_CLKEN_CAN_Msk (0x01 << SYS_CLKEN_CAN_Pos) -#define SYS_CLKEN_SDRAM_Pos 26 -#define SYS_CLKEN_SDRAM_Msk (0x01 << SYS_CLKEN_SDRAM_Pos) -#define SYS_CLKEN_NORFL_Pos 27 //NOR Flash -#define SYS_CLKEN_NORFL_Msk (0x01 << SYS_CLKEN_NORFL_Pos) -#define SYS_CLKEN_RAMC_Pos 28 -#define SYS_CLKEN_RAMC_Msk (0x01 << SYS_CLKEN_RAMC_Pos) -#define SYS_CLKEN_SDIO_Pos 29 -#define SYS_CLKEN_SDIO_Msk (0x01 << SYS_CLKEN_SDIO_Pos) -#define SYS_CLKEN_ADC1_Pos 30 -#define SYS_CLKEN_ADC1_Msk (0x01 << SYS_CLKEN_ADC1_Pos) -#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVE电æº�域系统时钟使能 -#define SYS_CLKEN_ALIVE_Msk (0x01 << SYS_CLKEN_ALIVE_Pos) - -#define SYS_SLEEP_SLEEP_Pos 0 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥SLEEP模å¼� -#define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos) -#define SYS_SLEEP_DEEP_Pos 1 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥STOP SLEEP模å¼� -#define SYS_SLEEP_DEEP_Msk (0x01 << SYS_SLEEP_DEEP_Pos) - -#define SYS_RSTCR_SYS_Pos 0 //写1进行系统å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SYS_Msk (0x01 << SYS_RSTCR_SYS_Pos) -#define SYS_RSTCR_FLASH_Pos 1 //写1对FLASH控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_FLASH_Msk (0x01 << SYS_RSTCR_FLASH_Pos) -#define SYS_RSTCR_PWM_Pos 2 //写1对PWM进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_PWM_Msk (0x01 << SYS_RSTCR_PWM_Pos) -#define SYS_RSTCR_CPU_Pos 3 //写1对CPU进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_CPU_Msk (0x01 << SYS_RSTCR_CPU_Pos) -#define SYS_RSTCR_DMA_Pos 4 //写1对DMA进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_DMA_Msk (0x01 << SYS_RSTCR_DMA_Pos) -#define SYS_RSTCR_NORFLASH_Pos 5 //写1对NOR Flash控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_NORFLASH_Msk (0x01 << SYS_RSTCR_NORFLASH_Pos) -#define SYS_RSTCR_SRAM_Pos 6 //写1对SRAM控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SRAM_Msk (0x01 << SYS_RSTCR_SRAM_Pos) -#define SYS_RSTCR_SDRAM_Pos 7 //写1对SDRAM控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SDRAM_Msk (0x01 << SYS_RSTCR_SDRAM_Pos) -#define SYS_RSTCR_SDIO_Pos 8 //写1对SDIO进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SDIO_Msk (0x01 << SYS_RSTCR_SDIO_Pos) -#define SYS_RSTCR_LCD_Pos 9 //写1对LCD进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_LCD_Msk (0x01 << SYS_RSTCR_LCD_Pos) -#define SYS_RSTCR_CAN_Pos 10 //写1对CAN进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_CAN_Msk (0x01 << SYS_RSTCR_CAN_Pos) - -#define SYS_RSTSR_POR_Pos 0 //1 出现过PORå¤�ä½�,写1清零 -#define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos) -#define SYS_RSTSR_BOD_Pos 1 //1 出现过BODå¤�ä½�,写1清零 -#define SYS_RSTSR_BOD_Msk (0x01 << SYS_RSTSR_BOD_Pos) -#define SYS_RSTSR_PIN_Pos 2 //1 出现过外部引脚å¤�ä½�,写1清零 -#define SYS_RSTSR_PIN_Msk (0x01 << SYS_RSTSR_PIN_Pos) -#define SYS_RSTSR_WDT_Pos 3 //1 出现过WDTå¤�ä½�,写1清零 -#define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos) -#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 出现过软件å¤�ä½�,写1清零 -#define SYS_RSTSR_SWRST_Msk (0x01 << SYS_RSTSR_SWRST_Pos) - -#define SYS_LRCCR_OFF_Pos 0 //Low Speed RC Off -#define SYS_LRCCR_OFF_Msk (0x01 << SYS_LRCCR_OFF_Pos) - -#define SYS_LRCTRIM0_R_Pos 0 //LRC粗调控制ä½� -#define SYS_LRCTRIM0_R_Msk (0x7FFF << SYS_LRCTRIM0_R_Pos) -#define SYS_LRCTRIM0_M_Pos 15 //LRC中调控制ä½� -#define SYS_LRCTRIM0_M_Msk (0x3F << SYS_LRCTRIM2_M_Pos) -#define SYS_LRCTRIM0_F_Pos 21 //LRC细调控制ä½� -#define SYS_LRCTRIM0_F_Msk (0x7FF << SYS_LRCTRIM0_F_Pos) - -#define SYS_LRCTRIM1_U_Pos 0 //LRC U调控制ä½� -#define SYS_LRCTRIM1_U_Msk (0x7FFF << SYS_LRCTRIM1_U_Pos) - -#define SYS_HRCCR_DBL_Pos 0 //Double Frequency 0 20MHz 1 40MHz -#define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos) -#define SYS_HRCCR_OFF_Pos 1 //High speed RC Off -#define SYS_HRCCR_OFF_Msk (0x01 << SYS_HRCCR_OFF_Pos) - -#define SYS_XTALCR_EN_Pos 0 -#define SYS_XTALCR_EN_Msk (0x01 << SYS_XTALCR_EN_Pos) - -#define SYS_PLLCR_OUTEN_Pos 0 //å�ªèƒ½LOCKå�Žè®¾ç½® -#define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos) -#define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC -#define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos) -#define SYS_PLLCR_OFF_Pos 2 -#define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos) - -#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器 \ - //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV \ - //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV -#define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos) -#define SYS_PLLDIV_ADDIV_Pos 9 //ADC时钟基(å�³VCO输出分频å�Žçš„æ—¶é’Ÿï¼‰ç»�ADDIV分频å�Žä½œä¸ºADC的转æ�¢æ—¶é’Ÿ -#define SYS_PLLDIV_ADDIV_Msk (0x1F << SYS_PLLDIV_ADDIV_Pos) -#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCO输出16分频作为ADC时钟基 1 VCO输出ç»�过32分频作为ADC时钟基 2 VCO输出ç»�过64分频作为ADC时钟基 -#define SYS_PLLDIV_ADVCO_Msk (0x03 << SYS_PLLDIV_ADVCO_Pos) -#define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入æº�时钟分频 -#define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos) -#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频 -#define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos) - -#define SYS_PLLSET_LPFBW_Pos 0 //PLL Low Pass Filter Bandwidth -#define SYS_PLLSET_LPFBW_Msk (0x0F << SYS_PLLSET_LPFBW_Pos) -#define SYS_PLLSET_BIASADJ_Pos 4 //PLL Current Bias Adjustment -#define SYS_PLLSET_BIASADJ_Msk (0x03 << SYS_PLLSET_BIASADJ_Pos) -#define SYS_PLLSET_REFVSEL_Pos 6 //PLL Reference Voltage Select -#define SYS_PLLSET_REFVSEL_Msk (0x03 << SYS_PLLSET_REFVSEL_Pos) -#define SYS_PLLSET_CHPADJL_Pos 8 //PLL charge pump LSB current Adjustment -#define SYS_PLLSET_CHPADJL_Msk (0x07 << SYS_PLLSET_CHPADJL_Pos) -#define SYS_PLLSET_CHPADJM_Pos 11 //PLL charge pump MSB current Adjustment -#define SYS_PLLSET_CHPADJM_Msk (0x03 << SYS_PLLSET_CHPADJM_Pos) - -#define SYS_BODIE_2V2_Pos 1 //BOD 2.2V等级触å�‘中断使能 -#define SYS_BODIE_2V2_Msk (0x01 << SYS_BODIE_2V2_Pos) - -#define SYS_BODIF_2V2_Pos 1 //BOD 2.2V等级触å�‘中断状æ€�,写1清零 -#define SYS_BODIF_2V2_Msk (0x01 << SYS_BODIF_2V2_Pos) - -#define SYS_ADC1IN7_SEL_Pos 0 //ADC1模å�—模拟通é�“7,1 温度传感器 2 电池电压 3 RTC电æº�域BG 4 主电æº�域BG 5 PDM33 -#define SYS_ADC1IN7_SEL_Msk (0x0F << SYS_ADC1IN7_SEL_Pos) -#define SYS_ADC1IN7_IOON_Pos 4 //ADC1模å�—模拟通é�“7所用IO开关 -#define SYS_ADC1IN7_IOON_Msk (0x01 << SYS_ADC1IN7_IOON_Pos) - -typedef struct -{ - __IO uint32_t PORTA_SEL; //ç»™PORTA_SEL[2n+2:2n]赋相应的值,将PORTA.PINn引脚é…�ç½®æˆ�GPIOã€�模拟ã€�数字等功能 - //当赋值为PORTA_PINn_FUNMUX时,PORTA.PINn引脚å�¯é€šè¿‡PORTA_MUX寄存器连接到å�„ç§�数字外设 - __IO uint32_t PORTB_SEL; +#define SYS_CLKSEL_LFCK_Pos 0 //Low Frequency Clock Source 0 LRC 1 PLL +#define SYS_CLKSEL_LFCK_Msk (0x01 << SYS_CLKSEL_LFCK_Pos) +#define SYS_CLKSEL_HFCK_Pos 1 //High Frequency Clock Source 0 HRC 1 XTAL +#define SYS_CLKSEL_HFCK_Msk (0x01 << SYS_CLKSEL_HFCK_Pos) +#define SYS_CLKSEL_SYS_Pos 2 //ϵͳʱÖÓÑ¡Ôñ 0 LFCK 1 HFCK +#define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos) + +#define SYS_CLKDIV_SYS_Pos 0 //ϵͳʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ +#define SYS_CLKDIV_SYS_Msk (0x01 << SYS_CLKDIV_SYS_Pos) +#define SYS_CLKDIV_PWM_Pos 1 //PWM ʱÖÓ·ÖÆµ 0 1·ÖƵ 1 8·ÖƵ +#define SYS_CLKDIV_PWM_Msk (0x01 << SYS_CLKDIV_PWM_Pos) +#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAMʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ 2 4·ÖƵ +#define SYS_CLKDIV_SDRAM_Msk (0x03 << SYS_CLKDIV_SDRAM_Pos) +#define SYS_CLKDIV_SDIO_Pos 4 //SDIOʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ 2 4·ÖƵ 3 8·ÖƵ +#define SYS_CLKDIV_SDIO_Msk (0x03 << SYS_CLKDIV_SDIO_Pos) + +#define SYS_CLKEN_GPIOA_Pos 0 +#define SYS_CLKEN_GPIOA_Msk (0x01 << SYS_CLKEN_GPIOA_Pos) +#define SYS_CLKEN_GPIOB_Pos 1 +#define SYS_CLKEN_GPIOB_Msk (0x01 << SYS_CLKEN_GPIOB_Pos) +#define SYS_CLKEN_GPIOC_Pos 2 +#define SYS_CLKEN_GPIOC_Msk (0x01 << SYS_CLKEN_GPIOC_Pos) +#define SYS_CLKEN_GPIOM_Pos 4 +#define SYS_CLKEN_GPIOM_Msk (0x01 << SYS_CLKEN_GPIOM_Pos) +#define SYS_CLKEN_GPION_Pos 5 +#define SYS_CLKEN_GPION_Msk (0x01 << SYS_CLKEN_GPION_Pos) +#define SYS_CLKEN_TIMR_Pos 6 +#define SYS_CLKEN_TIMR_Msk (0x01 << SYS_CLKEN_TIMR_Pos) +#define SYS_CLKEN_WDT_Pos 7 +#define SYS_CLKEN_WDT_Msk (0x01 << SYS_CLKEN_WDT_Pos) +#define SYS_CLKEN_ADC0_Pos 8 +#define SYS_CLKEN_ADC0_Msk (0x01 << SYS_CLKEN_ADC0_Pos) +#define SYS_CLKEN_PWM_Pos 9 +#define SYS_CLKEN_PWM_Msk (0x01 << SYS_CLKEN_PWM_Pos) +#define SYS_CLKEN_RTC_Pos 10 +#define SYS_CLKEN_RTC_Msk (0x01 << SYS_CLKEN_RTC_Pos) +#define SYS_CLKEN_UART0_Pos 11 +#define SYS_CLKEN_UART0_Msk (0x01 << SYS_CLKEN_UART0_Pos) +#define SYS_CLKEN_UART1_Pos 12 +#define SYS_CLKEN_UART1_Msk (0x01 << SYS_CLKEN_UART1_Pos) +#define SYS_CLKEN_UART2_Pos 13 +#define SYS_CLKEN_UART2_Msk (0x01 << SYS_CLKEN_UART2_Pos) +#define SYS_CLKEN_UART3_Pos 14 +#define SYS_CLKEN_UART3_Msk (0x01 << SYS_CLKEN_UART3_Pos) +#define SYS_CLKEN_UART4_Pos 15 +#define SYS_CLKEN_UART4_Msk (0x01 << SYS_CLKEN_UART4_Pos) +#define SYS_CLKEN_SPI0_Pos 16 +#define SYS_CLKEN_SPI0_Msk (0x01 << SYS_CLKEN_SPI0_Pos) +#define SYS_CLKEN_I2C0_Pos 17 +#define SYS_CLKEN_I2C0_Msk (0x01 << SYS_CLKEN_I2C0_Pos) +#define SYS_CLKEN_I2C1_Pos 18 +#define SYS_CLKEN_I2C1_Msk (0x01 << SYS_CLKEN_I2C1_Pos) +#define SYS_CLKEN_I2C2_Pos 19 +#define SYS_CLKEN_I2C2_Msk (0x01 << SYS_CLKEN_I2C2_Pos) +#define SYS_CLKEN_LCD_Pos 20 +#define SYS_CLKEN_LCD_Msk (0x01 << SYS_CLKEN_LCD_Pos) +#define SYS_CLKEN_GPIOP_Pos 21 +#define SYS_CLKEN_GPIOP_Msk (0x01 << SYS_CLKEN_GPIOP_Pos) +#define SYS_CLKEN_ANAC_Pos 22 //Ä£Äâ¿ØÖÆµ¥ÔªÊ±ÖÓʹÄÜ +#define SYS_CLKEN_ANAC_Msk (0x01 << SYS_CLKEN_ANAC_Pos) +#define SYS_CLKEN_CRC_Pos 23 +#define SYS_CLKEN_CRC_Msk (0x01 << SYS_CLKEN_CRC_Pos) +#define SYS_CLKEN_RTCBKP_Pos 24 +#define SYS_CLKEN_RTCBKP_Msk (0x01 << SYS_CLKEN_RTCBKP_Pos) +#define SYS_CLKEN_CAN_Pos 25 +#define SYS_CLKEN_CAN_Msk (0x01 << SYS_CLKEN_CAN_Pos) +#define SYS_CLKEN_SDRAM_Pos 26 +#define SYS_CLKEN_SDRAM_Msk (0x01 << SYS_CLKEN_SDRAM_Pos) +#define SYS_CLKEN_NORFL_Pos 27 //NOR Flash +#define SYS_CLKEN_NORFL_Msk (0x01 << SYS_CLKEN_NORFL_Pos) +#define SYS_CLKEN_RAMC_Pos 28 +#define SYS_CLKEN_RAMC_Msk (0x01 << SYS_CLKEN_RAMC_Pos) +#define SYS_CLKEN_SDIO_Pos 29 +#define SYS_CLKEN_SDIO_Msk (0x01 << SYS_CLKEN_SDIO_Pos) +#define SYS_CLKEN_ADC1_Pos 30 +#define SYS_CLKEN_ADC1_Msk (0x01 << SYS_CLKEN_ADC1_Pos) +#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVEµçÔ´ÓòϵͳʱÖÓʹÄÜ +#define SYS_CLKEN_ALIVE_Msk (0x01 << SYS_CLKEN_ALIVE_Pos) + +#define SYS_SLEEP_SLEEP_Pos 0 //½«¸ÃλÖÃ1ºó£¬ÏµÍ³½«½øÈëSLEEPģʽ +#define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos) +#define SYS_SLEEP_DEEP_Pos 1 //½«¸ÃλÖÃ1ºó£¬ÏµÍ³½«½øÈëSTOP SLEEPģʽ +#define SYS_SLEEP_DEEP_Msk (0x01 << SYS_SLEEP_DEEP_Pos) + +#define SYS_RSTCR_SYS_Pos 0 //д1½øÐÐϵͳ¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SYS_Msk (0x01 << SYS_RSTCR_SYS_Pos) +#define SYS_RSTCR_FLASH_Pos 1 //д1¶ÔFLASH¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_FLASH_Msk (0x01 << SYS_RSTCR_FLASH_Pos) +#define SYS_RSTCR_PWM_Pos 2 //д1¶ÔPWM½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_PWM_Msk (0x01 << SYS_RSTCR_PWM_Pos) +#define SYS_RSTCR_CPU_Pos 3 //д1¶ÔCPU½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_CPU_Msk (0x01 << SYS_RSTCR_CPU_Pos) +#define SYS_RSTCR_DMA_Pos 4 //д1¶ÔDMA½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_DMA_Msk (0x01 << SYS_RSTCR_DMA_Pos) +#define SYS_RSTCR_NORFLASH_Pos 5 //д1¶ÔNOR Flash¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_NORFLASH_Msk (0x01 << SYS_RSTCR_NORFLASH_Pos) +#define SYS_RSTCR_SRAM_Pos 6 //д1¶ÔSRAM¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SRAM_Msk (0x01 << SYS_RSTCR_SRAM_Pos) +#define SYS_RSTCR_SDRAM_Pos 7 //д1¶ÔSDRAM¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SDRAM_Msk (0x01 << SYS_RSTCR_SDRAM_Pos) +#define SYS_RSTCR_SDIO_Pos 8 //д1¶ÔSDIO½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SDIO_Msk (0x01 << SYS_RSTCR_SDIO_Pos) +#define SYS_RSTCR_LCD_Pos 9 //д1¶ÔLCD½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_LCD_Msk (0x01 << SYS_RSTCR_LCD_Pos) +#define SYS_RSTCR_CAN_Pos 10 //д1¶ÔCAN½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_CAN_Msk (0x01 << SYS_RSTCR_CAN_Pos) + +#define SYS_RSTSR_POR_Pos 0 //1 ³öÏÖ¹ýPOR¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos) +#define SYS_RSTSR_BOD_Pos 1 //1 ³öÏÖ¹ýBOD¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_BOD_Msk (0x01 << SYS_RSTSR_BOD_Pos) +#define SYS_RSTSR_PIN_Pos 2 //1 ³öÏÖ¹ýÍⲿÒý½Å¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_PIN_Msk (0x01 << SYS_RSTSR_PIN_Pos) +#define SYS_RSTSR_WDT_Pos 3 //1 ³öÏÖ¹ýWDT¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos) +#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 ³öÏÖ¹ýÈí¼þ¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_SWRST_Msk (0x01 << SYS_RSTSR_SWRST_Pos) + +#define SYS_LRCCR_OFF_Pos 0 //Low Speed RC Off +#define SYS_LRCCR_OFF_Msk (0x01 << SYS_LRCCR_OFF_Pos) + +#define SYS_LRCTRIM0_R_Pos 0 //LRC´Öµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_R_Msk (0x7FFF << SYS_LRCTRIM0_R_Pos) +#define SYS_LRCTRIM0_M_Pos 15 //LRCÖе÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_M_Msk (0x3F << SYS_LRCTRIM2_M_Pos) +#define SYS_LRCTRIM0_F_Pos 21 //LRCϸµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_F_Msk (0x7FF << SYS_LRCTRIM0_F_Pos) + +#define SYS_LRCTRIM1_U_Pos 0 //LRC Uµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM1_U_Msk (0x7FFF << SYS_LRCTRIM1_U_Pos) + + +#define SYS_HRCCR_DBL_Pos 0 //Double Frequency 0 20MHz 1 40MHz +#define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos) +#define SYS_HRCCR_OFF_Pos 1 //High speed RC Off +#define SYS_HRCCR_OFF_Msk (0x01 << SYS_HRCCR_OFF_Pos) + +#define SYS_XTALCR_EN_Pos 0 +#define SYS_XTALCR_EN_Msk (0x01 << SYS_XTALCR_EN_Pos) + +#define SYS_PLLCR_OUTEN_Pos 0 //Ö»ÄÜLOCKºóÉèÖà +#define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos) +#define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC +#define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos) +#define SYS_PLLCR_OFF_Pos 2 +#define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos) + +#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack·ÖƵ¼Ä´æÆ÷ + //VCOÊä³öƵÂÊ = PLLÊäÈëʱÖÓ / INDIV * 4 * FBDIV + //PLLÊä³öƵÂÊ = PLLÊäÈëʱÖÓ / INDIV * 4 * FBDIV / OUTDIV = VCOÊä³öƵÂÊ / OUTDIV +#define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos) +#define SYS_PLLDIV_ADDIV_Pos 9 //ADCʱÖÓ»ù£¨¼´VCOÊä³ö·ÖƵºóµÄʱÖÓ£©¾­ADDIV·ÖƵºó×÷ΪADCµÄת»»Ê±ÖÓ +#define SYS_PLLDIV_ADDIV_Msk (0x1F << SYS_PLLDIV_ADDIV_Pos) +#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCOÊä³ö16·ÖƵ×÷ΪADCʱÖÓ»ù 1 VCOÊä³ö¾­¹ý32·ÖƵ×÷ΪADCʱÖÓ»ù 2 VCOÊä³ö¾­¹ý64·ÖƵ×÷ΪADCʱÖÓ»ù +#define SYS_PLLDIV_ADVCO_Msk (0x03 << SYS_PLLDIV_ADVCO_Pos) +#define SYS_PLLDIV_INDIV_Pos 16 //PLL ÊäÈëԴʱÖÓ·ÖÆµ +#define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos) +#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL Êä³ö·ÖƵ£¬0 8·ÖƵ 1 4·ÖƵ 0 2·ÖƵ +#define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos) + +#define SYS_PLLSET_LPFBW_Pos 0 //PLL Low Pass Filter Bandwidth +#define SYS_PLLSET_LPFBW_Msk (0x0F << SYS_PLLSET_LPFBW_Pos) +#define SYS_PLLSET_BIASADJ_Pos 4 //PLL Current Bias Adjustment +#define SYS_PLLSET_BIASADJ_Msk (0x03 << SYS_PLLSET_BIASADJ_Pos) +#define SYS_PLLSET_REFVSEL_Pos 6 //PLL Reference Voltage Select +#define SYS_PLLSET_REFVSEL_Msk (0x03 << SYS_PLLSET_REFVSEL_Pos) +#define SYS_PLLSET_CHPADJL_Pos 8 //PLL charge pump LSB current Adjustment +#define SYS_PLLSET_CHPADJL_Msk (0x07 << SYS_PLLSET_CHPADJL_Pos) +#define SYS_PLLSET_CHPADJM_Pos 11 //PLL charge pump MSB current Adjustment +#define SYS_PLLSET_CHPADJM_Msk (0x03 << SYS_PLLSET_CHPADJM_Pos) + +#define SYS_BODIE_2V2_Pos 1 //BOD 2.2VµÈ¼¶´¥·¢ÖжÏʹÄÜ +#define SYS_BODIE_2V2_Msk (0x01 << SYS_BODIE_2V2_Pos) + +#define SYS_BODIF_2V2_Pos 1 //BOD 2.2VµÈ¼¶´¥·¢ÖжÏ״̬£¬Ð´1ÇåÁã +#define SYS_BODIF_2V2_Msk (0x01 << SYS_BODIF_2V2_Pos) + +#define SYS_ADC1IN7_SEL_Pos 0 //ADC1Ä£¿éÄ£ÄâͨµÀ7£¬1 ζȴ«¸ÐÆ÷ 2 µç³Øµçѹ 3 RTCµçÔ´ÓòBG 4 Ö÷µçÔ´ÓòBG 5 PDM33 +#define SYS_ADC1IN7_SEL_Msk (0x0F << SYS_ADC1IN7_SEL_Pos) +#define SYS_ADC1IN7_IOON_Pos 4 //ADC1Ä£¿éÄ£ÄâͨµÀ7ËùÓÃIO¿ª¹Ø +#define SYS_ADC1IN7_IOON_Msk (0x01 << SYS_ADC1IN7_IOON_Pos) + + + + +typedef struct { + __IO uint32_t PORTA_SEL; //¸øPORTA_SEL[2n+2:2n]¸³ÏàÓ¦µÄÖµ£¬½«PORTA.PINnÒý½ÅÅäÖóÉGPIO¡¢Ä£Äâ¡¢Êý×ֵȹ¦ÄÜ + //µ±¸³ÖµÎªPORTA_PINn_FUNMUXʱ£¬PORTA.PINnÒý½Å¿Éͨ¹ýPORTA_MUX¼Ä´æÆ÷Á¬½Óµ½¸÷ÖÖÊý×ÖÍâÉè + __IO uint32_t PORTB_SEL; + __IO uint32_t PORTC_SEL; - - uint32_t RESERVED[5]; - - __IO uint32_t PORTM_SEL0; - + + uint32_t RESERVED[5]; + + __IO uint32_t PORTM_SEL0; + __IO uint32_t PORTM_SEL1; - - uint32_t RESERVED2[2]; - + + uint32_t RESERVED2[2]; + __IO uint32_t PORTN_SEL0; - + __IO uint32_t PORTN_SEL1; - - uint32_t RESERVED3[2]; - + + uint32_t RESERVED3[2]; + __IO uint32_t PORTP_SEL0; - + __IO uint32_t PORTP_SEL1; - - uint32_t RESERVED4[46]; - + + uint32_t RESERVED4[46]; + __IO uint32_t PORTA_MUX0; - + __IO uint32_t PORTA_MUX1; - - uint32_t RESERVED5[2]; - + + uint32_t RESERVED5[2]; + __IO uint32_t PORTB_MUX0; - + __IO uint32_t PORTB_MUX1; - - uint32_t RESERVED6[2]; - + + uint32_t RESERVED6[2]; + __IO uint32_t PORTC_MUX0; - + __IO uint32_t PORTC_MUX1; - - uint32_t RESERVED7[14]; - + + uint32_t RESERVED7[14]; + __IO uint32_t PORTM_MUX0; - + __IO uint32_t PORTM_MUX1; __IO uint32_t PORTM_MUX2; - + __IO uint32_t PORTM_MUX3; - + __IO uint32_t PORTN_MUX0; - + __IO uint32_t PORTN_MUX1; - + __IO uint32_t PORTN_MUX2; - - uint32_t RESERVED8; - + + uint32_t RESERVED8; + __IO uint32_t PORTP_MUX0; - + __IO uint32_t PORTP_MUX1; - + __IO uint32_t PORTP_MUX2; - + __IO uint32_t PORTP_MUX3; - - uint32_t RESERVED9[28]; - - __IO uint32_t PORTA_PULLU; //上拉使能 - - uint32_t RESERVED10[3]; - + + uint32_t RESERVED9[28]; + + __IO uint32_t PORTA_PULLU; //ÉÏÀ­Ê¹ÄÜ + + uint32_t RESERVED10[3]; + __IO uint32_t PORTC_PULLU; - - uint32_t RESERVED11[3]; + + uint32_t RESERVED11[3]; __IO uint32_t PORTM_PULLU; - - uint32_t RESERVED12[3]; + + uint32_t RESERVED12[3]; __IO uint32_t PORTP_PULLU; - - uint32_t RESERVED13[51]; - - __IO uint32_t PORTB_PULLD; //下拉使能 - - uint32_t RESERVED14[3]; + + uint32_t RESERVED13[51]; + + __IO uint32_t PORTB_PULLD; //ÏÂÀ­Ê¹ÄÜ + + uint32_t RESERVED14[3]; __IO uint32_t PORTD_PULLD; - - uint32_t RESERVED15[3]; + + uint32_t RESERVED15[3]; __IO uint32_t PORTN_PULLD; - - uint32_t RESERVED16[135]; - - __IO uint32_t PORTM_DRIVS; //驱动强度 - - uint32_t RESERVED17[3]; + + uint32_t RESERVED16[135]; + + __IO uint32_t PORTM_DRIVS; //Çý¶¯Ç¿¶È + + uint32_t RESERVED17[3]; __IO uint32_t PORTN_DRIVS; - - uint32_t RESERVED18[3]; + + uint32_t RESERVED18[3]; __IO uint32_t PORTP_DRIVS; - - uint32_t RESERVED19[39]; - - __IO uint32_t PORTA_INEN; //输入使能 - - uint32_t RESERVED20[3]; - + + uint32_t RESERVED19[39]; + + __IO uint32_t PORTA_INEN; //ÊäÈëʹÄÜ + + uint32_t RESERVED20[3]; + __IO uint32_t PORTB_INEN; - - uint32_t RESERVED21[3]; + + uint32_t RESERVED21[3]; __IO uint32_t PORTC_INEN; - - uint32_t RESERVED22[7]; + + uint32_t RESERVED22[7]; __IO uint32_t PORTM_INEN; - - uint32_t RESERVED23[3]; - + + uint32_t RESERVED23[3]; + __IO uint32_t PORTN_INEN; - - uint32_t RESERVED24[3]; + + uint32_t RESERVED24[3]; __IO uint32_t PORTP_INEN; } PORT_TypeDef; -#define PORT_PORTA_PULLU_PIN0_Pos 0 -#define PORT_PORTA_PULLU_PIN0_Msk (0x01 << PORT_PORTA_PULLU_PIN0_Pos) -#define PORT_PORTA_PULLU_PIN1_Pos 1 -#define PORT_PORTA_PULLU_PIN1_Msk (0x01 << PORT_PORTA_PULLU_PIN1_Pos) -#define PORT_PORTA_PULLU_PIN2_Pos 2 -#define PORT_PORTA_PULLU_PIN2_Msk (0x01 << PORT_PORTA_PULLU_PIN2_Pos) -#define PORT_PORTA_PULLU_PIN3_Pos 3 -#define PORT_PORTA_PULLU_PIN3_Msk (0x01 << PORT_PORTA_PULLU_PIN3_Pos) -#define PORT_PORTA_PULLU_PIN4_Pos 4 -#define PORT_PORTA_PULLU_PIN4_Msk (0x01 << PORT_PORTA_PULLU_PIN4_Pos) -#define PORT_PORTA_PULLU_PIN5_Pos 5 -#define PORT_PORTA_PULLU_PIN5_Msk (0x01 << PORT_PORTA_PULLU_PIN5_Pos) -#define PORT_PORTA_PULLU_PIN6_Pos 6 -#define PORT_PORTA_PULLU_PIN6_Msk (0x01 << PORT_PORTA_PULLU_PIN6_Pos) -#define PORT_PORTA_PULLU_PIN7_Pos 7 -#define PORT_PORTA_PULLU_PIN7_Msk (0x01 << PORT_PORTA_PULLU_PIN7_Pos) -#define PORT_PORTA_PULLU_PIN8_Pos 8 -#define PORT_PORTA_PULLU_PIN8_Msk (0x01 << PORT_PORTA_PULLU_PIN8_Pos) -#define PORT_PORTA_PULLU_PIN9_Pos 9 -#define PORT_PORTA_PULLU_PIN9_Msk (0x01 << PORT_PORTA_PULLU_PIN9_Pos) -#define PORT_PORTA_PULLU_PIN10_Pos 10 -#define PORT_PORTA_PULLU_PIN10_Msk (0x01 << PORT_PORTA_PULLU_PIN10_Pos) -#define PORT_PORTA_PULLU_PIN11_Pos 11 -#define PORT_PORTA_PULLU_PIN11_Msk (0x01 << PORT_PORTA_PULLU_PIN11_Pos) -#define PORT_PORTA_PULLU_PIN12_Pos 12 -#define PORT_PORTA_PULLU_PIN12_Msk (0x01 << PORT_PORTA_PULLU_PIN12_Pos) -#define PORT_PORTA_PULLU_PIN13_Pos 13 -#define PORT_PORTA_PULLU_PIN13_Msk (0x01 << PORT_PORTA_PULLU_PIN13_Pos) -#define PORT_PORTA_PULLU_PIN14_Pos 14 -#define PORT_PORTA_PULLU_PIN14_Msk (0x01 << PORT_PORTA_PULLU_PIN14_Pos) -#define PORT_PORTA_PULLU_PIN15_Pos 15 -#define PORT_PORTA_PULLU_PIN15_Msk (0x01 << PORT_PORTA_PULLU_PIN15_Pos) - -#define PORT_PORTC_PULLU_PIN0_Pos 0 -#define PORT_PORTC_PULLU_PIN0_Msk (0x01 << PORT_PORTC_PULLU_PIN0_Pos) -#define PORT_PORTC_PULLU_PIN1_Pos 1 -#define PORT_PORTC_PULLU_PIN1_Msk (0x01 << PORT_PORTC_PULLU_PIN1_Pos) -#define PORT_PORTC_PULLU_PIN2_Pos 2 -#define PORT_PORTC_PULLU_PIN2_Msk (0x01 << PORT_PORTC_PULLU_PIN2_Pos) -#define PORT_PORTC_PULLU_PIN3_Pos 3 -#define PORT_PORTC_PULLU_PIN3_Msk (0x01 << PORT_PORTC_PULLU_PIN3_Pos) -#define PORT_PORTC_PULLU_PIN4_Pos 4 -#define PORT_PORTC_PULLU_PIN4_Msk (0x01 << PORT_PORTC_PULLU_PIN4_Pos) -#define PORT_PORTC_PULLU_PIN5_Pos 5 -#define PORT_PORTC_PULLU_PIN5_Msk (0x01 << PORT_PORTC_PULLU_PIN5_Pos) -#define PORT_PORTC_PULLU_PIN6_Pos 6 -#define PORT_PORTC_PULLU_PIN6_Msk (0x01 << PORT_PORTC_PULLU_PIN6_Pos) -#define PORT_PORTC_PULLU_PIN7_Pos 7 -#define PORT_PORTC_PULLU_PIN7_Msk (0x01 << PORT_PORTC_PULLU_PIN7_Pos) -#define PORT_PORTC_PULLU_PIN8_Pos 8 -#define PORT_PORTC_PULLU_PIN8_Msk (0x01 << PORT_PORTC_PULLU_PIN8_Pos) -#define PORT_PORTC_PULLU_PIN9_Pos 9 -#define PORT_PORTC_PULLU_PIN9_Msk (0x01 << PORT_PORTC_PULLU_PIN9_Pos) -#define PORT_PORTC_PULLU_PIN10_Pos 10 -#define PORT_PORTC_PULLU_PIN10_Msk (0x01 << PORT_PORTC_PULLU_PIN10_Pos) -#define PORT_PORTC_PULLU_PIN11_Pos 11 -#define PORT_PORTC_PULLU_PIN11_Msk (0x01 << PORT_PORTC_PULLU_PIN11_Pos) -#define PORT_PORTC_PULLU_PIN12_Pos 12 -#define PORT_PORTC_PULLU_PIN12_Msk (0x01 << PORT_PORTC_PULLU_PIN12_Pos) -#define PORT_PORTC_PULLU_PIN13_Pos 13 -#define PORT_PORTC_PULLU_PIN13_Msk (0x01 << PORT_PORTC_PULLU_PIN13_Pos) -#define PORT_PORTC_PULLU_PIN14_Pos 14 -#define PORT_PORTC_PULLU_PIN14_Msk (0x01 << PORT_PORTC_PULLU_PIN14_Pos) -#define PORT_PORTC_PULLU_PIN15_Pos 15 -#define PORT_PORTC_PULLU_PIN15_Msk (0x01 << PORT_PORTC_PULLU_PIN15_Pos) - -#define PORT_PORTM_PULLU_PIN0_Pos 0 -#define PORT_PORTM_PULLU_PIN0_Msk (0x01 << PORT_PORTM_PULLU_PIN0_Pos) -#define PORT_PORTM_PULLU_PIN1_Pos 1 -#define PORT_PORTM_PULLU_PIN1_Msk (0x01 << PORT_PORTM_PULLU_PIN1_Pos) -#define PORT_PORTM_PULLU_PIN2_Pos 2 -#define PORT_PORTM_PULLU_PIN2_Msk (0x01 << PORT_PORTM_PULLU_PIN2_Pos) -#define PORT_PORTM_PULLU_PIN3_Pos 3 -#define PORT_PORTM_PULLU_PIN3_Msk (0x01 << PORT_PORTM_PULLU_PIN3_Pos) -#define PORT_PORTM_PULLU_PIN4_Pos 4 -#define PORT_PORTM_PULLU_PIN4_Msk (0x01 << PORT_PORTM_PULLU_PIN4_Pos) -#define PORT_PORTM_PULLU_PIN5_Pos 5 -#define PORT_PORTM_PULLU_PIN5_Msk (0x01 << PORT_PORTM_PULLU_PIN5_Pos) -#define PORT_PORTM_PULLU_PIN6_Pos 6 -#define PORT_PORTM_PULLU_PIN6_Msk (0x01 << PORT_PORTM_PULLU_PIN6_Pos) -#define PORT_PORTM_PULLU_PIN7_Pos 7 -#define PORT_PORTM_PULLU_PIN7_Msk (0x01 << PORT_PORTM_PULLU_PIN7_Pos) -#define PORT_PORTM_PULLU_PIN8_Pos 8 -#define PORT_PORTM_PULLU_PIN8_Msk (0x01 << PORT_PORTM_PULLU_PIN8_Pos) -#define PORT_PORTM_PULLU_PIN9_Pos 9 -#define PORT_PORTM_PULLU_PIN9_Msk (0x01 << PORT_PORTM_PULLU_PIN9_Pos) -#define PORT_PORTM_PULLU_PIN10_Pos 10 -#define PORT_PORTM_PULLU_PIN10_Msk (0x01 << PORT_PORTM_PULLU_PIN10_Pos) -#define PORT_PORTM_PULLU_PIN11_Pos 11 -#define PORT_PORTM_PULLU_PIN11_Msk (0x01 << PORT_PORTM_PULLU_PIN11_Pos) -#define PORT_PORTM_PULLU_PIN12_Pos 12 -#define PORT_PORTM_PULLU_PIN12_Msk (0x01 << PORT_PORTM_PULLU_PIN12_Pos) -#define PORT_PORTM_PULLU_PIN13_Pos 13 -#define PORT_PORTM_PULLU_PIN13_Msk (0x01 << PORT_PORTM_PULLU_PIN13_Pos) -#define PORT_PORTM_PULLU_PIN14_Pos 14 -#define PORT_PORTM_PULLU_PIN14_Msk (0x01 << PORT_PORTM_PULLU_PIN14_Pos) -#define PORT_PORTM_PULLU_PIN15_Pos 15 -#define PORT_PORTM_PULLU_PIN15_Msk (0x01 << PORT_PORTM_PULLU_PIN15_Pos) -#define PORT_PORTM_PULLU_PIN16_Pos 16 -#define PORT_PORTM_PULLU_PIN16_Msk (0x01 << PORT_PORTM_PULLU_PIN16_Pos) -#define PORT_PORTM_PULLU_PIN17_Pos 17 -#define PORT_PORTM_PULLU_PIN17_Msk (0x01 << PORT_PORTM_PULLU_PIN17_Pos) -#define PORT_PORTM_PULLU_PIN18_Pos 18 -#define PORT_PORTM_PULLU_PIN18_Msk (0x01 << PORT_PORTM_PULLU_PIN18_Pos) -#define PORT_PORTM_PULLU_PIN19_Pos 19 -#define PORT_PORTM_PULLU_PIN19_Msk (0x01 << PORT_PORTM_PULLU_PIN19_Pos) -#define PORT_PORTM_PULLU_PIN20_Pos 20 -#define PORT_PORTM_PULLU_PIN20_Msk (0x01 << PORT_PORTM_PULLU_PIN20_Pos) -#define PORT_PORTM_PULLU_PIN21_Pos 21 -#define PORT_PORTM_PULLU_PIN21_Msk (0x01 << PORT_PORTM_PULLU_PIN21_Pos) -#define PORT_PORTM_PULLU_PIN22_Pos 22 -#define PORT_PORTM_PULLU_PIN22_Msk (0x01 << PORT_PORTM_PULLU_PIN22_Pos) -#define PORT_PORTM_PULLU_PIN23_Pos 23 -#define PORT_PORTM_PULLU_PIN23_Msk (0x01 << PORT_PORTM_PULLU_PIN23_Pos) - -#define PORT_PORTP_PULLU_PIN0_Pos 0 -#define PORT_PORTP_PULLU_PIN0_Msk (0x01 << PORT_PORTP_PULLU_PIN0_Pos) -#define PORT_PORTP_PULLU_PIN1_Pos 1 -#define PORT_PORTP_PULLU_PIN1_Msk (0x01 << PORT_PORTP_PULLU_PIN1_Pos) -#define PORT_PORTP_PULLU_PIN2_Pos 2 -#define PORT_PORTP_PULLU_PIN2_Msk (0x01 << PORT_PORTP_PULLU_PIN2_Pos) -#define PORT_PORTP_PULLU_PIN3_Pos 3 -#define PORT_PORTP_PULLU_PIN3_Msk (0x01 << PORT_PORTP_PULLU_PIN3_Pos) -#define PORT_PORTP_PULLU_PIN4_Pos 4 -#define PORT_PORTP_PULLU_PIN4_Msk (0x01 << PORT_PORTP_PULLU_PIN4_Pos) -#define PORT_PORTP_PULLU_PIN5_Pos 5 -#define PORT_PORTP_PULLU_PIN5_Msk (0x01 << PORT_PORTP_PULLU_PIN5_Pos) -#define PORT_PORTP_PULLU_PIN6_Pos 6 -#define PORT_PORTP_PULLU_PIN6_Msk (0x01 << PORT_PORTP_PULLU_PIN6_Pos) -#define PORT_PORTP_PULLU_PIN7_Pos 7 -#define PORT_PORTP_PULLU_PIN7_Msk (0x01 << PORT_PORTP_PULLU_PIN7_Pos) -#define PORT_PORTP_PULLU_PIN8_Pos 8 -#define PORT_PORTP_PULLU_PIN8_Msk (0x01 << PORT_PORTP_PULLU_PIN8_Pos) -#define PORT_PORTP_PULLU_PIN9_Pos 9 -#define PORT_PORTP_PULLU_PIN9_Msk (0x01 << PORT_PORTP_PULLU_PIN9_Pos) -#define PORT_PORTP_PULLU_PIN10_Pos 10 -#define PORT_PORTP_PULLU_PIN10_Msk (0x01 << PORT_PORTP_PULLU_PIN10_Pos) -#define PORT_PORTP_PULLU_PIN11_Pos 11 -#define PORT_PORTP_PULLU_PIN11_Msk (0x01 << PORT_PORTP_PULLU_PIN11_Pos) -#define PORT_PORTP_PULLU_PIN12_Pos 12 -#define PORT_PORTP_PULLU_PIN12_Msk (0x01 << PORT_PORTP_PULLU_PIN12_Pos) -#define PORT_PORTP_PULLU_PIN13_Pos 13 -#define PORT_PORTP_PULLU_PIN13_Msk (0x01 << PORT_PORTP_PULLU_PIN13_Pos) -#define PORT_PORTP_PULLU_PIN14_Pos 14 -#define PORT_PORTP_PULLU_PIN14_Msk (0x01 << PORT_PORTP_PULLU_PIN14_Pos) -#define PORT_PORTP_PULLU_PIN15_Pos 15 -#define PORT_PORTP_PULLU_PIN15_Msk (0x01 << PORT_PORTP_PULLU_PIN15_Pos) -#define PORT_PORTP_PULLU_PIN16_Pos 16 -#define PORT_PORTP_PULLU_PIN16_Msk (0x01 << PORT_PORTP_PULLU_PIN16_Pos) -#define PORT_PORTP_PULLU_PIN17_Pos 17 -#define PORT_PORTP_PULLU_PIN17_Msk (0x01 << PORT_PORTP_PULLU_PIN17_Pos) -#define PORT_PORTP_PULLU_PIN18_Pos 18 -#define PORT_PORTP_PULLU_PIN18_Msk (0x01 << PORT_PORTP_PULLU_PIN18_Pos) -#define PORT_PORTP_PULLU_PIN19_Pos 19 -#define PORT_PORTP_PULLU_PIN19_Msk (0x01 << PORT_PORTP_PULLU_PIN19_Pos) -#define PORT_PORTP_PULLU_PIN20_Pos 20 -#define PORT_PORTP_PULLU_PIN20_Msk (0x01 << PORT_PORTP_PULLU_PIN20_Pos) -#define PORT_PORTP_PULLU_PIN21_Pos 21 -#define PORT_PORTP_PULLU_PIN21_Msk (0x01 << PORT_PORTP_PULLU_PIN21_Pos) -#define PORT_PORTP_PULLU_PIN22_Pos 22 -#define PORT_PORTP_PULLU_PIN22_Msk (0x01 << PORT_PORTP_PULLU_PIN22_Pos) -#define PORT_PORTP_PULLU_PIN23_Pos 23 -#define PORT_PORTP_PULLU_PIN23_Msk (0x01 << PORT_PORTP_PULLU_PIN23_Pos) - -#define PORT_PORTB_PULLD_PIN0_Pos 0 -#define PORT_PORTB_PULLD_PIN0_Msk (0x01 << PORT_PORTB_PULLD_PIN0_Pos) -#define PORT_PORTB_PULLD_PIN1_Pos 1 -#define PORT_PORTB_PULLD_PIN1_Msk (0x01 << PORT_PORTB_PULLD_PIN1_Pos) -#define PORT_PORTB_PULLD_PIN2_Pos 2 -#define PORT_PORTB_PULLD_PIN2_Msk (0x01 << PORT_PORTB_PULLD_PIN2_Pos) -#define PORT_PORTB_PULLD_PIN3_Pos 3 -#define PORT_PORTB_PULLD_PIN3_Msk (0x01 << PORT_PORTB_PULLD_PIN3_Pos) -#define PORT_PORTB_PULLD_PIN4_Pos 4 -#define PORT_PORTB_PULLD_PIN4_Msk (0x01 << PORT_PORTB_PULLD_PIN4_Pos) -#define PORT_PORTB_PULLD_PIN5_Pos 5 -#define PORT_PORTB_PULLD_PIN5_Msk (0x01 << PORT_PORTB_PULLD_PIN5_Pos) -#define PORT_PORTB_PULLD_PIN6_Pos 6 -#define PORT_PORTB_PULLD_PIN6_Msk (0x01 << PORT_PORTB_PULLD_PIN6_Pos) -#define PORT_PORTB_PULLD_PIN7_Pos 7 -#define PORT_PORTB_PULLD_PIN7_Msk (0x01 << PORT_PORTB_PULLD_PIN7_Pos) -#define PORT_PORTB_PULLD_PIN8_Pos 8 -#define PORT_PORTB_PULLD_PIN8_Msk (0x01 << PORT_PORTB_PULLD_PIN8_Pos) -#define PORT_PORTB_PULLD_PIN9_Pos 9 -#define PORT_PORTB_PULLD_PIN9_Msk (0x01 << PORT_PORTB_PULLD_PIN9_Pos) -#define PORT_PORTB_PULLD_PIN10_Pos 10 -#define PORT_PORTB_PULLD_PIN10_Msk (0x01 << PORT_PORTB_PULLD_PIN10_Pos) -#define PORT_PORTB_PULLD_PIN11_Pos 11 -#define PORT_PORTB_PULLD_PIN11_Msk (0x01 << PORT_PORTB_PULLD_PIN11_Pos) -#define PORT_PORTB_PULLD_PIN12_Pos 12 -#define PORT_PORTB_PULLD_PIN12_Msk (0x01 << PORT_PORTB_PULLD_PIN12_Pos) -#define PORT_PORTB_PULLD_PIN13_Pos 13 -#define PORT_PORTB_PULLD_PIN13_Msk (0x01 << PORT_PORTB_PULLD_PIN13_Pos) -#define PORT_PORTB_PULLD_PIN14_Pos 14 -#define PORT_PORTB_PULLD_PIN14_Msk (0x01 << PORT_PORTB_PULLD_PIN14_Pos) -#define PORT_PORTB_PULLD_PIN15_Pos 15 -#define PORT_PORTB_PULLD_PIN15_Msk (0x01 << PORT_PORTB_PULLD_PIN15_Pos) - -#define PORT_PORTN_PULLD_PIN0_Pos 0 -#define PORT_PORTN_PULLD_PIN0_Msk (0x01 << PORT_PORTN_PULLD_PIN0_Pos) -#define PORT_PORTN_PULLD_PIN1_Pos 1 -#define PORT_PORTN_PULLD_PIN1_Msk (0x01 << PORT_PORTN_PULLD_PIN1_Pos) -#define PORT_PORTN_PULLD_PIN2_Pos 2 -#define PORT_PORTN_PULLD_PIN2_Msk (0x01 << PORT_PORTN_PULLD_PIN2_Pos) -#define PORT_PORTN_PULLD_PIN3_Pos 3 -#define PORT_PORTN_PULLD_PIN3_Msk (0x01 << PORT_PORTN_PULLD_PIN3_Pos) -#define PORT_PORTN_PULLD_PIN4_Pos 4 -#define PORT_PORTN_PULLD_PIN4_Msk (0x01 << PORT_PORTN_PULLD_PIN4_Pos) -#define PORT_PORTN_PULLD_PIN5_Pos 5 -#define PORT_PORTN_PULLD_PIN5_Msk (0x01 << PORT_PORTN_PULLD_PIN5_Pos) -#define PORT_PORTN_PULLD_PIN6_Pos 6 -#define PORT_PORTN_PULLD_PIN6_Msk (0x01 << PORT_PORTN_PULLD_PIN6_Pos) -#define PORT_PORTN_PULLD_PIN7_Pos 7 -#define PORT_PORTN_PULLD_PIN7_Msk (0x01 << PORT_PORTN_PULLD_PIN7_Pos) -#define PORT_PORTN_PULLD_PIN8_Pos 8 -#define PORT_PORTN_PULLD_PIN8_Msk (0x01 << PORT_PORTN_PULLD_PIN8_Pos) -#define PORT_PORTN_PULLD_PIN9_Pos 9 -#define PORT_PORTN_PULLD_PIN9_Msk (0x01 << PORT_PORTN_PULLD_PIN9_Pos) -#define PORT_PORTN_PULLD_PIN10_Pos 10 -#define PORT_PORTN_PULLD_PIN10_Msk (0x01 << PORT_PORTN_PULLD_PIN10_Pos) -#define PORT_PORTN_PULLD_PIN11_Pos 11 -#define PORT_PORTN_PULLD_PIN11_Msk (0x01 << PORT_PORTN_PULLD_PIN11_Pos) -#define PORT_PORTN_PULLD_PIN12_Pos 12 -#define PORT_PORTN_PULLD_PIN12_Msk (0x01 << PORT_PORTN_PULLD_PIN12_Pos) -#define PORT_PORTN_PULLD_PIN13_Pos 13 -#define PORT_PORTN_PULLD_PIN13_Msk (0x01 << PORT_PORTN_PULLD_PIN13_Pos) -#define PORT_PORTN_PULLD_PIN14_Pos 14 -#define PORT_PORTN_PULLD_PIN14_Msk (0x01 << PORT_PORTN_PULLD_PIN14_Pos) -#define PORT_PORTN_PULLD_PIN15_Pos 15 -#define PORT_PORTN_PULLD_PIN15_Msk (0x01 << PORT_PORTN_PULLD_PIN15_Pos) -#define PORT_PORTN_PULLD_PIN16_Pos 16 -#define PORT_PORTN_PULLD_PIN16_Msk (0x01 << PORT_PORTN_PULLD_PIN16_Pos) -#define PORT_PORTN_PULLD_PIN17_Pos 17 -#define PORT_PORTN_PULLD_PIN17_Msk (0x01 << PORT_PORTN_PULLD_PIN17_Pos) -#define PORT_PORTN_PULLD_PIN18_Pos 18 -#define PORT_PORTN_PULLD_PIN18_Msk (0x01 << PORT_PORTN_PULLD_PIN18_Pos) -#define PORT_PORTN_PULLD_PIN19_Pos 19 -#define PORT_PORTN_PULLD_PIN19_Msk (0x01 << PORT_PORTN_PULLD_PIN19_Pos) -#define PORT_PORTN_PULLD_PIN20_Pos 20 -#define PORT_PORTN_PULLD_PIN20_Msk (0x01 << PORT_PORTN_PULLD_PIN20_Pos) -#define PORT_PORTN_PULLD_PIN21_Pos 21 -#define PORT_PORTN_PULLD_PIN21_Msk (0x01 << PORT_PORTN_PULLD_PIN21_Pos) -#define PORT_PORTN_PULLD_PIN22_Pos 22 -#define PORT_PORTN_PULLD_PIN22_Msk (0x01 << PORT_PORTN_PULLD_PIN22_Pos) -#define PORT_PORTN_PULLD_PIN23_Pos 23 -#define PORT_PORTN_PULLD_PIN23_Msk (0x01 << PORT_PORTN_PULLD_PIN23_Pos) - -#define PORT_PORTM_DRIVS_PIN0_Pos 0 -#define PORT_PORTM_DRIVS_PIN0_Msk (0x01 << PORT_PORTM_DRIVS_PIN0_Pos) -#define PORT_PORTM_DRIVS_PIN1_Pos 1 -#define PORT_PORTM_DRIVS_PIN1_Msk (0x01 << PORT_PORTM_DRIVS_PIN1_Pos) -#define PORT_PORTM_DRIVS_PIN2_Pos 2 -#define PORT_PORTM_DRIVS_PIN2_Msk (0x01 << PORT_PORTM_DRIVS_PIN2_Pos) -#define PORT_PORTM_DRIVS_PIN3_Pos 3 -#define PORT_PORTM_DRIVS_PIN3_Msk (0x01 << PORT_PORTM_DRIVS_PIN3_Pos) -#define PORT_PORTM_DRIVS_PIN4_Pos 4 -#define PORT_PORTM_DRIVS_PIN4_Msk (0x01 << PORT_PORTM_DRIVS_PIN4_Pos) -#define PORT_PORTM_DRIVS_PIN5_Pos 5 -#define PORT_PORTM_DRIVS_PIN5_Msk (0x01 << PORT_PORTM_DRIVS_PIN5_Pos) -#define PORT_PORTM_DRIVS_PIN6_Pos 6 -#define PORT_PORTM_DRIVS_PIN6_Msk (0x01 << PORT_PORTM_DRIVS_PIN6_Pos) -#define PORT_PORTM_DRIVS_PIN7_Pos 7 -#define PORT_PORTM_DRIVS_PIN7_Msk (0x01 << PORT_PORTM_DRIVS_PIN7_Pos) -#define PORT_PORTM_DRIVS_PIN8_Pos 8 -#define PORT_PORTM_DRIVS_PIN8_Msk (0x01 << PORT_PORTM_DRIVS_PIN8_Pos) -#define PORT_PORTM_DRIVS_PIN9_Pos 9 -#define PORT_PORTM_DRIVS_PIN9_Msk (0x01 << PORT_PORTM_DRIVS_PIN9_Pos) -#define PORT_PORTM_DRIVS_PIN10_Pos 10 -#define PORT_PORTM_DRIVS_PIN10_Msk (0x01 << PORT_PORTM_DRIVS_PIN10_Pos) -#define PORT_PORTM_DRIVS_PIN11_Pos 11 -#define PORT_PORTM_DRIVS_PIN11_Msk (0x01 << PORT_PORTM_DRIVS_PIN11_Pos) -#define PORT_PORTM_DRIVS_PIN12_Pos 12 -#define PORT_PORTM_DRIVS_PIN12_Msk (0x01 << PORT_PORTM_DRIVS_PIN12_Pos) -#define PORT_PORTM_DRIVS_PIN13_Pos 13 -#define PORT_PORTM_DRIVS_PIN13_Msk (0x01 << PORT_PORTM_DRIVS_PIN13_Pos) -#define PORT_PORTM_DRIVS_PIN14_Pos 14 -#define PORT_PORTM_DRIVS_PIN14_Msk (0x01 << PORT_PORTM_DRIVS_PIN14_Pos) -#define PORT_PORTM_DRIVS_PIN15_Pos 15 -#define PORT_PORTM_DRIVS_PIN15_Msk (0x01 << PORT_PORTM_DRIVS_PIN15_Pos) -#define PORT_PORTM_DRIVS_PIN16_Pos 16 -#define PORT_PORTM_DRIVS_PIN16_Msk (0x01 << PORT_PORTM_DRIVS_PIN16_Pos) -#define PORT_PORTM_DRIVS_PIN17_Pos 17 -#define PORT_PORTM_DRIVS_PIN17_Msk (0x01 << PORT_PORTM_DRIVS_PIN17_Pos) -#define PORT_PORTM_DRIVS_PIN18_Pos 18 -#define PORT_PORTM_DRIVS_PIN18_Msk (0x01 << PORT_PORTM_DRIVS_PIN18_Pos) -#define PORT_PORTM_DRIVS_PIN19_Pos 19 -#define PORT_PORTM_DRIVS_PIN19_Msk (0x01 << PORT_PORTM_DRIVS_PIN19_Pos) -#define PORT_PORTM_DRIVS_PIN20_Pos 20 -#define PORT_PORTM_DRIVS_PIN20_Msk (0x01 << PORT_PORTM_DRIVS_PIN20_Pos) -#define PORT_PORTM_DRIVS_PIN21_Pos 21 -#define PORT_PORTM_DRIVS_PIN21_Msk (0x01 << PORT_PORTM_DRIVS_PIN21_Pos) -#define PORT_PORTM_DRIVS_PIN22_Pos 22 -#define PORT_PORTM_DRIVS_PIN22_Msk (0x01 << PORT_PORTM_DRIVS_PIN22_Pos) -#define PORT_PORTM_DRIVS_PIN23_Pos 23 -#define PORT_PORTM_DRIVS_PIN23_Msk (0x01 << PORT_PORTM_DRIVS_PIN23_Pos) - -#define PORT_PORTN_DRIVS_PIN0_Pos 0 -#define PORT_PORTN_DRIVS_PIN0_Msk (0x01 << PORT_PORTN_DRIVS_PIN0_Pos) -#define PORT_PORTN_DRIVS_PIN1_Pos 1 -#define PORT_PORTN_DRIVS_PIN1_Msk (0x01 << PORT_PORTN_DRIVS_PIN1_Pos) -#define PORT_PORTN_DRIVS_PIN2_Pos 2 -#define PORT_PORTN_DRIVS_PIN2_Msk (0x01 << PORT_PORTN_DRIVS_PIN2_Pos) -#define PORT_PORTN_DRIVS_PIN3_Pos 3 -#define PORT_PORTN_DRIVS_PIN3_Msk (0x01 << PORT_PORTN_DRIVS_PIN3_Pos) -#define PORT_PORTN_DRIVS_PIN4_Pos 4 -#define PORT_PORTN_DRIVS_PIN4_Msk (0x01 << PORT_PORTN_DRIVS_PIN4_Pos) -#define PORT_PORTN_DRIVS_PIN5_Pos 5 -#define PORT_PORTN_DRIVS_PIN5_Msk (0x01 << PORT_PORTN_DRIVS_PIN5_Pos) -#define PORT_PORTN_DRIVS_PIN6_Pos 6 -#define PORT_PORTN_DRIVS_PIN6_Msk (0x01 << PORT_PORTN_DRIVS_PIN6_Pos) -#define PORT_PORTN_DRIVS_PIN7_Pos 7 -#define PORT_PORTN_DRIVS_PIN7_Msk (0x01 << PORT_PORTN_DRIVS_PIN7_Pos) -#define PORT_PORTN_DRIVS_PIN8_Pos 8 -#define PORT_PORTN_DRIVS_PIN8_Msk (0x01 << PORT_PORTN_DRIVS_PIN8_Pos) -#define PORT_PORTN_DRIVS_PIN9_Pos 9 -#define PORT_PORTN_DRIVS_PIN9_Msk (0x01 << PORT_PORTN_DRIVS_PIN9_Pos) -#define PORT_PORTN_DRIVS_PIN10_Pos 10 -#define PORT_PORTN_DRIVS_PIN10_Msk (0x01 << PORT_PORTN_DRIVS_PIN10_Pos) -#define PORT_PORTN_DRIVS_PIN11_Pos 11 -#define PORT_PORTN_DRIVS_PIN11_Msk (0x01 << PORT_PORTN_DRIVS_PIN11_Pos) -#define PORT_PORTN_DRIVS_PIN12_Pos 12 -#define PORT_PORTN_DRIVS_PIN12_Msk (0x01 << PORT_PORTN_DRIVS_PIN12_Pos) -#define PORT_PORTN_DRIVS_PIN13_Pos 13 -#define PORT_PORTN_DRIVS_PIN13_Msk (0x01 << PORT_PORTN_DRIVS_PIN13_Pos) -#define PORT_PORTN_DRIVS_PIN14_Pos 14 -#define PORT_PORTN_DRIVS_PIN14_Msk (0x01 << PORT_PORTN_DRIVS_PIN14_Pos) -#define PORT_PORTN_DRIVS_PIN15_Pos 15 -#define PORT_PORTN_DRIVS_PIN15_Msk (0x01 << PORT_PORTN_DRIVS_PIN15_Pos) -#define PORT_PORTN_DRIVS_PIN16_Pos 16 -#define PORT_PORTN_DRIVS_PIN16_Msk (0x01 << PORT_PORTN_DRIVS_PIN16_Pos) -#define PORT_PORTN_DRIVS_PIN17_Pos 17 -#define PORT_PORTN_DRIVS_PIN17_Msk (0x01 << PORT_PORTN_DRIVS_PIN17_Pos) -#define PORT_PORTN_DRIVS_PIN18_Pos 18 -#define PORT_PORTN_DRIVS_PIN18_Msk (0x01 << PORT_PORTN_DRIVS_PIN18_Pos) -#define PORT_PORTN_DRIVS_PIN19_Pos 19 -#define PORT_PORTN_DRIVS_PIN19_Msk (0x01 << PORT_PORTN_DRIVS_PIN19_Pos) -#define PORT_PORTN_DRIVS_PIN20_Pos 20 -#define PORT_PORTN_DRIVS_PIN20_Msk (0x01 << PORT_PORTN_DRIVS_PIN20_Pos) -#define PORT_PORTN_DRIVS_PIN21_Pos 21 -#define PORT_PORTN_DRIVS_PIN21_Msk (0x01 << PORT_PORTN_DRIVS_PIN21_Pos) -#define PORT_PORTN_DRIVS_PIN22_Pos 22 -#define PORT_PORTN_DRIVS_PIN22_Msk (0x01 << PORT_PORTN_DRIVS_PIN22_Pos) -#define PORT_PORTN_DRIVS_PIN23_Pos 23 -#define PORT_PORTN_DRIVS_PIN23_Msk (0x01 << PORT_PORTN_DRIVS_PIN23_Pos) - -#define PORT_PORTP_DRIVS_PIN0_Pos 0 -#define PORT_PORTP_DRIVS_PIN0_Msk (0x01 << PORT_PORTP_DRIVS_PIN0_Pos) -#define PORT_PORTP_DRIVS_PIN1_Pos 1 -#define PORT_PORTP_DRIVS_PIN1_Msk (0x01 << PORT_PORTP_DRIVS_PIN1_Pos) -#define PORT_PORTP_DRIVS_PIN2_Pos 2 -#define PORT_PORTP_DRIVS_PIN2_Msk (0x01 << PORT_PORTP_DRIVS_PIN2_Pos) -#define PORT_PORTP_DRIVS_PIN3_Pos 3 -#define PORT_PORTP_DRIVS_PIN3_Msk (0x01 << PORT_PORTP_DRIVS_PIN3_Pos) -#define PORT_PORTP_DRIVS_PIN4_Pos 4 -#define PORT_PORTP_DRIVS_PIN4_Msk (0x01 << PORT_PORTP_DRIVS_PIN4_Pos) -#define PORT_PORTP_DRIVS_PIN5_Pos 5 -#define PORT_PORTP_DRIVS_PIN5_Msk (0x01 << PORT_PORTP_DRIVS_PIN5_Pos) -#define PORT_PORTP_DRIVS_PIN6_Pos 6 -#define PORT_PORTP_DRIVS_PIN6_Msk (0x01 << PORT_PORTP_DRIVS_PIN6_Pos) -#define PORT_PORTP_DRIVS_PIN7_Pos 7 -#define PORT_PORTP_DRIVS_PIN7_Msk (0x01 << PORT_PORTP_DRIVS_PIN7_Pos) -#define PORT_PORTP_DRIVS_PIN8_Pos 8 -#define PORT_PORTP_DRIVS_PIN8_Msk (0x01 << PORT_PORTP_DRIVS_PIN8_Pos) -#define PORT_PORTP_DRIVS_PIN9_Pos 9 -#define PORT_PORTP_DRIVS_PIN9_Msk (0x01 << PORT_PORTP_DRIVS_PIN9_Pos) -#define PORT_PORTP_DRIVS_PIN10_Pos 10 -#define PORT_PORTP_DRIVS_PIN10_Msk (0x01 << PORT_PORTP_DRIVS_PIN10_Pos) -#define PORT_PORTP_DRIVS_PIN11_Pos 11 -#define PORT_PORTP_DRIVS_PIN11_Msk (0x01 << PORT_PORTP_DRIVS_PIN11_Pos) -#define PORT_PORTP_DRIVS_PIN12_Pos 12 -#define PORT_PORTP_DRIVS_PIN12_Msk (0x01 << PORT_PORTP_DRIVS_PIN12_Pos) -#define PORT_PORTP_DRIVS_PIN13_Pos 13 -#define PORT_PORTP_DRIVS_PIN13_Msk (0x01 << PORT_PORTP_DRIVS_PIN13_Pos) -#define PORT_PORTP_DRIVS_PIN14_Pos 14 -#define PORT_PORTP_DRIVS_PIN14_Msk (0x01 << PORT_PORTP_DRIVS_PIN14_Pos) -#define PORT_PORTP_DRIVS_PIN15_Pos 15 -#define PORT_PORTP_DRIVS_PIN15_Msk (0x01 << PORT_PORTP_DRIVS_PIN15_Pos) -#define PORT_PORTP_DRIVS_PIN16_Pos 16 -#define PORT_PORTP_DRIVS_PIN16_Msk (0x01 << PORT_PORTP_DRIVS_PIN16_Pos) -#define PORT_PORTP_DRIVS_PIN17_Pos 17 -#define PORT_PORTP_DRIVS_PIN17_Msk (0x01 << PORT_PORTP_DRIVS_PIN17_Pos) -#define PORT_PORTP_DRIVS_PIN18_Pos 18 -#define PORT_PORTP_DRIVS_PIN18_Msk (0x01 << PORT_PORTP_DRIVS_PIN18_Pos) -#define PORT_PORTP_DRIVS_PIN19_Pos 19 -#define PORT_PORTP_DRIVS_PIN19_Msk (0x01 << PORT_PORTP_DRIVS_PIN19_Pos) -#define PORT_PORTP_DRIVS_PIN20_Pos 20 -#define PORT_PORTP_DRIVS_PIN20_Msk (0x01 << PORT_PORTP_DRIVS_PIN20_Pos) -#define PORT_PORTP_DRIVS_PIN21_Pos 21 -#define PORT_PORTP_DRIVS_PIN21_Msk (0x01 << PORT_PORTP_DRIVS_PIN21_Pos) -#define PORT_PORTP_DRIVS_PIN22_Pos 22 -#define PORT_PORTP_DRIVS_PIN22_Msk (0x01 << PORT_PORTP_DRIVS_PIN22_Pos) -#define PORT_PORTP_DRIVS_PIN23_Pos 23 -#define PORT_PORTP_DRIVS_PIN23_Msk (0x01 << PORT_PORTP_DRIVS_PIN23_Pos) - -#define PORT_PORTA_INEN_PIN0_Pos 0 -#define PORT_PORTA_INEN_PIN0_Msk (0x01 << PORT_PORTA_INEN_PIN0_Pos) -#define PORT_PORTA_INEN_PIN1_Pos 1 -#define PORT_PORTA_INEN_PIN1_Msk (0x01 << PORT_PORTA_INEN_PIN1_Pos) -#define PORT_PORTA_INEN_PIN2_Pos 2 -#define PORT_PORTA_INEN_PIN2_Msk (0x01 << PORT_PORTA_INEN_PIN2_Pos) -#define PORT_PORTA_INEN_PIN3_Pos 3 -#define PORT_PORTA_INEN_PIN3_Msk (0x01 << PORT_PORTA_INEN_PIN3_Pos) -#define PORT_PORTA_INEN_PIN4_Pos 4 -#define PORT_PORTA_INEN_PIN4_Msk (0x01 << PORT_PORTA_INEN_PIN4_Pos) -#define PORT_PORTA_INEN_PIN5_Pos 5 -#define PORT_PORTA_INEN_PIN5_Msk (0x01 << PORT_PORTA_INEN_PIN5_Pos) -#define PORT_PORTA_INEN_PIN6_Pos 6 -#define PORT_PORTA_INEN_PIN6_Msk (0x01 << PORT_PORTA_INEN_PIN6_Pos) -#define PORT_PORTA_INEN_PIN7_Pos 7 -#define PORT_PORTA_INEN_PIN7_Msk (0x01 << PORT_PORTA_INEN_PIN7_Pos) -#define PORT_PORTA_INEN_PIN8_Pos 8 -#define PORT_PORTA_INEN_PIN8_Msk (0x01 << PORT_PORTA_INEN_PIN8_Pos) -#define PORT_PORTA_INEN_PIN9_Pos 9 -#define PORT_PORTA_INEN_PIN9_Msk (0x01 << PORT_PORTA_INEN_PIN9_Pos) -#define PORT_PORTA_INEN_PIN10_Pos 10 -#define PORT_PORTA_INEN_PIN10_Msk (0x01 << PORT_PORTA_INEN_PIN10_Pos) -#define PORT_PORTA_INEN_PIN11_Pos 11 -#define PORT_PORTA_INEN_PIN11_Msk (0x01 << PORT_PORTA_INEN_PIN11_Pos) -#define PORT_PORTA_INEN_PIN12_Pos 12 -#define PORT_PORTA_INEN_PIN12_Msk (0x01 << PORT_PORTA_INEN_PIN12_Pos) -#define PORT_PORTA_INEN_PIN13_Pos 13 -#define PORT_PORTA_INEN_PIN13_Msk (0x01 << PORT_PORTA_INEN_PIN13_Pos) -#define PORT_PORTA_INEN_PIN14_Pos 14 -#define PORT_PORTA_INEN_PIN14_Msk (0x01 << PORT_PORTA_INEN_PIN14_Pos) -#define PORT_PORTA_INEN_PIN15_Pos 15 -#define PORT_PORTA_INEN_PIN15_Msk (0x01 << PORT_PORTA_INEN_PIN15_Pos) - -#define PORT_PORTB_INEN_PIN0_Pos 0 -#define PORT_PORTB_INEN_PIN0_Msk (0x01 << PORT_PORTB_INEN_PIN0_Pos) -#define PORT_PORTB_INEN_PIN1_Pos 1 -#define PORT_PORTB_INEN_PIN1_Msk (0x01 << PORT_PORTB_INEN_PIN1_Pos) -#define PORT_PORTB_INEN_PIN2_Pos 2 -#define PORT_PORTB_INEN_PIN2_Msk (0x01 << PORT_PORTB_INEN_PIN2_Pos) -#define PORT_PORTB_INEN_PIN3_Pos 3 -#define PORT_PORTB_INEN_PIN3_Msk (0x01 << PORT_PORTB_INEN_PIN3_Pos) -#define PORT_PORTB_INEN_PIN4_Pos 4 -#define PORT_PORTB_INEN_PIN4_Msk (0x01 << PORT_PORTB_INEN_PIN4_Pos) -#define PORT_PORTB_INEN_PIN5_Pos 5 -#define PORT_PORTB_INEN_PIN5_Msk (0x01 << PORT_PORTB_INEN_PIN5_Pos) -#define PORT_PORTB_INEN_PIN6_Pos 6 -#define PORT_PORTB_INEN_PIN6_Msk (0x01 << PORT_PORTB_INEN_PIN6_Pos) -#define PORT_PORTB_INEN_PIN7_Pos 7 -#define PORT_PORTB_INEN_PIN7_Msk (0x01 << PORT_PORTB_INEN_PIN7_Pos) -#define PORT_PORTB_INEN_PIN8_Pos 8 -#define PORT_PORTB_INEN_PIN8_Msk (0x01 << PORT_PORTB_INEN_PIN8_Pos) -#define PORT_PORTB_INEN_PIN9_Pos 9 -#define PORT_PORTB_INEN_PIN9_Msk (0x01 << PORT_PORTB_INEN_PIN9_Pos) -#define PORT_PORTB_INEN_PIN10_Pos 10 -#define PORT_PORTB_INEN_PIN10_Msk (0x01 << PORT_PORTB_INEN_PIN10_Pos) -#define PORT_PORTB_INEN_PIN11_Pos 11 -#define PORT_PORTB_INEN_PIN11_Msk (0x01 << PORT_PORTB_INEN_PIN11_Pos) -#define PORT_PORTB_INEN_PIN12_Pos 12 -#define PORT_PORTB_INEN_PIN12_Msk (0x01 << PORT_PORTB_INEN_PIN12_Pos) -#define PORT_PORTB_INEN_PIN13_Pos 13 -#define PORT_PORTB_INEN_PIN13_Msk (0x01 << PORT_PORTB_INEN_PIN13_Pos) -#define PORT_PORTB_INEN_PIN14_Pos 14 -#define PORT_PORTB_INEN_PIN14_Msk (0x01 << PORT_PORTB_INEN_PIN14_Pos) -#define PORT_PORTB_INEN_PIN15_Pos 15 -#define PORT_PORTB_INEN_PIN15_Msk (0x01 << PORT_PORTB_INEN_PIN15_Pos) - -#define PORT_PORTC_INEN_PIN0_Pos 0 -#define PORT_PORTC_INEN_PIN0_Msk (0x01 << PORT_PORTC_INEN_PIN0_Pos) -#define PORT_PORTC_INEN_PIN1_Pos 1 -#define PORT_PORTC_INEN_PIN1_Msk (0x01 << PORT_PORTC_INEN_PIN1_Pos) -#define PORT_PORTC_INEN_PIN2_Pos 2 -#define PORT_PORTC_INEN_PIN2_Msk (0x01 << PORT_PORTC_INEN_PIN2_Pos) -#define PORT_PORTC_INEN_PIN3_Pos 3 -#define PORT_PORTC_INEN_PIN3_Msk (0x01 << PORT_PORTC_INEN_PIN3_Pos) -#define PORT_PORTC_INEN_PIN4_Pos 4 -#define PORT_PORTC_INEN_PIN4_Msk (0x01 << PORT_PORTC_INEN_PIN4_Pos) -#define PORT_PORTC_INEN_PIN5_Pos 5 -#define PORT_PORTC_INEN_PIN5_Msk (0x01 << PORT_PORTC_INEN_PIN5_Pos) -#define PORT_PORTC_INEN_PIN6_Pos 6 -#define PORT_PORTC_INEN_PIN6_Msk (0x01 << PORT_PORTC_INEN_PIN6_Pos) -#define PORT_PORTC_INEN_PIN7_Pos 7 -#define PORT_PORTC_INEN_PIN7_Msk (0x01 << PORT_PORTC_INEN_PIN7_Pos) -#define PORT_PORTC_INEN_PIN8_Pos 8 -#define PORT_PORTC_INEN_PIN8_Msk (0x01 << PORT_PORTC_INEN_PIN8_Pos) -#define PORT_PORTC_INEN_PIN9_Pos 9 -#define PORT_PORTC_INEN_PIN9_Msk (0x01 << PORT_PORTC_INEN_PIN9_Pos) -#define PORT_PORTC_INEN_PIN10_Pos 10 -#define PORT_PORTC_INEN_PIN10_Msk (0x01 << PORT_PORTC_INEN_PIN10_Pos) -#define PORT_PORTC_INEN_PIN11_Pos 11 -#define PORT_PORTC_INEN_PIN11_Msk (0x01 << PORT_PORTC_INEN_PIN11_Pos) -#define PORT_PORTC_INEN_PIN12_Pos 12 -#define PORT_PORTC_INEN_PIN12_Msk (0x01 << PORT_PORTC_INEN_PIN12_Pos) -#define PORT_PORTC_INEN_PIN13_Pos 13 -#define PORT_PORTC_INEN_PIN13_Msk (0x01 << PORT_PORTC_INEN_PIN13_Pos) -#define PORT_PORTC_INEN_PIN14_Pos 14 -#define PORT_PORTC_INEN_PIN14_Msk (0x01 << PORT_PORTC_INEN_PIN14_Pos) -#define PORT_PORTC_INEN_PIN15_Pos 15 -#define PORT_PORTC_INEN_PIN15_Msk (0x01 << PORT_PORTC_INEN_PIN15_Pos) - -#define PORT_PORTM_INEN_PIN0_Pos 0 -#define PORT_PORTM_INEN_PIN0_Msk (0x01 << PORT_PORTM_INEN_PIN0_Pos) -#define PORT_PORTM_INEN_PIN1_Pos 1 -#define PORT_PORTM_INEN_PIN1_Msk (0x01 << PORT_PORTM_INEN_PIN1_Pos) -#define PORT_PORTM_INEN_PIN2_Pos 2 -#define PORT_PORTM_INEN_PIN2_Msk (0x01 << PORT_PORTM_INEN_PIN2_Pos) -#define PORT_PORTM_INEN_PIN3_Pos 3 -#define PORT_PORTM_INEN_PIN3_Msk (0x01 << PORT_PORTM_INEN_PIN3_Pos) -#define PORT_PORTM_INEN_PIN4_Pos 4 -#define PORT_PORTM_INEN_PIN4_Msk (0x01 << PORT_PORTM_INEN_PIN4_Pos) -#define PORT_PORTM_INEN_PIN5_Pos 5 -#define PORT_PORTM_INEN_PIN5_Msk (0x01 << PORT_PORTM_INEN_PIN5_Pos) -#define PORT_PORTM_INEN_PIN6_Pos 6 -#define PORT_PORTM_INEN_PIN6_Msk (0x01 << PORT_PORTM_INEN_PIN6_Pos) -#define PORT_PORTM_INEN_PIN7_Pos 7 -#define PORT_PORTM_INEN_PIN7_Msk (0x01 << PORT_PORTM_INEN_PIN7_Pos) -#define PORT_PORTM_INEN_PIN8_Pos 8 -#define PORT_PORTM_INEN_PIN8_Msk (0x01 << PORT_PORTM_INEN_PIN8_Pos) -#define PORT_PORTM_INEN_PIN9_Pos 9 -#define PORT_PORTM_INEN_PIN9_Msk (0x01 << PORT_PORTM_INEN_PIN9_Pos) -#define PORT_PORTM_INEN_PIN10_Pos 10 -#define PORT_PORTM_INEN_PIN10_Msk (0x01 << PORT_PORTM_INEN_PIN10_Pos) -#define PORT_PORTM_INEN_PIN11_Pos 11 -#define PORT_PORTM_INEN_PIN11_Msk (0x01 << PORT_PORTM_INEN_PIN11_Pos) -#define PORT_PORTM_INEN_PIN12_Pos 12 -#define PORT_PORTM_INEN_PIN12_Msk (0x01 << PORT_PORTM_INEN_PIN12_Pos) -#define PORT_PORTM_INEN_PIN13_Pos 13 -#define PORT_PORTM_INEN_PIN13_Msk (0x01 << PORT_PORTM_INEN_PIN13_Pos) -#define PORT_PORTM_INEN_PIN14_Pos 14 -#define PORT_PORTM_INEN_PIN14_Msk (0x01 << PORT_PORTM_INEN_PIN14_Pos) -#define PORT_PORTM_INEN_PIN15_Pos 15 -#define PORT_PORTM_INEN_PIN15_Msk (0x01 << PORT_PORTM_INEN_PIN15_Pos) -#define PORT_PORTM_INEN_PIN16_Pos 16 -#define PORT_PORTM_INEN_PIN16_Msk (0x01 << PORT_PORTM_INEN_PIN16_Pos) -#define PORT_PORTM_INEN_PIN17_Pos 17 -#define PORT_PORTM_INEN_PIN17_Msk (0x01 << PORT_PORTM_INEN_PIN17_Pos) -#define PORT_PORTM_INEN_PIN18_Pos 18 -#define PORT_PORTM_INEN_PIN18_Msk (0x01 << PORT_PORTM_INEN_PIN18_Pos) -#define PORT_PORTM_INEN_PIN19_Pos 19 -#define PORT_PORTM_INEN_PIN19_Msk (0x01 << PORT_PORTM_INEN_PIN19_Pos) -#define PORT_PORTM_INEN_PIN20_Pos 20 -#define PORT_PORTM_INEN_PIN20_Msk (0x01 << PORT_PORTM_INEN_PIN20_Pos) -#define PORT_PORTM_INEN_PIN21_Pos 21 -#define PORT_PORTM_INEN_PIN21_Msk (0x01 << PORT_PORTM_INEN_PIN21_Pos) -#define PORT_PORTM_INEN_PIN22_Pos 22 -#define PORT_PORTM_INEN_PIN22_Msk (0x01 << PORT_PORTM_INEN_PIN22_Pos) -#define PORT_PORTM_INEN_PIN23_Pos 23 -#define PORT_PORTM_INEN_PIN23_Msk (0x01 << PORT_PORTM_INEN_PIN23_Pos) - -#define PORT_PORTN_INEN_PIN0_Pos 0 -#define PORT_PORTN_INEN_PIN0_Msk (0x01 << PORT_PORTN_INEN_PIN0_Pos) -#define PORT_PORTN_INEN_PIN1_Pos 1 -#define PORT_PORTN_INEN_PIN1_Msk (0x01 << PORT_PORTN_INEN_PIN1_Pos) -#define PORT_PORTN_INEN_PIN2_Pos 2 -#define PORT_PORTN_INEN_PIN2_Msk (0x01 << PORT_PORTN_INEN_PIN2_Pos) -#define PORT_PORTN_INEN_PIN3_Pos 3 -#define PORT_PORTN_INEN_PIN3_Msk (0x01 << PORT_PORTN_INEN_PIN3_Pos) -#define PORT_PORTN_INEN_PIN4_Pos 4 -#define PORT_PORTN_INEN_PIN4_Msk (0x01 << PORT_PORTN_INEN_PIN4_Pos) -#define PORT_PORTN_INEN_PIN5_Pos 5 -#define PORT_PORTN_INEN_PIN5_Msk (0x01 << PORT_PORTN_INEN_PIN5_Pos) -#define PORT_PORTN_INEN_PIN6_Pos 6 -#define PORT_PORTN_INEN_PIN6_Msk (0x01 << PORT_PORTN_INEN_PIN6_Pos) -#define PORT_PORTN_INEN_PIN7_Pos 7 -#define PORT_PORTN_INEN_PIN7_Msk (0x01 << PORT_PORTN_INEN_PIN7_Pos) -#define PORT_PORTN_INEN_PIN8_Pos 8 -#define PORT_PORTN_INEN_PIN8_Msk (0x01 << PORT_PORTN_INEN_PIN8_Pos) -#define PORT_PORTN_INEN_PIN9_Pos 9 -#define PORT_PORTN_INEN_PIN9_Msk (0x01 << PORT_PORTN_INEN_PIN9_Pos) -#define PORT_PORTN_INEN_PIN10_Pos 10 -#define PORT_PORTN_INEN_PIN10_Msk (0x01 << PORT_PORTN_INEN_PIN10_Pos) -#define PORT_PORTN_INEN_PIN11_Pos 11 -#define PORT_PORTN_INEN_PIN11_Msk (0x01 << PORT_PORTN_INEN_PIN11_Pos) -#define PORT_PORTN_INEN_PIN12_Pos 12 -#define PORT_PORTN_INEN_PIN12_Msk (0x01 << PORT_PORTN_INEN_PIN12_Pos) -#define PORT_PORTN_INEN_PIN13_Pos 13 -#define PORT_PORTN_INEN_PIN13_Msk (0x01 << PORT_PORTN_INEN_PIN13_Pos) -#define PORT_PORTN_INEN_PIN14_Pos 14 -#define PORT_PORTN_INEN_PIN14_Msk (0x01 << PORT_PORTN_INEN_PIN14_Pos) -#define PORT_PORTN_INEN_PIN15_Pos 15 -#define PORT_PORTN_INEN_PIN15_Msk (0x01 << PORT_PORTN_INEN_PIN15_Pos) -#define PORT_PORTN_INEN_PIN16_Pos 16 -#define PORT_PORTN_INEN_PIN16_Msk (0x01 << PORT_PORTN_INEN_PIN16_Pos) -#define PORT_PORTN_INEN_PIN17_Pos 17 -#define PORT_PORTN_INEN_PIN17_Msk (0x01 << PORT_PORTN_INEN_PIN17_Pos) -#define PORT_PORTN_INEN_PIN18_Pos 18 -#define PORT_PORTN_INEN_PIN18_Msk (0x01 << PORT_PORTN_INEN_PIN18_Pos) -#define PORT_PORTN_INEN_PIN19_Pos 19 -#define PORT_PORTN_INEN_PIN19_Msk (0x01 << PORT_PORTN_INEN_PIN19_Pos) -#define PORT_PORTN_INEN_PIN20_Pos 20 -#define PORT_PORTN_INEN_PIN20_Msk (0x01 << PORT_PORTN_INEN_PIN20_Pos) -#define PORT_PORTN_INEN_PIN21_Pos 21 -#define PORT_PORTN_INEN_PIN21_Msk (0x01 << PORT_PORTN_INEN_PIN21_Pos) -#define PORT_PORTN_INEN_PIN22_Pos 22 -#define PORT_PORTN_INEN_PIN22_Msk (0x01 << PORT_PORTN_INEN_PIN22_Pos) -#define PORT_PORTN_INEN_PIN23_Pos 23 -#define PORT_PORTN_INEN_PIN23_Msk (0x01 << PORT_PORTN_INEN_PIN23_Pos) - -#define PORT_PORTP_INEN_PIN0_Pos 0 -#define PORT_PORTP_INEN_PIN0_Msk (0x01 << PORT_PORTP_INEN_PIN0_Pos) -#define PORT_PORTP_INEN_PIN1_Pos 1 -#define PORT_PORTP_INEN_PIN1_Msk (0x01 << PORT_PORTP_INEN_PIN1_Pos) -#define PORT_PORTP_INEN_PIN2_Pos 2 -#define PORT_PORTP_INEN_PIN2_Msk (0x01 << PORT_PORTP_INEN_PIN2_Pos) -#define PORT_PORTP_INEN_PIN3_Pos 3 -#define PORT_PORTP_INEN_PIN3_Msk (0x01 << PORT_PORTP_INEN_PIN3_Pos) -#define PORT_PORTP_INEN_PIN4_Pos 4 -#define PORT_PORTP_INEN_PIN4_Msk (0x01 << PORT_PORTP_INEN_PIN4_Pos) -#define PORT_PORTP_INEN_PIN5_Pos 5 -#define PORT_PORTP_INEN_PIN5_Msk (0x01 << PORT_PORTP_INEN_PIN5_Pos) -#define PORT_PORTP_INEN_PIN6_Pos 6 -#define PORT_PORTP_INEN_PIN6_Msk (0x01 << PORT_PORTP_INEN_PIN6_Pos) -#define PORT_PORTP_INEN_PIN7_Pos 7 -#define PORT_PORTP_INEN_PIN7_Msk (0x01 << PORT_PORTP_INEN_PIN7_Pos) -#define PORT_PORTP_INEN_PIN8_Pos 8 -#define PORT_PORTP_INEN_PIN8_Msk (0x01 << PORT_PORTP_INEN_PIN8_Pos) -#define PORT_PORTP_INEN_PIN9_Pos 9 -#define PORT_PORTP_INEN_PIN9_Msk (0x01 << PORT_PORTP_INEN_PIN9_Pos) -#define PORT_PORTP_INEN_PIN10_Pos 10 -#define PORT_PORTP_INEN_PIN10_Msk (0x01 << PORT_PORTP_INEN_PIN10_Pos) -#define PORT_PORTP_INEN_PIN11_Pos 11 -#define PORT_PORTP_INEN_PIN11_Msk (0x01 << PORT_PORTP_INEN_PIN11_Pos) -#define PORT_PORTP_INEN_PIN12_Pos 12 -#define PORT_PORTP_INEN_PIN12_Msk (0x01 << PORT_PORTP_INEN_PIN12_Pos) -#define PORT_PORTP_INEN_PIN13_Pos 13 -#define PORT_PORTP_INEN_PIN13_Msk (0x01 << PORT_PORTP_INEN_PIN13_Pos) -#define PORT_PORTP_INEN_PIN14_Pos 14 -#define PORT_PORTP_INEN_PIN14_Msk (0x01 << PORT_PORTP_INEN_PIN14_Pos) -#define PORT_PORTP_INEN_PIN15_Pos 15 -#define PORT_PORTP_INEN_PIN15_Msk (0x01 << PORT_PORTP_INEN_PIN15_Pos) -#define PORT_PORTP_INEN_PIN16_Pos 16 -#define PORT_PORTP_INEN_PIN16_Msk (0x01 << PORT_PORTP_INEN_PIN16_Pos) -#define PORT_PORTP_INEN_PIN17_Pos 17 -#define PORT_PORTP_INEN_PIN17_Msk (0x01 << PORT_PORTP_INEN_PIN17_Pos) -#define PORT_PORTP_INEN_PIN18_Pos 18 -#define PORT_PORTP_INEN_PIN18_Msk (0x01 << PORT_PORTP_INEN_PIN18_Pos) -#define PORT_PORTP_INEN_PIN19_Pos 19 -#define PORT_PORTP_INEN_PIN19_Msk (0x01 << PORT_PORTP_INEN_PIN19_Pos) -#define PORT_PORTP_INEN_PIN20_Pos 20 -#define PORT_PORTP_INEN_PIN20_Msk (0x01 << PORT_PORTP_INEN_PIN20_Pos) -#define PORT_PORTP_INEN_PIN21_Pos 21 -#define PORT_PORTP_INEN_PIN21_Msk (0x01 << PORT_PORTP_INEN_PIN21_Pos) -#define PORT_PORTP_INEN_PIN22_Pos 22 -#define PORT_PORTP_INEN_PIN22_Msk (0x01 << PORT_PORTP_INEN_PIN22_Pos) -#define PORT_PORTP_INEN_PIN23_Pos 23 -#define PORT_PORTP_INEN_PIN23_Msk (0x01 << PORT_PORTP_INEN_PIN23_Pos) - -typedef struct -{ - __IO uint32_t DATA; -#define PIN0 0 -#define PIN1 1 -#define PIN2 2 -#define PIN3 3 -#define PIN4 4 -#define PIN5 5 -#define PIN6 6 -#define PIN7 7 -#define PIN8 8 -#define PIN9 9 -#define PIN10 10 -#define PIN11 11 -#define PIN12 12 -#define PIN13 13 -#define PIN14 14 -#define PIN15 15 -#define PIN16 16 -#define PIN17 17 -#define PIN18 18 -#define PIN19 19 -#define PIN20 20 -#define PIN21 21 -#define PIN22 22 -#define PIN23 23 -#define PIN24 24 - - __IO uint32_t DIR; //0 输入 1 输出 - - __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触å�‘中断 0 边沿触å�‘中断 - - __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触å�‘中断时,此ä½�ç½®1表示上å�‡æ²¿å’Œä¸‹é™�沿都触å�‘中断,置0时触å�‘边沿由INTRISEEN选择 - - __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上å�‡æ²¿/高电平触å�‘中断 0 下é™�沿/低电平触å�‘中断 - - __IO uint32_t INTEN; //1 中断使能 0 中断ç¦�æ­¢ - - __IO uint32_t INTRAWSTAT; //中断检测å�•元是å�¦æ£€æµ‹åˆ°äº†è§¦å�‘中断的æ�¡ä»¶ 1 检测到了中断触å�‘æ�¡ä»¶ 0 没有检测到中断触å�‘æ�¡ä»¶ - - __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0 - - __IO uint32_t INTCLR; //写1清除中断标志,å�ªå¯¹è¾¹æ²¿è§¦å�‘中断有用 -} GPIO_TypeDef; -#define GPIO_DATA_PIN0_Pos 0 -#define GPIO_DATA_PIN0_Msk (0x01 << GPIO_DATA_PIN0_Pos) -#define GPIO_DATA_PIN1_Pos 1 -#define GPIO_DATA_PIN1_Msk (0x01 << GPIO_DATA_PIN1_Pos) -#define GPIO_DATA_PIN2_Pos 2 -#define GPIO_DATA_PIN2_Msk (0x01 << GPIO_DATA_PIN2_Pos) -#define GPIO_DATA_PIN3_Pos 3 -#define GPIO_DATA_PIN3_Msk (0x01 << GPIO_DATA_PIN3_Pos) -#define GPIO_DATA_PIN4_Pos 4 -#define GPIO_DATA_PIN4_Msk (0x01 << GPIO_DATA_PIN4_Pos) -#define GPIO_DATA_PIN5_Pos 5 -#define GPIO_DATA_PIN5_Msk (0x01 << GPIO_DATA_PIN5_Pos) -#define GPIO_DATA_PIN6_Pos 6 -#define GPIO_DATA_PIN6_Msk (0x01 << GPIO_DATA_PIN6_Pos) -#define GPIO_DATA_PIN7_Pos 7 -#define GPIO_DATA_PIN7_Msk (0x01 << GPIO_DATA_PIN7_Pos) -#define GPIO_DATA_PIN8_Pos 8 -#define GPIO_DATA_PIN8_Msk (0x01 << GPIO_DATA_PIN8_Pos) -#define GPIO_DATA_PIN9_Pos 9 -#define GPIO_DATA_PIN9_Msk (0x01 << GPIO_DATA_PIN9_Pos) -#define GPIO_DATA_PIN10_Pos 10 -#define GPIO_DATA_PIN10_Msk (0x01 << GPIO_DATA_PIN10_Pos) -#define GPIO_DATA_PIN11_Pos 11 -#define GPIO_DATA_PIN11_Msk (0x01 << GPIO_DATA_PIN11_Pos) -#define GPIO_DATA_PIN12_Pos 12 -#define GPIO_DATA_PIN12_Msk (0x01 << GPIO_DATA_PIN12_Pos) -#define GPIO_DATA_PIN13_Pos 13 -#define GPIO_DATA_PIN13_Msk (0x01 << GPIO_DATA_PIN13_Pos) -#define GPIO_DATA_PIN14_Pos 14 -#define GPIO_DATA_PIN14_Msk (0x01 << GPIO_DATA_PIN14_Pos) -#define GPIO_DATA_PIN15_Pos 15 -#define GPIO_DATA_PIN15_Msk (0x01 << GPIO_DATA_PIN15_Pos) -#define GPIO_DATA_PIN16_Pos 16 -#define GPIO_DATA_PIN16_Msk (0x01 << GPIO_DATA_PIN16_Pos) -#define GPIO_DATA_PIN17_Pos 17 -#define GPIO_DATA_PIN17_Msk (0x01 << GPIO_DATA_PIN17_Pos) -#define GPIO_DATA_PIN18_Pos 18 -#define GPIO_DATA_PIN18_Msk (0x01 << GPIO_DATA_PIN18_Pos) -#define GPIO_DATA_PIN19_Pos 19 -#define GPIO_DATA_PIN19_Msk (0x01 << GPIO_DATA_PIN19_Pos) -#define GPIO_DATA_PIN20_Pos 20 -#define GPIO_DATA_PIN20_Msk (0x01 << GPIO_DATA_PIN20_Pos) -#define GPIO_DATA_PIN21_Pos 21 -#define GPIO_DATA_PIN21_Msk (0x01 << GPIO_DATA_PIN21_Pos) -#define GPIO_DATA_PIN22_Pos 22 -#define GPIO_DATA_PIN22_Msk (0x01 << GPIO_DATA_PIN22_Pos) -#define GPIO_DATA_PIN23_Pos 23 -#define GPIO_DATA_PIN23_Msk (0x01 << GPIO_DATA_PIN23_Pos) - -#define GPIO_DIR_PIN0_Pos 0 -#define GPIO_DIR_PIN0_Msk (0x01 << GPIO_DIR_PIN0_Pos) -#define GPIO_DIR_PIN1_Pos 1 -#define GPIO_DIR_PIN1_Msk (0x01 << GPIO_DIR_PIN1_Pos) -#define GPIO_DIR_PIN2_Pos 2 -#define GPIO_DIR_PIN2_Msk (0x01 << GPIO_DIR_PIN2_Pos) -#define GPIO_DIR_PIN3_Pos 3 -#define GPIO_DIR_PIN3_Msk (0x01 << GPIO_DIR_PIN3_Pos) -#define GPIO_DIR_PIN4_Pos 4 -#define GPIO_DIR_PIN4_Msk (0x01 << GPIO_DIR_PIN4_Pos) -#define GPIO_DIR_PIN5_Pos 5 -#define GPIO_DIR_PIN5_Msk (0x01 << GPIO_DIR_PIN5_Pos) -#define GPIO_DIR_PIN6_Pos 6 -#define GPIO_DIR_PIN6_Msk (0x01 << GPIO_DIR_PIN6_Pos) -#define GPIO_DIR_PIN7_Pos 7 -#define GPIO_DIR_PIN7_Msk (0x01 << GPIO_DIR_PIN7_Pos) -#define GPIO_DIR_PIN8_Pos 8 -#define GPIO_DIR_PIN8_Msk (0x01 << GPIO_DIR_PIN8_Pos) -#define GPIO_DIR_PIN9_Pos 9 -#define GPIO_DIR_PIN9_Msk (0x01 << GPIO_DIR_PIN9_Pos) -#define GPIO_DIR_PIN10_Pos 10 -#define GPIO_DIR_PIN10_Msk (0x01 << GPIO_DIR_PIN10_Pos) -#define GPIO_DIR_PIN11_Pos 11 -#define GPIO_DIR_PIN11_Msk (0x01 << GPIO_DIR_PIN11_Pos) -#define GPIO_DIR_PIN12_Pos 12 -#define GPIO_DIR_PIN12_Msk (0x01 << GPIO_DIR_PIN12_Pos) -#define GPIO_DIR_PIN13_Pos 13 -#define GPIO_DIR_PIN13_Msk (0x01 << GPIO_DIR_PIN13_Pos) -#define GPIO_DIR_PIN14_Pos 14 -#define GPIO_DIR_PIN14_Msk (0x01 << GPIO_DIR_PIN14_Pos) -#define GPIO_DIR_PIN15_Pos 15 -#define GPIO_DIR_PIN15_Msk (0x01 << GPIO_DIR_PIN15_Pos) -#define GPIO_DIR_PIN16_Pos 16 -#define GPIO_DIR_PIN16_Msk (0x01 << GPIO_DIR_PIN16_Pos) -#define GPIO_DIR_PIN17_Pos 17 -#define GPIO_DIR_PIN17_Msk (0x01 << GPIO_DIR_PIN17_Pos) -#define GPIO_DIR_PIN18_Pos 18 -#define GPIO_DIR_PIN18_Msk (0x01 << GPIO_DIR_PIN18_Pos) -#define GPIO_DIR_PIN19_Pos 19 -#define GPIO_DIR_PIN19_Msk (0x01 << GPIO_DIR_PIN19_Pos) -#define GPIO_DIR_PIN20_Pos 20 -#define GPIO_DIR_PIN20_Msk (0x01 << GPIO_DIR_PIN20_Pos) -#define GPIO_DIR_PIN21_Pos 21 -#define GPIO_DIR_PIN21_Msk (0x01 << GPIO_DIR_PIN21_Pos) -#define GPIO_DIR_PIN22_Pos 22 -#define GPIO_DIR_PIN22_Msk (0x01 << GPIO_DIR_PIN22_Pos) -#define GPIO_DIR_PIN23_Pos 23 -#define GPIO_DIR_PIN23_Msk (0x01 << GPIO_DIR_PIN23_Pos) - -#define GPIO_INTLVLTRG_PIN0_Pos 0 -#define GPIO_INTLVLTRG_PIN0_Msk (0x01 << GPIO_INTLVLTRG_PIN0_Pos) -#define GPIO_INTLVLTRG_PIN1_Pos 1 -#define GPIO_INTLVLTRG_PIN1_Msk (0x01 << GPIO_INTLVLTRG_PIN1_Pos) -#define GPIO_INTLVLTRG_PIN2_Pos 2 -#define GPIO_INTLVLTRG_PIN2_Msk (0x01 << GPIO_INTLVLTRG_PIN2_Pos) -#define GPIO_INTLVLTRG_PIN3_Pos 3 -#define GPIO_INTLVLTRG_PIN3_Msk (0x01 << GPIO_INTLVLTRG_PIN3_Pos) -#define GPIO_INTLVLTRG_PIN4_Pos 4 -#define GPIO_INTLVLTRG_PIN4_Msk (0x01 << GPIO_INTLVLTRG_PIN4_Pos) -#define GPIO_INTLVLTRG_PIN5_Pos 5 -#define GPIO_INTLVLTRG_PIN5_Msk (0x01 << GPIO_INTLVLTRG_PIN5_Pos) -#define GPIO_INTLVLTRG_PIN6_Pos 6 -#define GPIO_INTLVLTRG_PIN6_Msk (0x01 << GPIO_INTLVLTRG_PIN6_Pos) -#define GPIO_INTLVLTRG_PIN7_Pos 7 -#define GPIO_INTLVLTRG_PIN7_Msk (0x01 << GPIO_INTLVLTRG_PIN7_Pos) -#define GPIO_INTLVLTRG_PIN8_Pos 8 -#define GPIO_INTLVLTRG_PIN8_Msk (0x01 << GPIO_INTLVLTRG_PIN8_Pos) -#define GPIO_INTLVLTRG_PIN9_Pos 9 -#define GPIO_INTLVLTRG_PIN9_Msk (0x01 << GPIO_INTLVLTRG_PIN9_Pos) -#define GPIO_INTLVLTRG_PIN10_Pos 10 -#define GPIO_INTLVLTRG_PIN10_Msk (0x01 << GPIO_INTLVLTRG_PIN10_Pos) -#define GPIO_INTLVLTRG_PIN11_Pos 11 -#define GPIO_INTLVLTRG_PIN11_Msk (0x01 << GPIO_INTLVLTRG_PIN11_Pos) -#define GPIO_INTLVLTRG_PIN12_Pos 12 -#define GPIO_INTLVLTRG_PIN12_Msk (0x01 << GPIO_INTLVLTRG_PIN12_Pos) -#define GPIO_INTLVLTRG_PIN13_Pos 13 -#define GPIO_INTLVLTRG_PIN13_Msk (0x01 << GPIO_INTLVLTRG_PIN13_Pos) -#define GPIO_INTLVLTRG_PIN14_Pos 14 -#define GPIO_INTLVLTRG_PIN14_Msk (0x01 << GPIO_INTLVLTRG_PIN14_Pos) -#define GPIO_INTLVLTRG_PIN15_Pos 15 -#define GPIO_INTLVLTRG_PIN15_Msk (0x01 << GPIO_INTLVLTRG_PIN15_Pos) -#define GPIO_INTLVLTRG_PIN16_Pos 16 -#define GPIO_INTLVLTRG_PIN16_Msk (0x01 << GPIO_INTLVLTRG_PIN16_Pos) -#define GPIO_INTLVLTRG_PIN17_Pos 17 -#define GPIO_INTLVLTRG_PIN17_Msk (0x01 << GPIO_INTLVLTRG_PIN17_Pos) -#define GPIO_INTLVLTRG_PIN18_Pos 18 -#define GPIO_INTLVLTRG_PIN18_Msk (0x01 << GPIO_INTLVLTRG_PIN18_Pos) -#define GPIO_INTLVLTRG_PIN19_Pos 19 -#define GPIO_INTLVLTRG_PIN19_Msk (0x01 << GPIO_INTLVLTRG_PIN19_Pos) -#define GPIO_INTLVLTRG_PIN20_Pos 20 -#define GPIO_INTLVLTRG_PIN20_Msk (0x01 << GPIO_INTLVLTRG_PIN20_Pos) -#define GPIO_INTLVLTRG_PIN21_Pos 21 -#define GPIO_INTLVLTRG_PIN21_Msk (0x01 << GPIO_INTLVLTRG_PIN21_Pos) -#define GPIO_INTLVLTRG_PIN22_Pos 22 -#define GPIO_INTLVLTRG_PIN22_Msk (0x01 << GPIO_INTLVLTRG_PIN22_Pos) -#define GPIO_INTLVLTRG_PIN23_Pos 23 -#define GPIO_INTLVLTRG_PIN23_Msk (0x01 << GPIO_INTLVLTRG_PIN23_Pos) - -#define GPIO_INTBE_PIN0_Pos 0 -#define GPIO_INTBE_PIN0_Msk (0x01 << GPIO_INTBE_PIN0_Pos) -#define GPIO_INTBE_PIN1_Pos 1 -#define GPIO_INTBE_PIN1_Msk (0x01 << GPIO_INTBE_PIN1_Pos) -#define GPIO_INTBE_PIN2_Pos 2 -#define GPIO_INTBE_PIN2_Msk (0x01 << GPIO_INTBE_PIN2_Pos) -#define GPIO_INTBE_PIN3_Pos 3 -#define GPIO_INTBE_PIN3_Msk (0x01 << GPIO_INTBE_PIN3_Pos) -#define GPIO_INTBE_PIN4_Pos 4 -#define GPIO_INTBE_PIN4_Msk (0x01 << GPIO_INTBE_PIN4_Pos) -#define GPIO_INTBE_PIN5_Pos 5 -#define GPIO_INTBE_PIN5_Msk (0x01 << GPIO_INTBE_PIN5_Pos) -#define GPIO_INTBE_PIN6_Pos 6 -#define GPIO_INTBE_PIN6_Msk (0x01 << GPIO_INTBE_PIN6_Pos) -#define GPIO_INTBE_PIN7_Pos 7 -#define GPIO_INTBE_PIN7_Msk (0x01 << GPIO_INTBE_PIN7_Pos) -#define GPIO_INTBE_PIN8_Pos 8 -#define GPIO_INTBE_PIN8_Msk (0x01 << GPIO_INTBE_PIN8_Pos) -#define GPIO_INTBE_PIN9_Pos 9 -#define GPIO_INTBE_PIN9_Msk (0x01 << GPIO_INTBE_PIN9_Pos) -#define GPIO_INTBE_PIN10_Pos 10 -#define GPIO_INTBE_PIN10_Msk (0x01 << GPIO_INTBE_PIN10_Pos) -#define GPIO_INTBE_PIN11_Pos 11 -#define GPIO_INTBE_PIN11_Msk (0x01 << GPIO_INTBE_PIN11_Pos) -#define GPIO_INTBE_PIN12_Pos 12 -#define GPIO_INTBE_PIN12_Msk (0x01 << GPIO_INTBE_PIN12_Pos) -#define GPIO_INTBE_PIN13_Pos 13 -#define GPIO_INTBE_PIN13_Msk (0x01 << GPIO_INTBE_PIN13_Pos) -#define GPIO_INTBE_PIN14_Pos 14 -#define GPIO_INTBE_PIN14_Msk (0x01 << GPIO_INTBE_PIN14_Pos) -#define GPIO_INTBE_PIN15_Pos 15 -#define GPIO_INTBE_PIN15_Msk (0x01 << GPIO_INTBE_PIN15_Pos) -#define GPIO_INTBE_PIN16_Pos 16 -#define GPIO_INTBE_PIN16_Msk (0x01 << GPIO_INTBE_PIN16_Pos) -#define GPIO_INTBE_PIN17_Pos 17 -#define GPIO_INTBE_PIN17_Msk (0x01 << GPIO_INTBE_PIN17_Pos) -#define GPIO_INTBE_PIN18_Pos 18 -#define GPIO_INTBE_PIN18_Msk (0x01 << GPIO_INTBE_PIN18_Pos) -#define GPIO_INTBE_PIN19_Pos 19 -#define GPIO_INTBE_PIN19_Msk (0x01 << GPIO_INTBE_PIN19_Pos) -#define GPIO_INTBE_PIN20_Pos 20 -#define GPIO_INTBE_PIN20_Msk (0x01 << GPIO_INTBE_PIN20_Pos) -#define GPIO_INTBE_PIN21_Pos 21 -#define GPIO_INTBE_PIN21_Msk (0x01 << GPIO_INTBE_PIN21_Pos) -#define GPIO_INTBE_PIN22_Pos 22 -#define GPIO_INTBE_PIN22_Msk (0x01 << GPIO_INTBE_PIN22_Pos) -#define GPIO_INTBE_PIN23_Pos 23 -#define GPIO_INTBE_PIN23_Msk (0x01 << GPIO_INTBE_PIN23_Pos) - -#define GPIO_INTRISEEN_PIN0_Pos 0 -#define GPIO_INTRISEEN_PIN0_Msk (0x01 << GPIO_INTRISEEN_PIN0_Pos) -#define GPIO_INTRISEEN_PIN1_Pos 1 -#define GPIO_INTRISEEN_PIN1_Msk (0x01 << GPIO_INTRISEEN_PIN1_Pos) -#define GPIO_INTRISEEN_PIN2_Pos 2 -#define GPIO_INTRISEEN_PIN2_Msk (0x01 << GPIO_INTRISEEN_PIN2_Pos) -#define GPIO_INTRISEEN_PIN3_Pos 3 -#define GPIO_INTRISEEN_PIN3_Msk (0x01 << GPIO_INTRISEEN_PIN3_Pos) -#define GPIO_INTRISEEN_PIN4_Pos 4 -#define GPIO_INTRISEEN_PIN4_Msk (0x01 << GPIO_INTRISEEN_PIN4_Pos) -#define GPIO_INTRISEEN_PIN5_Pos 5 -#define GPIO_INTRISEEN_PIN5_Msk (0x01 << GPIO_INTRISEEN_PIN5_Pos) -#define GPIO_INTRISEEN_PIN6_Pos 6 -#define GPIO_INTRISEEN_PIN6_Msk (0x01 << GPIO_INTRISEEN_PIN6_Pos) -#define GPIO_INTRISEEN_PIN7_Pos 7 -#define GPIO_INTRISEEN_PIN7_Msk (0x01 << GPIO_INTRISEEN_PIN7_Pos) -#define GPIO_INTRISEEN_PIN8_Pos 8 -#define GPIO_INTRISEEN_PIN8_Msk (0x01 << GPIO_INTRISEEN_PIN8_Pos) -#define GPIO_INTRISEEN_PIN9_Pos 9 -#define GPIO_INTRISEEN_PIN9_Msk (0x01 << GPIO_INTRISEEN_PIN9_Pos) -#define GPIO_INTRISEEN_PIN10_Pos 10 -#define GPIO_INTRISEEN_PIN10_Msk (0x01 << GPIO_INTRISEEN_PIN10_Pos) -#define GPIO_INTRISEEN_PIN11_Pos 11 -#define GPIO_INTRISEEN_PIN11_Msk (0x01 << GPIO_INTRISEEN_PIN11_Pos) -#define GPIO_INTRISEEN_PIN12_Pos 12 -#define GPIO_INTRISEEN_PIN12_Msk (0x01 << GPIO_INTRISEEN_PIN12_Pos) -#define GPIO_INTRISEEN_PIN13_Pos 13 -#define GPIO_INTRISEEN_PIN13_Msk (0x01 << GPIO_INTRISEEN_PIN13_Pos) -#define GPIO_INTRISEEN_PIN14_Pos 14 -#define GPIO_INTRISEEN_PIN14_Msk (0x01 << GPIO_INTRISEEN_PIN14_Pos) -#define GPIO_INTRISEEN_PIN15_Pos 15 -#define GPIO_INTRISEEN_PIN15_Msk (0x01 << GPIO_INTRISEEN_PIN15_Pos) -#define GPIO_INTRISEEN_PIN16_Pos 16 -#define GPIO_INTRISEEN_PIN16_Msk (0x01 << GPIO_INTRISEEN_PIN16_Pos) -#define GPIO_INTRISEEN_PIN17_Pos 17 -#define GPIO_INTRISEEN_PIN17_Msk (0x01 << GPIO_INTRISEEN_PIN17_Pos) -#define GPIO_INTRISEEN_PIN18_Pos 18 -#define GPIO_INTRISEEN_PIN18_Msk (0x01 << GPIO_INTRISEEN_PIN18_Pos) -#define GPIO_INTRISEEN_PIN19_Pos 19 -#define GPIO_INTRISEEN_PIN19_Msk (0x01 << GPIO_INTRISEEN_PIN19_Pos) -#define GPIO_INTRISEEN_PIN20_Pos 20 -#define GPIO_INTRISEEN_PIN20_Msk (0x01 << GPIO_INTRISEEN_PIN20_Pos) -#define GPIO_INTRISEEN_PIN21_Pos 21 -#define GPIO_INTRISEEN_PIN21_Msk (0x01 << GPIO_INTRISEEN_PIN21_Pos) -#define GPIO_INTRISEEN_PIN22_Pos 22 -#define GPIO_INTRISEEN_PIN22_Msk (0x01 << GPIO_INTRISEEN_PIN22_Pos) -#define GPIO_INTRISEEN_PIN23_Pos 23 -#define GPIO_INTRISEEN_PIN23_Msk (0x01 << GPIO_INTRISEEN_PIN23_Pos) - -#define GPIO_INTEN_PIN0_Pos 0 -#define GPIO_INTEN_PIN0_Msk (0x01 << GPIO_INTEN_PIN0_Pos) -#define GPIO_INTEN_PIN1_Pos 1 -#define GPIO_INTEN_PIN1_Msk (0x01 << GPIO_INTEN_PIN1_Pos) -#define GPIO_INTEN_PIN2_Pos 2 -#define GPIO_INTEN_PIN2_Msk (0x01 << GPIO_INTEN_PIN2_Pos) -#define GPIO_INTEN_PIN3_Pos 3 -#define GPIO_INTEN_PIN3_Msk (0x01 << GPIO_INTEN_PIN3_Pos) -#define GPIO_INTEN_PIN4_Pos 4 -#define GPIO_INTEN_PIN4_Msk (0x01 << GPIO_INTEN_PIN4_Pos) -#define GPIO_INTEN_PIN5_Pos 5 -#define GPIO_INTEN_PIN5_Msk (0x01 << GPIO_INTEN_PIN5_Pos) -#define GPIO_INTEN_PIN6_Pos 6 -#define GPIO_INTEN_PIN6_Msk (0x01 << GPIO_INTEN_PIN6_Pos) -#define GPIO_INTEN_PIN7_Pos 7 -#define GPIO_INTEN_PIN7_Msk (0x01 << GPIO_INTEN_PIN7_Pos) -#define GPIO_INTEN_PIN8_Pos 8 -#define GPIO_INTEN_PIN8_Msk (0x01 << GPIO_INTEN_PIN8_Pos) -#define GPIO_INTEN_PIN9_Pos 9 -#define GPIO_INTEN_PIN9_Msk (0x01 << GPIO_INTEN_PIN9_Pos) -#define GPIO_INTEN_PIN10_Pos 10 -#define GPIO_INTEN_PIN10_Msk (0x01 << GPIO_INTEN_PIN10_Pos) -#define GPIO_INTEN_PIN11_Pos 11 -#define GPIO_INTEN_PIN11_Msk (0x01 << GPIO_INTEN_PIN11_Pos) -#define GPIO_INTEN_PIN12_Pos 12 -#define GPIO_INTEN_PIN12_Msk (0x01 << GPIO_INTEN_PIN12_Pos) -#define GPIO_INTEN_PIN13_Pos 13 -#define GPIO_INTEN_PIN13_Msk (0x01 << GPIO_INTEN_PIN13_Pos) -#define GPIO_INTEN_PIN14_Pos 14 -#define GPIO_INTEN_PIN14_Msk (0x01 << GPIO_INTEN_PIN14_Pos) -#define GPIO_INTEN_PIN15_Pos 15 -#define GPIO_INTEN_PIN15_Msk (0x01 << GPIO_INTEN_PIN15_Pos) -#define GPIO_INTEN_PIN16_Pos 16 -#define GPIO_INTEN_PIN16_Msk (0x01 << GPIO_INTEN_PIN16_Pos) -#define GPIO_INTEN_PIN17_Pos 17 -#define GPIO_INTEN_PIN17_Msk (0x01 << GPIO_INTEN_PIN17_Pos) -#define GPIO_INTEN_PIN18_Pos 18 -#define GPIO_INTEN_PIN18_Msk (0x01 << GPIO_INTEN_PIN18_Pos) -#define GPIO_INTEN_PIN19_Pos 19 -#define GPIO_INTEN_PIN19_Msk (0x01 << GPIO_INTEN_PIN19_Pos) -#define GPIO_INTEN_PIN20_Pos 20 -#define GPIO_INTEN_PIN20_Msk (0x01 << GPIO_INTEN_PIN20_Pos) -#define GPIO_INTEN_PIN21_Pos 21 -#define GPIO_INTEN_PIN21_Msk (0x01 << GPIO_INTEN_PIN21_Pos) -#define GPIO_INTEN_PIN22_Pos 22 -#define GPIO_INTEN_PIN22_Msk (0x01 << GPIO_INTEN_PIN22_Pos) -#define GPIO_INTEN_PIN23_Pos 23 -#define GPIO_INTEN_PIN23_Msk (0x01 << GPIO_INTEN_PIN23_Pos) - -#define GPIO_INTRAWSTAT_PIN0_Pos 0 -#define GPIO_INTRAWSTAT_PIN0_Msk (0x01 << GPIO_INTRAWSTAT_PIN0_Pos) -#define GPIO_INTRAWSTAT_PIN1_Pos 1 -#define GPIO_INTRAWSTAT_PIN1_Msk (0x01 << GPIO_INTRAWSTAT_PIN1_Pos) -#define GPIO_INTRAWSTAT_PIN2_Pos 2 -#define GPIO_INTRAWSTAT_PIN2_Msk (0x01 << GPIO_INTRAWSTAT_PIN2_Pos) -#define GPIO_INTRAWSTAT_PIN3_Pos 3 -#define GPIO_INTRAWSTAT_PIN3_Msk (0x01 << GPIO_INTRAWSTAT_PIN3_Pos) -#define GPIO_INTRAWSTAT_PIN4_Pos 4 -#define GPIO_INTRAWSTAT_PIN4_Msk (0x01 << GPIO_INTRAWSTAT_PIN4_Pos) -#define GPIO_INTRAWSTAT_PIN5_Pos 5 -#define GPIO_INTRAWSTAT_PIN5_Msk (0x01 << GPIO_INTRAWSTAT_PIN5_Pos) -#define GPIO_INTRAWSTAT_PIN6_Pos 6 -#define GPIO_INTRAWSTAT_PIN6_Msk (0x01 << GPIO_INTRAWSTAT_PIN6_Pos) -#define GPIO_INTRAWSTAT_PIN7_Pos 7 -#define GPIO_INTRAWSTAT_PIN7_Msk (0x01 << GPIO_INTRAWSTAT_PIN7_Pos) -#define GPIO_INTRAWSTAT_PIN8_Pos 8 -#define GPIO_INTRAWSTAT_PIN8_Msk (0x01 << GPIO_INTRAWSTAT_PIN8_Pos) -#define GPIO_INTRAWSTAT_PIN9_Pos 9 -#define GPIO_INTRAWSTAT_PIN9_Msk (0x01 << GPIO_INTRAWSTAT_PIN9_Pos) -#define GPIO_INTRAWSTAT_PIN10_Pos 10 -#define GPIO_INTRAWSTAT_PIN10_Msk (0x01 << GPIO_INTRAWSTAT_PIN10_Pos) -#define GPIO_INTRAWSTAT_PIN11_Pos 11 -#define GPIO_INTRAWSTAT_PIN11_Msk (0x01 << GPIO_INTRAWSTAT_PIN11_Pos) -#define GPIO_INTRAWSTAT_PIN12_Pos 12 -#define GPIO_INTRAWSTAT_PIN12_Msk (0x01 << GPIO_INTRAWSTAT_PIN12_Pos) -#define GPIO_INTRAWSTAT_PIN13_Pos 13 -#define GPIO_INTRAWSTAT_PIN13_Msk (0x01 << GPIO_INTRAWSTAT_PIN13_Pos) -#define GPIO_INTRAWSTAT_PIN14_Pos 14 -#define GPIO_INTRAWSTAT_PIN14_Msk (0x01 << GPIO_INTRAWSTAT_PIN14_Pos) -#define GPIO_INTRAWSTAT_PIN15_Pos 15 -#define GPIO_INTRAWSTAT_PIN15_Msk (0x01 << GPIO_INTRAWSTAT_PIN15_Pos) -#define GPIO_INTRAWSTAT_PIN16_Pos 16 -#define GPIO_INTRAWSTAT_PIN16_Msk (0x01 << GPIO_INTRAWSTAT_PIN16_Pos) -#define GPIO_INTRAWSTAT_PIN17_Pos 17 -#define GPIO_INTRAWSTAT_PIN17_Msk (0x01 << GPIO_INTRAWSTAT_PIN17_Pos) -#define GPIO_INTRAWSTAT_PIN18_Pos 18 -#define GPIO_INTRAWSTAT_PIN18_Msk (0x01 << GPIO_INTRAWSTAT_PIN18_Pos) -#define GPIO_INTRAWSTAT_PIN19_Pos 19 -#define GPIO_INTRAWSTAT_PIN19_Msk (0x01 << GPIO_INTRAWSTAT_PIN19_Pos) -#define GPIO_INTRAWSTAT_PIN20_Pos 20 -#define GPIO_INTRAWSTAT_PIN20_Msk (0x01 << GPIO_INTRAWSTAT_PIN20_Pos) -#define GPIO_INTRAWSTAT_PIN21_Pos 21 -#define GPIO_INTRAWSTAT_PIN21_Msk (0x01 << GPIO_INTRAWSTAT_PIN21_Pos) -#define GPIO_INTRAWSTAT_PIN22_Pos 22 -#define GPIO_INTRAWSTAT_PIN22_Msk (0x01 << GPIO_INTRAWSTAT_PIN22_Pos) -#define GPIO_INTRAWSTAT_PIN23_Pos 23 -#define GPIO_INTRAWSTAT_PIN23_Msk (0x01 << GPIO_INTRAWSTAT_PIN23_Pos) - -#define GPIO_INTSTAT_PIN0_Pos 0 -#define GPIO_INTSTAT_PIN0_Msk (0x01 << GPIO_INTSTAT_PIN0_Pos) -#define GPIO_INTSTAT_PIN1_Pos 1 -#define GPIO_INTSTAT_PIN1_Msk (0x01 << GPIO_INTSTAT_PIN1_Pos) -#define GPIO_INTSTAT_PIN2_Pos 2 -#define GPIO_INTSTAT_PIN2_Msk (0x01 << GPIO_INTSTAT_PIN2_Pos) -#define GPIO_INTSTAT_PIN3_Pos 3 -#define GPIO_INTSTAT_PIN3_Msk (0x01 << GPIO_INTSTAT_PIN3_Pos) -#define GPIO_INTSTAT_PIN4_Pos 4 -#define GPIO_INTSTAT_PIN4_Msk (0x01 << GPIO_INTSTAT_PIN4_Pos) -#define GPIO_INTSTAT_PIN5_Pos 5 -#define GPIO_INTSTAT_PIN5_Msk (0x01 << GPIO_INTSTAT_PIN5_Pos) -#define GPIO_INTSTAT_PIN6_Pos 6 -#define GPIO_INTSTAT_PIN6_Msk (0x01 << GPIO_INTSTAT_PIN6_Pos) -#define GPIO_INTSTAT_PIN7_Pos 7 -#define GPIO_INTSTAT_PIN7_Msk (0x01 << GPIO_INTSTAT_PIN7_Pos) -#define GPIO_INTSTAT_PIN8_Pos 8 -#define GPIO_INTSTAT_PIN8_Msk (0x01 << GPIO_INTSTAT_PIN8_Pos) -#define GPIO_INTSTAT_PIN9_Pos 9 -#define GPIO_INTSTAT_PIN9_Msk (0x01 << GPIO_INTSTAT_PIN9_Pos) -#define GPIO_INTSTAT_PIN10_Pos 10 -#define GPIO_INTSTAT_PIN10_Msk (0x01 << GPIO_INTSTAT_PIN10_Pos) -#define GPIO_INTSTAT_PIN11_Pos 11 -#define GPIO_INTSTAT_PIN11_Msk (0x01 << GPIO_INTSTAT_PIN11_Pos) -#define GPIO_INTSTAT_PIN12_Pos 12 -#define GPIO_INTSTAT_PIN12_Msk (0x01 << GPIO_INTSTAT_PIN12_Pos) -#define GPIO_INTSTAT_PIN13_Pos 13 -#define GPIO_INTSTAT_PIN13_Msk (0x01 << GPIO_INTSTAT_PIN13_Pos) -#define GPIO_INTSTAT_PIN14_Pos 14 -#define GPIO_INTSTAT_PIN14_Msk (0x01 << GPIO_INTSTAT_PIN14_Pos) -#define GPIO_INTSTAT_PIN15_Pos 15 -#define GPIO_INTSTAT_PIN15_Msk (0x01 << GPIO_INTSTAT_PIN15_Pos) -#define GPIO_INTSTAT_PIN16_Pos 16 -#define GPIO_INTSTAT_PIN16_Msk (0x01 << GPIO_INTSTAT_PIN16_Pos) -#define GPIO_INTSTAT_PIN17_Pos 17 -#define GPIO_INTSTAT_PIN17_Msk (0x01 << GPIO_INTSTAT_PIN17_Pos) -#define GPIO_INTSTAT_PIN18_Pos 18 -#define GPIO_INTSTAT_PIN18_Msk (0x01 << GPIO_INTSTAT_PIN18_Pos) -#define GPIO_INTSTAT_PIN19_Pos 19 -#define GPIO_INTSTAT_PIN19_Msk (0x01 << GPIO_INTSTAT_PIN19_Pos) -#define GPIO_INTSTAT_PIN20_Pos 20 -#define GPIO_INTSTAT_PIN20_Msk (0x01 << GPIO_INTSTAT_PIN20_Pos) -#define GPIO_INTSTAT_PIN21_Pos 21 -#define GPIO_INTSTAT_PIN21_Msk (0x01 << GPIO_INTSTAT_PIN21_Pos) -#define GPIO_INTSTAT_PIN22_Pos 22 -#define GPIO_INTSTAT_PIN22_Msk (0x01 << GPIO_INTSTAT_PIN22_Pos) -#define GPIO_INTSTAT_PIN23_Pos 23 -#define GPIO_INTSTAT_PIN23_Msk (0x01 << GPIO_INTSTAT_PIN23_Pos) - -#define GPIO_INTCLR_PIN0_Pos 0 -#define GPIO_INTCLR_PIN0_Msk (0x01 << GPIO_INTCLR_PIN0_Pos) -#define GPIO_INTCLR_PIN1_Pos 1 -#define GPIO_INTCLR_PIN1_Msk (0x01 << GPIO_INTCLR_PIN1_Pos) -#define GPIO_INTCLR_PIN2_Pos 2 -#define GPIO_INTCLR_PIN2_Msk (0x01 << GPIO_INTCLR_PIN2_Pos) -#define GPIO_INTCLR_PIN3_Pos 3 -#define GPIO_INTCLR_PIN3_Msk (0x01 << GPIO_INTCLR_PIN3_Pos) -#define GPIO_INTCLR_PIN4_Pos 4 -#define GPIO_INTCLR_PIN4_Msk (0x01 << GPIO_INTCLR_PIN4_Pos) -#define GPIO_INTCLR_PIN5_Pos 5 -#define GPIO_INTCLR_PIN5_Msk (0x01 << GPIO_INTCLR_PIN5_Pos) -#define GPIO_INTCLR_PIN6_Pos 6 -#define GPIO_INTCLR_PIN6_Msk (0x01 << GPIO_INTCLR_PIN6_Pos) -#define GPIO_INTCLR_PIN7_Pos 7 -#define GPIO_INTCLR_PIN7_Msk (0x01 << GPIO_INTCLR_PIN7_Pos) -#define GPIO_INTCLR_PIN8_Pos 8 -#define GPIO_INTCLR_PIN8_Msk (0x01 << GPIO_INTCLR_PIN8_Pos) -#define GPIO_INTCLR_PIN9_Pos 9 -#define GPIO_INTCLR_PIN9_Msk (0x01 << GPIO_INTCLR_PIN9_Pos) -#define GPIO_INTCLR_PIN10_Pos 10 -#define GPIO_INTCLR_PIN10_Msk (0x01 << GPIO_INTCLR_PIN10_Pos) -#define GPIO_INTCLR_PIN11_Pos 11 -#define GPIO_INTCLR_PIN11_Msk (0x01 << GPIO_INTCLR_PIN11_Pos) -#define GPIO_INTCLR_PIN12_Pos 12 -#define GPIO_INTCLR_PIN12_Msk (0x01 << GPIO_INTCLR_PIN12_Pos) -#define GPIO_INTCLR_PIN13_Pos 13 -#define GPIO_INTCLR_PIN13_Msk (0x01 << GPIO_INTCLR_PIN13_Pos) -#define GPIO_INTCLR_PIN14_Pos 14 -#define GPIO_INTCLR_PIN14_Msk (0x01 << GPIO_INTCLR_PIN14_Pos) -#define GPIO_INTCLR_PIN15_Pos 15 -#define GPIO_INTCLR_PIN15_Msk (0x01 << GPIO_INTCLR_PIN15_Pos) -#define GPIO_INTCLR_PIN16_Pos 16 -#define GPIO_INTCLR_PIN16_Msk (0x01 << GPIO_INTCLR_PIN16_Pos) -#define GPIO_INTCLR_PIN17_Pos 17 -#define GPIO_INTCLR_PIN17_Msk (0x01 << GPIO_INTCLR_PIN17_Pos) -#define GPIO_INTCLR_PIN18_Pos 18 -#define GPIO_INTCLR_PIN18_Msk (0x01 << GPIO_INTCLR_PIN18_Pos) -#define GPIO_INTCLR_PIN19_Pos 19 -#define GPIO_INTCLR_PIN19_Msk (0x01 << GPIO_INTCLR_PIN19_Pos) -#define GPIO_INTCLR_PIN20_Pos 20 -#define GPIO_INTCLR_PIN20_Msk (0x01 << GPIO_INTCLR_PIN20_Pos) -#define GPIO_INTCLR_PIN21_Pos 21 -#define GPIO_INTCLR_PIN21_Msk (0x01 << GPIO_INTCLR_PIN21_Pos) -#define GPIO_INTCLR_PIN22_Pos 22 -#define GPIO_INTCLR_PIN22_Msk (0x01 << GPIO_INTCLR_PIN22_Pos) -#define GPIO_INTCLR_PIN23_Pos 23 -#define GPIO_INTCLR_PIN23_Msk (0x01 << GPIO_INTCLR_PIN23_Pos) - -typedef struct -{ - __IO uint32_t LDVAL; //定时器加载值,使能å�Žå®šæ—¶å™¨ä»Žæ­¤æ•°å€¼å¼€å§‹å�‘下递å‡�计数 +#define PORT_PORTA_PULLU_PIN0_Pos 0 +#define PORT_PORTA_PULLU_PIN0_Msk (0x01 << PORT_PORTA_PULLU_PIN0_Pos) +#define PORT_PORTA_PULLU_PIN1_Pos 1 +#define PORT_PORTA_PULLU_PIN1_Msk (0x01 << PORT_PORTA_PULLU_PIN1_Pos) +#define PORT_PORTA_PULLU_PIN2_Pos 2 +#define PORT_PORTA_PULLU_PIN2_Msk (0x01 << PORT_PORTA_PULLU_PIN2_Pos) +#define PORT_PORTA_PULLU_PIN3_Pos 3 +#define PORT_PORTA_PULLU_PIN3_Msk (0x01 << PORT_PORTA_PULLU_PIN3_Pos) +#define PORT_PORTA_PULLU_PIN4_Pos 4 +#define PORT_PORTA_PULLU_PIN4_Msk (0x01 << PORT_PORTA_PULLU_PIN4_Pos) +#define PORT_PORTA_PULLU_PIN5_Pos 5 +#define PORT_PORTA_PULLU_PIN5_Msk (0x01 << PORT_PORTA_PULLU_PIN5_Pos) +#define PORT_PORTA_PULLU_PIN6_Pos 6 +#define PORT_PORTA_PULLU_PIN6_Msk (0x01 << PORT_PORTA_PULLU_PIN6_Pos) +#define PORT_PORTA_PULLU_PIN7_Pos 7 +#define PORT_PORTA_PULLU_PIN7_Msk (0x01 << PORT_PORTA_PULLU_PIN7_Pos) +#define PORT_PORTA_PULLU_PIN8_Pos 8 +#define PORT_PORTA_PULLU_PIN8_Msk (0x01 << PORT_PORTA_PULLU_PIN8_Pos) +#define PORT_PORTA_PULLU_PIN9_Pos 9 +#define PORT_PORTA_PULLU_PIN9_Msk (0x01 << PORT_PORTA_PULLU_PIN9_Pos) +#define PORT_PORTA_PULLU_PIN10_Pos 10 +#define PORT_PORTA_PULLU_PIN10_Msk (0x01 << PORT_PORTA_PULLU_PIN10_Pos) +#define PORT_PORTA_PULLU_PIN11_Pos 11 +#define PORT_PORTA_PULLU_PIN11_Msk (0x01 << PORT_PORTA_PULLU_PIN11_Pos) +#define PORT_PORTA_PULLU_PIN12_Pos 12 +#define PORT_PORTA_PULLU_PIN12_Msk (0x01 << PORT_PORTA_PULLU_PIN12_Pos) +#define PORT_PORTA_PULLU_PIN13_Pos 13 +#define PORT_PORTA_PULLU_PIN13_Msk (0x01 << PORT_PORTA_PULLU_PIN13_Pos) +#define PORT_PORTA_PULLU_PIN14_Pos 14 +#define PORT_PORTA_PULLU_PIN14_Msk (0x01 << PORT_PORTA_PULLU_PIN14_Pos) +#define PORT_PORTA_PULLU_PIN15_Pos 15 +#define PORT_PORTA_PULLU_PIN15_Msk (0x01 << PORT_PORTA_PULLU_PIN15_Pos) + +#define PORT_PORTC_PULLU_PIN0_Pos 0 +#define PORT_PORTC_PULLU_PIN0_Msk (0x01 << PORT_PORTC_PULLU_PIN0_Pos) +#define PORT_PORTC_PULLU_PIN1_Pos 1 +#define PORT_PORTC_PULLU_PIN1_Msk (0x01 << PORT_PORTC_PULLU_PIN1_Pos) +#define PORT_PORTC_PULLU_PIN2_Pos 2 +#define PORT_PORTC_PULLU_PIN2_Msk (0x01 << PORT_PORTC_PULLU_PIN2_Pos) +#define PORT_PORTC_PULLU_PIN3_Pos 3 +#define PORT_PORTC_PULLU_PIN3_Msk (0x01 << PORT_PORTC_PULLU_PIN3_Pos) +#define PORT_PORTC_PULLU_PIN4_Pos 4 +#define PORT_PORTC_PULLU_PIN4_Msk (0x01 << PORT_PORTC_PULLU_PIN4_Pos) +#define PORT_PORTC_PULLU_PIN5_Pos 5 +#define PORT_PORTC_PULLU_PIN5_Msk (0x01 << PORT_PORTC_PULLU_PIN5_Pos) +#define PORT_PORTC_PULLU_PIN6_Pos 6 +#define PORT_PORTC_PULLU_PIN6_Msk (0x01 << PORT_PORTC_PULLU_PIN6_Pos) +#define PORT_PORTC_PULLU_PIN7_Pos 7 +#define PORT_PORTC_PULLU_PIN7_Msk (0x01 << PORT_PORTC_PULLU_PIN7_Pos) +#define PORT_PORTC_PULLU_PIN8_Pos 8 +#define PORT_PORTC_PULLU_PIN8_Msk (0x01 << PORT_PORTC_PULLU_PIN8_Pos) +#define PORT_PORTC_PULLU_PIN9_Pos 9 +#define PORT_PORTC_PULLU_PIN9_Msk (0x01 << PORT_PORTC_PULLU_PIN9_Pos) +#define PORT_PORTC_PULLU_PIN10_Pos 10 +#define PORT_PORTC_PULLU_PIN10_Msk (0x01 << PORT_PORTC_PULLU_PIN10_Pos) +#define PORT_PORTC_PULLU_PIN11_Pos 11 +#define PORT_PORTC_PULLU_PIN11_Msk (0x01 << PORT_PORTC_PULLU_PIN11_Pos) +#define PORT_PORTC_PULLU_PIN12_Pos 12 +#define PORT_PORTC_PULLU_PIN12_Msk (0x01 << PORT_PORTC_PULLU_PIN12_Pos) +#define PORT_PORTC_PULLU_PIN13_Pos 13 +#define PORT_PORTC_PULLU_PIN13_Msk (0x01 << PORT_PORTC_PULLU_PIN13_Pos) +#define PORT_PORTC_PULLU_PIN14_Pos 14 +#define PORT_PORTC_PULLU_PIN14_Msk (0x01 << PORT_PORTC_PULLU_PIN14_Pos) +#define PORT_PORTC_PULLU_PIN15_Pos 15 +#define PORT_PORTC_PULLU_PIN15_Msk (0x01 << PORT_PORTC_PULLU_PIN15_Pos) + +#define PORT_PORTM_PULLU_PIN0_Pos 0 +#define PORT_PORTM_PULLU_PIN0_Msk (0x01 << PORT_PORTM_PULLU_PIN0_Pos) +#define PORT_PORTM_PULLU_PIN1_Pos 1 +#define PORT_PORTM_PULLU_PIN1_Msk (0x01 << PORT_PORTM_PULLU_PIN1_Pos) +#define PORT_PORTM_PULLU_PIN2_Pos 2 +#define PORT_PORTM_PULLU_PIN2_Msk (0x01 << PORT_PORTM_PULLU_PIN2_Pos) +#define PORT_PORTM_PULLU_PIN3_Pos 3 +#define PORT_PORTM_PULLU_PIN3_Msk (0x01 << PORT_PORTM_PULLU_PIN3_Pos) +#define PORT_PORTM_PULLU_PIN4_Pos 4 +#define PORT_PORTM_PULLU_PIN4_Msk (0x01 << PORT_PORTM_PULLU_PIN4_Pos) +#define PORT_PORTM_PULLU_PIN5_Pos 5 +#define PORT_PORTM_PULLU_PIN5_Msk (0x01 << PORT_PORTM_PULLU_PIN5_Pos) +#define PORT_PORTM_PULLU_PIN6_Pos 6 +#define PORT_PORTM_PULLU_PIN6_Msk (0x01 << PORT_PORTM_PULLU_PIN6_Pos) +#define PORT_PORTM_PULLU_PIN7_Pos 7 +#define PORT_PORTM_PULLU_PIN7_Msk (0x01 << PORT_PORTM_PULLU_PIN7_Pos) +#define PORT_PORTM_PULLU_PIN8_Pos 8 +#define PORT_PORTM_PULLU_PIN8_Msk (0x01 << PORT_PORTM_PULLU_PIN8_Pos) +#define PORT_PORTM_PULLU_PIN9_Pos 9 +#define PORT_PORTM_PULLU_PIN9_Msk (0x01 << PORT_PORTM_PULLU_PIN9_Pos) +#define PORT_PORTM_PULLU_PIN10_Pos 10 +#define PORT_PORTM_PULLU_PIN10_Msk (0x01 << PORT_PORTM_PULLU_PIN10_Pos) +#define PORT_PORTM_PULLU_PIN11_Pos 11 +#define PORT_PORTM_PULLU_PIN11_Msk (0x01 << PORT_PORTM_PULLU_PIN11_Pos) +#define PORT_PORTM_PULLU_PIN12_Pos 12 +#define PORT_PORTM_PULLU_PIN12_Msk (0x01 << PORT_PORTM_PULLU_PIN12_Pos) +#define PORT_PORTM_PULLU_PIN13_Pos 13 +#define PORT_PORTM_PULLU_PIN13_Msk (0x01 << PORT_PORTM_PULLU_PIN13_Pos) +#define PORT_PORTM_PULLU_PIN14_Pos 14 +#define PORT_PORTM_PULLU_PIN14_Msk (0x01 << PORT_PORTM_PULLU_PIN14_Pos) +#define PORT_PORTM_PULLU_PIN15_Pos 15 +#define PORT_PORTM_PULLU_PIN15_Msk (0x01 << PORT_PORTM_PULLU_PIN15_Pos) +#define PORT_PORTM_PULLU_PIN16_Pos 16 +#define PORT_PORTM_PULLU_PIN16_Msk (0x01 << PORT_PORTM_PULLU_PIN16_Pos) +#define PORT_PORTM_PULLU_PIN17_Pos 17 +#define PORT_PORTM_PULLU_PIN17_Msk (0x01 << PORT_PORTM_PULLU_PIN17_Pos) +#define PORT_PORTM_PULLU_PIN18_Pos 18 +#define PORT_PORTM_PULLU_PIN18_Msk (0x01 << PORT_PORTM_PULLU_PIN18_Pos) +#define PORT_PORTM_PULLU_PIN19_Pos 19 +#define PORT_PORTM_PULLU_PIN19_Msk (0x01 << PORT_PORTM_PULLU_PIN19_Pos) +#define PORT_PORTM_PULLU_PIN20_Pos 20 +#define PORT_PORTM_PULLU_PIN20_Msk (0x01 << PORT_PORTM_PULLU_PIN20_Pos) +#define PORT_PORTM_PULLU_PIN21_Pos 21 +#define PORT_PORTM_PULLU_PIN21_Msk (0x01 << PORT_PORTM_PULLU_PIN21_Pos) +#define PORT_PORTM_PULLU_PIN22_Pos 22 +#define PORT_PORTM_PULLU_PIN22_Msk (0x01 << PORT_PORTM_PULLU_PIN22_Pos) +#define PORT_PORTM_PULLU_PIN23_Pos 23 +#define PORT_PORTM_PULLU_PIN23_Msk (0x01 << PORT_PORTM_PULLU_PIN23_Pos) + +#define PORT_PORTP_PULLU_PIN0_Pos 0 +#define PORT_PORTP_PULLU_PIN0_Msk (0x01 << PORT_PORTP_PULLU_PIN0_Pos) +#define PORT_PORTP_PULLU_PIN1_Pos 1 +#define PORT_PORTP_PULLU_PIN1_Msk (0x01 << PORT_PORTP_PULLU_PIN1_Pos) +#define PORT_PORTP_PULLU_PIN2_Pos 2 +#define PORT_PORTP_PULLU_PIN2_Msk (0x01 << PORT_PORTP_PULLU_PIN2_Pos) +#define PORT_PORTP_PULLU_PIN3_Pos 3 +#define PORT_PORTP_PULLU_PIN3_Msk (0x01 << PORT_PORTP_PULLU_PIN3_Pos) +#define PORT_PORTP_PULLU_PIN4_Pos 4 +#define PORT_PORTP_PULLU_PIN4_Msk (0x01 << PORT_PORTP_PULLU_PIN4_Pos) +#define PORT_PORTP_PULLU_PIN5_Pos 5 +#define PORT_PORTP_PULLU_PIN5_Msk (0x01 << PORT_PORTP_PULLU_PIN5_Pos) +#define PORT_PORTP_PULLU_PIN6_Pos 6 +#define PORT_PORTP_PULLU_PIN6_Msk (0x01 << PORT_PORTP_PULLU_PIN6_Pos) +#define PORT_PORTP_PULLU_PIN7_Pos 7 +#define PORT_PORTP_PULLU_PIN7_Msk (0x01 << PORT_PORTP_PULLU_PIN7_Pos) +#define PORT_PORTP_PULLU_PIN8_Pos 8 +#define PORT_PORTP_PULLU_PIN8_Msk (0x01 << PORT_PORTP_PULLU_PIN8_Pos) +#define PORT_PORTP_PULLU_PIN9_Pos 9 +#define PORT_PORTP_PULLU_PIN9_Msk (0x01 << PORT_PORTP_PULLU_PIN9_Pos) +#define PORT_PORTP_PULLU_PIN10_Pos 10 +#define PORT_PORTP_PULLU_PIN10_Msk (0x01 << PORT_PORTP_PULLU_PIN10_Pos) +#define PORT_PORTP_PULLU_PIN11_Pos 11 +#define PORT_PORTP_PULLU_PIN11_Msk (0x01 << PORT_PORTP_PULLU_PIN11_Pos) +#define PORT_PORTP_PULLU_PIN12_Pos 12 +#define PORT_PORTP_PULLU_PIN12_Msk (0x01 << PORT_PORTP_PULLU_PIN12_Pos) +#define PORT_PORTP_PULLU_PIN13_Pos 13 +#define PORT_PORTP_PULLU_PIN13_Msk (0x01 << PORT_PORTP_PULLU_PIN13_Pos) +#define PORT_PORTP_PULLU_PIN14_Pos 14 +#define PORT_PORTP_PULLU_PIN14_Msk (0x01 << PORT_PORTP_PULLU_PIN14_Pos) +#define PORT_PORTP_PULLU_PIN15_Pos 15 +#define PORT_PORTP_PULLU_PIN15_Msk (0x01 << PORT_PORTP_PULLU_PIN15_Pos) +#define PORT_PORTP_PULLU_PIN16_Pos 16 +#define PORT_PORTP_PULLU_PIN16_Msk (0x01 << PORT_PORTP_PULLU_PIN16_Pos) +#define PORT_PORTP_PULLU_PIN17_Pos 17 +#define PORT_PORTP_PULLU_PIN17_Msk (0x01 << PORT_PORTP_PULLU_PIN17_Pos) +#define PORT_PORTP_PULLU_PIN18_Pos 18 +#define PORT_PORTP_PULLU_PIN18_Msk (0x01 << PORT_PORTP_PULLU_PIN18_Pos) +#define PORT_PORTP_PULLU_PIN19_Pos 19 +#define PORT_PORTP_PULLU_PIN19_Msk (0x01 << PORT_PORTP_PULLU_PIN19_Pos) +#define PORT_PORTP_PULLU_PIN20_Pos 20 +#define PORT_PORTP_PULLU_PIN20_Msk (0x01 << PORT_PORTP_PULLU_PIN20_Pos) +#define PORT_PORTP_PULLU_PIN21_Pos 21 +#define PORT_PORTP_PULLU_PIN21_Msk (0x01 << PORT_PORTP_PULLU_PIN21_Pos) +#define PORT_PORTP_PULLU_PIN22_Pos 22 +#define PORT_PORTP_PULLU_PIN22_Msk (0x01 << PORT_PORTP_PULLU_PIN22_Pos) +#define PORT_PORTP_PULLU_PIN23_Pos 23 +#define PORT_PORTP_PULLU_PIN23_Msk (0x01 << PORT_PORTP_PULLU_PIN23_Pos) + +#define PORT_PORTB_PULLD_PIN0_Pos 0 +#define PORT_PORTB_PULLD_PIN0_Msk (0x01 << PORT_PORTB_PULLD_PIN0_Pos) +#define PORT_PORTB_PULLD_PIN1_Pos 1 +#define PORT_PORTB_PULLD_PIN1_Msk (0x01 << PORT_PORTB_PULLD_PIN1_Pos) +#define PORT_PORTB_PULLD_PIN2_Pos 2 +#define PORT_PORTB_PULLD_PIN2_Msk (0x01 << PORT_PORTB_PULLD_PIN2_Pos) +#define PORT_PORTB_PULLD_PIN3_Pos 3 +#define PORT_PORTB_PULLD_PIN3_Msk (0x01 << PORT_PORTB_PULLD_PIN3_Pos) +#define PORT_PORTB_PULLD_PIN4_Pos 4 +#define PORT_PORTB_PULLD_PIN4_Msk (0x01 << PORT_PORTB_PULLD_PIN4_Pos) +#define PORT_PORTB_PULLD_PIN5_Pos 5 +#define PORT_PORTB_PULLD_PIN5_Msk (0x01 << PORT_PORTB_PULLD_PIN5_Pos) +#define PORT_PORTB_PULLD_PIN6_Pos 6 +#define PORT_PORTB_PULLD_PIN6_Msk (0x01 << PORT_PORTB_PULLD_PIN6_Pos) +#define PORT_PORTB_PULLD_PIN7_Pos 7 +#define PORT_PORTB_PULLD_PIN7_Msk (0x01 << PORT_PORTB_PULLD_PIN7_Pos) +#define PORT_PORTB_PULLD_PIN8_Pos 8 +#define PORT_PORTB_PULLD_PIN8_Msk (0x01 << PORT_PORTB_PULLD_PIN8_Pos) +#define PORT_PORTB_PULLD_PIN9_Pos 9 +#define PORT_PORTB_PULLD_PIN9_Msk (0x01 << PORT_PORTB_PULLD_PIN9_Pos) +#define PORT_PORTB_PULLD_PIN10_Pos 10 +#define PORT_PORTB_PULLD_PIN10_Msk (0x01 << PORT_PORTB_PULLD_PIN10_Pos) +#define PORT_PORTB_PULLD_PIN11_Pos 11 +#define PORT_PORTB_PULLD_PIN11_Msk (0x01 << PORT_PORTB_PULLD_PIN11_Pos) +#define PORT_PORTB_PULLD_PIN12_Pos 12 +#define PORT_PORTB_PULLD_PIN12_Msk (0x01 << PORT_PORTB_PULLD_PIN12_Pos) +#define PORT_PORTB_PULLD_PIN13_Pos 13 +#define PORT_PORTB_PULLD_PIN13_Msk (0x01 << PORT_PORTB_PULLD_PIN13_Pos) +#define PORT_PORTB_PULLD_PIN14_Pos 14 +#define PORT_PORTB_PULLD_PIN14_Msk (0x01 << PORT_PORTB_PULLD_PIN14_Pos) +#define PORT_PORTB_PULLD_PIN15_Pos 15 +#define PORT_PORTB_PULLD_PIN15_Msk (0x01 << PORT_PORTB_PULLD_PIN15_Pos) + +#define PORT_PORTN_PULLD_PIN0_Pos 0 +#define PORT_PORTN_PULLD_PIN0_Msk (0x01 << PORT_PORTN_PULLD_PIN0_Pos) +#define PORT_PORTN_PULLD_PIN1_Pos 1 +#define PORT_PORTN_PULLD_PIN1_Msk (0x01 << PORT_PORTN_PULLD_PIN1_Pos) +#define PORT_PORTN_PULLD_PIN2_Pos 2 +#define PORT_PORTN_PULLD_PIN2_Msk (0x01 << PORT_PORTN_PULLD_PIN2_Pos) +#define PORT_PORTN_PULLD_PIN3_Pos 3 +#define PORT_PORTN_PULLD_PIN3_Msk (0x01 << PORT_PORTN_PULLD_PIN3_Pos) +#define PORT_PORTN_PULLD_PIN4_Pos 4 +#define PORT_PORTN_PULLD_PIN4_Msk (0x01 << PORT_PORTN_PULLD_PIN4_Pos) +#define PORT_PORTN_PULLD_PIN5_Pos 5 +#define PORT_PORTN_PULLD_PIN5_Msk (0x01 << PORT_PORTN_PULLD_PIN5_Pos) +#define PORT_PORTN_PULLD_PIN6_Pos 6 +#define PORT_PORTN_PULLD_PIN6_Msk (0x01 << PORT_PORTN_PULLD_PIN6_Pos) +#define PORT_PORTN_PULLD_PIN7_Pos 7 +#define PORT_PORTN_PULLD_PIN7_Msk (0x01 << PORT_PORTN_PULLD_PIN7_Pos) +#define PORT_PORTN_PULLD_PIN8_Pos 8 +#define PORT_PORTN_PULLD_PIN8_Msk (0x01 << PORT_PORTN_PULLD_PIN8_Pos) +#define PORT_PORTN_PULLD_PIN9_Pos 9 +#define PORT_PORTN_PULLD_PIN9_Msk (0x01 << PORT_PORTN_PULLD_PIN9_Pos) +#define PORT_PORTN_PULLD_PIN10_Pos 10 +#define PORT_PORTN_PULLD_PIN10_Msk (0x01 << PORT_PORTN_PULLD_PIN10_Pos) +#define PORT_PORTN_PULLD_PIN11_Pos 11 +#define PORT_PORTN_PULLD_PIN11_Msk (0x01 << PORT_PORTN_PULLD_PIN11_Pos) +#define PORT_PORTN_PULLD_PIN12_Pos 12 +#define PORT_PORTN_PULLD_PIN12_Msk (0x01 << PORT_PORTN_PULLD_PIN12_Pos) +#define PORT_PORTN_PULLD_PIN13_Pos 13 +#define PORT_PORTN_PULLD_PIN13_Msk (0x01 << PORT_PORTN_PULLD_PIN13_Pos) +#define PORT_PORTN_PULLD_PIN14_Pos 14 +#define PORT_PORTN_PULLD_PIN14_Msk (0x01 << PORT_PORTN_PULLD_PIN14_Pos) +#define PORT_PORTN_PULLD_PIN15_Pos 15 +#define PORT_PORTN_PULLD_PIN15_Msk (0x01 << PORT_PORTN_PULLD_PIN15_Pos) +#define PORT_PORTN_PULLD_PIN16_Pos 16 +#define PORT_PORTN_PULLD_PIN16_Msk (0x01 << PORT_PORTN_PULLD_PIN16_Pos) +#define PORT_PORTN_PULLD_PIN17_Pos 17 +#define PORT_PORTN_PULLD_PIN17_Msk (0x01 << PORT_PORTN_PULLD_PIN17_Pos) +#define PORT_PORTN_PULLD_PIN18_Pos 18 +#define PORT_PORTN_PULLD_PIN18_Msk (0x01 << PORT_PORTN_PULLD_PIN18_Pos) +#define PORT_PORTN_PULLD_PIN19_Pos 19 +#define PORT_PORTN_PULLD_PIN19_Msk (0x01 << PORT_PORTN_PULLD_PIN19_Pos) +#define PORT_PORTN_PULLD_PIN20_Pos 20 +#define PORT_PORTN_PULLD_PIN20_Msk (0x01 << PORT_PORTN_PULLD_PIN20_Pos) +#define PORT_PORTN_PULLD_PIN21_Pos 21 +#define PORT_PORTN_PULLD_PIN21_Msk (0x01 << PORT_PORTN_PULLD_PIN21_Pos) +#define PORT_PORTN_PULLD_PIN22_Pos 22 +#define PORT_PORTN_PULLD_PIN22_Msk (0x01 << PORT_PORTN_PULLD_PIN22_Pos) +#define PORT_PORTN_PULLD_PIN23_Pos 23 +#define PORT_PORTN_PULLD_PIN23_Msk (0x01 << PORT_PORTN_PULLD_PIN23_Pos) + +#define PORT_PORTM_DRIVS_PIN0_Pos 0 +#define PORT_PORTM_DRIVS_PIN0_Msk (0x01 << PORT_PORTM_DRIVS_PIN0_Pos) +#define PORT_PORTM_DRIVS_PIN1_Pos 1 +#define PORT_PORTM_DRIVS_PIN1_Msk (0x01 << PORT_PORTM_DRIVS_PIN1_Pos) +#define PORT_PORTM_DRIVS_PIN2_Pos 2 +#define PORT_PORTM_DRIVS_PIN2_Msk (0x01 << PORT_PORTM_DRIVS_PIN2_Pos) +#define PORT_PORTM_DRIVS_PIN3_Pos 3 +#define PORT_PORTM_DRIVS_PIN3_Msk (0x01 << PORT_PORTM_DRIVS_PIN3_Pos) +#define PORT_PORTM_DRIVS_PIN4_Pos 4 +#define PORT_PORTM_DRIVS_PIN4_Msk (0x01 << PORT_PORTM_DRIVS_PIN4_Pos) +#define PORT_PORTM_DRIVS_PIN5_Pos 5 +#define PORT_PORTM_DRIVS_PIN5_Msk (0x01 << PORT_PORTM_DRIVS_PIN5_Pos) +#define PORT_PORTM_DRIVS_PIN6_Pos 6 +#define PORT_PORTM_DRIVS_PIN6_Msk (0x01 << PORT_PORTM_DRIVS_PIN6_Pos) +#define PORT_PORTM_DRIVS_PIN7_Pos 7 +#define PORT_PORTM_DRIVS_PIN7_Msk (0x01 << PORT_PORTM_DRIVS_PIN7_Pos) +#define PORT_PORTM_DRIVS_PIN8_Pos 8 +#define PORT_PORTM_DRIVS_PIN8_Msk (0x01 << PORT_PORTM_DRIVS_PIN8_Pos) +#define PORT_PORTM_DRIVS_PIN9_Pos 9 +#define PORT_PORTM_DRIVS_PIN9_Msk (0x01 << PORT_PORTM_DRIVS_PIN9_Pos) +#define PORT_PORTM_DRIVS_PIN10_Pos 10 +#define PORT_PORTM_DRIVS_PIN10_Msk (0x01 << PORT_PORTM_DRIVS_PIN10_Pos) +#define PORT_PORTM_DRIVS_PIN11_Pos 11 +#define PORT_PORTM_DRIVS_PIN11_Msk (0x01 << PORT_PORTM_DRIVS_PIN11_Pos) +#define PORT_PORTM_DRIVS_PIN12_Pos 12 +#define PORT_PORTM_DRIVS_PIN12_Msk (0x01 << PORT_PORTM_DRIVS_PIN12_Pos) +#define PORT_PORTM_DRIVS_PIN13_Pos 13 +#define PORT_PORTM_DRIVS_PIN13_Msk (0x01 << PORT_PORTM_DRIVS_PIN13_Pos) +#define PORT_PORTM_DRIVS_PIN14_Pos 14 +#define PORT_PORTM_DRIVS_PIN14_Msk (0x01 << PORT_PORTM_DRIVS_PIN14_Pos) +#define PORT_PORTM_DRIVS_PIN15_Pos 15 +#define PORT_PORTM_DRIVS_PIN15_Msk (0x01 << PORT_PORTM_DRIVS_PIN15_Pos) +#define PORT_PORTM_DRIVS_PIN16_Pos 16 +#define PORT_PORTM_DRIVS_PIN16_Msk (0x01 << PORT_PORTM_DRIVS_PIN16_Pos) +#define PORT_PORTM_DRIVS_PIN17_Pos 17 +#define PORT_PORTM_DRIVS_PIN17_Msk (0x01 << PORT_PORTM_DRIVS_PIN17_Pos) +#define PORT_PORTM_DRIVS_PIN18_Pos 18 +#define PORT_PORTM_DRIVS_PIN18_Msk (0x01 << PORT_PORTM_DRIVS_PIN18_Pos) +#define PORT_PORTM_DRIVS_PIN19_Pos 19 +#define PORT_PORTM_DRIVS_PIN19_Msk (0x01 << PORT_PORTM_DRIVS_PIN19_Pos) +#define PORT_PORTM_DRIVS_PIN20_Pos 20 +#define PORT_PORTM_DRIVS_PIN20_Msk (0x01 << PORT_PORTM_DRIVS_PIN20_Pos) +#define PORT_PORTM_DRIVS_PIN21_Pos 21 +#define PORT_PORTM_DRIVS_PIN21_Msk (0x01 << PORT_PORTM_DRIVS_PIN21_Pos) +#define PORT_PORTM_DRIVS_PIN22_Pos 22 +#define PORT_PORTM_DRIVS_PIN22_Msk (0x01 << PORT_PORTM_DRIVS_PIN22_Pos) +#define PORT_PORTM_DRIVS_PIN23_Pos 23 +#define PORT_PORTM_DRIVS_PIN23_Msk (0x01 << PORT_PORTM_DRIVS_PIN23_Pos) + +#define PORT_PORTN_DRIVS_PIN0_Pos 0 +#define PORT_PORTN_DRIVS_PIN0_Msk (0x01 << PORT_PORTN_DRIVS_PIN0_Pos) +#define PORT_PORTN_DRIVS_PIN1_Pos 1 +#define PORT_PORTN_DRIVS_PIN1_Msk (0x01 << PORT_PORTN_DRIVS_PIN1_Pos) +#define PORT_PORTN_DRIVS_PIN2_Pos 2 +#define PORT_PORTN_DRIVS_PIN2_Msk (0x01 << PORT_PORTN_DRIVS_PIN2_Pos) +#define PORT_PORTN_DRIVS_PIN3_Pos 3 +#define PORT_PORTN_DRIVS_PIN3_Msk (0x01 << PORT_PORTN_DRIVS_PIN3_Pos) +#define PORT_PORTN_DRIVS_PIN4_Pos 4 +#define PORT_PORTN_DRIVS_PIN4_Msk (0x01 << PORT_PORTN_DRIVS_PIN4_Pos) +#define PORT_PORTN_DRIVS_PIN5_Pos 5 +#define PORT_PORTN_DRIVS_PIN5_Msk (0x01 << PORT_PORTN_DRIVS_PIN5_Pos) +#define PORT_PORTN_DRIVS_PIN6_Pos 6 +#define PORT_PORTN_DRIVS_PIN6_Msk (0x01 << PORT_PORTN_DRIVS_PIN6_Pos) +#define PORT_PORTN_DRIVS_PIN7_Pos 7 +#define PORT_PORTN_DRIVS_PIN7_Msk (0x01 << PORT_PORTN_DRIVS_PIN7_Pos) +#define PORT_PORTN_DRIVS_PIN8_Pos 8 +#define PORT_PORTN_DRIVS_PIN8_Msk (0x01 << PORT_PORTN_DRIVS_PIN8_Pos) +#define PORT_PORTN_DRIVS_PIN9_Pos 9 +#define PORT_PORTN_DRIVS_PIN9_Msk (0x01 << PORT_PORTN_DRIVS_PIN9_Pos) +#define PORT_PORTN_DRIVS_PIN10_Pos 10 +#define PORT_PORTN_DRIVS_PIN10_Msk (0x01 << PORT_PORTN_DRIVS_PIN10_Pos) +#define PORT_PORTN_DRIVS_PIN11_Pos 11 +#define PORT_PORTN_DRIVS_PIN11_Msk (0x01 << PORT_PORTN_DRIVS_PIN11_Pos) +#define PORT_PORTN_DRIVS_PIN12_Pos 12 +#define PORT_PORTN_DRIVS_PIN12_Msk (0x01 << PORT_PORTN_DRIVS_PIN12_Pos) +#define PORT_PORTN_DRIVS_PIN13_Pos 13 +#define PORT_PORTN_DRIVS_PIN13_Msk (0x01 << PORT_PORTN_DRIVS_PIN13_Pos) +#define PORT_PORTN_DRIVS_PIN14_Pos 14 +#define PORT_PORTN_DRIVS_PIN14_Msk (0x01 << PORT_PORTN_DRIVS_PIN14_Pos) +#define PORT_PORTN_DRIVS_PIN15_Pos 15 +#define PORT_PORTN_DRIVS_PIN15_Msk (0x01 << PORT_PORTN_DRIVS_PIN15_Pos) +#define PORT_PORTN_DRIVS_PIN16_Pos 16 +#define PORT_PORTN_DRIVS_PIN16_Msk (0x01 << PORT_PORTN_DRIVS_PIN16_Pos) +#define PORT_PORTN_DRIVS_PIN17_Pos 17 +#define PORT_PORTN_DRIVS_PIN17_Msk (0x01 << PORT_PORTN_DRIVS_PIN17_Pos) +#define PORT_PORTN_DRIVS_PIN18_Pos 18 +#define PORT_PORTN_DRIVS_PIN18_Msk (0x01 << PORT_PORTN_DRIVS_PIN18_Pos) +#define PORT_PORTN_DRIVS_PIN19_Pos 19 +#define PORT_PORTN_DRIVS_PIN19_Msk (0x01 << PORT_PORTN_DRIVS_PIN19_Pos) +#define PORT_PORTN_DRIVS_PIN20_Pos 20 +#define PORT_PORTN_DRIVS_PIN20_Msk (0x01 << PORT_PORTN_DRIVS_PIN20_Pos) +#define PORT_PORTN_DRIVS_PIN21_Pos 21 +#define PORT_PORTN_DRIVS_PIN21_Msk (0x01 << PORT_PORTN_DRIVS_PIN21_Pos) +#define PORT_PORTN_DRIVS_PIN22_Pos 22 +#define PORT_PORTN_DRIVS_PIN22_Msk (0x01 << PORT_PORTN_DRIVS_PIN22_Pos) +#define PORT_PORTN_DRIVS_PIN23_Pos 23 +#define PORT_PORTN_DRIVS_PIN23_Msk (0x01 << PORT_PORTN_DRIVS_PIN23_Pos) + +#define PORT_PORTP_DRIVS_PIN0_Pos 0 +#define PORT_PORTP_DRIVS_PIN0_Msk (0x01 << PORT_PORTP_DRIVS_PIN0_Pos) +#define PORT_PORTP_DRIVS_PIN1_Pos 1 +#define PORT_PORTP_DRIVS_PIN1_Msk (0x01 << PORT_PORTP_DRIVS_PIN1_Pos) +#define PORT_PORTP_DRIVS_PIN2_Pos 2 +#define PORT_PORTP_DRIVS_PIN2_Msk (0x01 << PORT_PORTP_DRIVS_PIN2_Pos) +#define PORT_PORTP_DRIVS_PIN3_Pos 3 +#define PORT_PORTP_DRIVS_PIN3_Msk (0x01 << PORT_PORTP_DRIVS_PIN3_Pos) +#define PORT_PORTP_DRIVS_PIN4_Pos 4 +#define PORT_PORTP_DRIVS_PIN4_Msk (0x01 << PORT_PORTP_DRIVS_PIN4_Pos) +#define PORT_PORTP_DRIVS_PIN5_Pos 5 +#define PORT_PORTP_DRIVS_PIN5_Msk (0x01 << PORT_PORTP_DRIVS_PIN5_Pos) +#define PORT_PORTP_DRIVS_PIN6_Pos 6 +#define PORT_PORTP_DRIVS_PIN6_Msk (0x01 << PORT_PORTP_DRIVS_PIN6_Pos) +#define PORT_PORTP_DRIVS_PIN7_Pos 7 +#define PORT_PORTP_DRIVS_PIN7_Msk (0x01 << PORT_PORTP_DRIVS_PIN7_Pos) +#define PORT_PORTP_DRIVS_PIN8_Pos 8 +#define PORT_PORTP_DRIVS_PIN8_Msk (0x01 << PORT_PORTP_DRIVS_PIN8_Pos) +#define PORT_PORTP_DRIVS_PIN9_Pos 9 +#define PORT_PORTP_DRIVS_PIN9_Msk (0x01 << PORT_PORTP_DRIVS_PIN9_Pos) +#define PORT_PORTP_DRIVS_PIN10_Pos 10 +#define PORT_PORTP_DRIVS_PIN10_Msk (0x01 << PORT_PORTP_DRIVS_PIN10_Pos) +#define PORT_PORTP_DRIVS_PIN11_Pos 11 +#define PORT_PORTP_DRIVS_PIN11_Msk (0x01 << PORT_PORTP_DRIVS_PIN11_Pos) +#define PORT_PORTP_DRIVS_PIN12_Pos 12 +#define PORT_PORTP_DRIVS_PIN12_Msk (0x01 << PORT_PORTP_DRIVS_PIN12_Pos) +#define PORT_PORTP_DRIVS_PIN13_Pos 13 +#define PORT_PORTP_DRIVS_PIN13_Msk (0x01 << PORT_PORTP_DRIVS_PIN13_Pos) +#define PORT_PORTP_DRIVS_PIN14_Pos 14 +#define PORT_PORTP_DRIVS_PIN14_Msk (0x01 << PORT_PORTP_DRIVS_PIN14_Pos) +#define PORT_PORTP_DRIVS_PIN15_Pos 15 +#define PORT_PORTP_DRIVS_PIN15_Msk (0x01 << PORT_PORTP_DRIVS_PIN15_Pos) +#define PORT_PORTP_DRIVS_PIN16_Pos 16 +#define PORT_PORTP_DRIVS_PIN16_Msk (0x01 << PORT_PORTP_DRIVS_PIN16_Pos) +#define PORT_PORTP_DRIVS_PIN17_Pos 17 +#define PORT_PORTP_DRIVS_PIN17_Msk (0x01 << PORT_PORTP_DRIVS_PIN17_Pos) +#define PORT_PORTP_DRIVS_PIN18_Pos 18 +#define PORT_PORTP_DRIVS_PIN18_Msk (0x01 << PORT_PORTP_DRIVS_PIN18_Pos) +#define PORT_PORTP_DRIVS_PIN19_Pos 19 +#define PORT_PORTP_DRIVS_PIN19_Msk (0x01 << PORT_PORTP_DRIVS_PIN19_Pos) +#define PORT_PORTP_DRIVS_PIN20_Pos 20 +#define PORT_PORTP_DRIVS_PIN20_Msk (0x01 << PORT_PORTP_DRIVS_PIN20_Pos) +#define PORT_PORTP_DRIVS_PIN21_Pos 21 +#define PORT_PORTP_DRIVS_PIN21_Msk (0x01 << PORT_PORTP_DRIVS_PIN21_Pos) +#define PORT_PORTP_DRIVS_PIN22_Pos 22 +#define PORT_PORTP_DRIVS_PIN22_Msk (0x01 << PORT_PORTP_DRIVS_PIN22_Pos) +#define PORT_PORTP_DRIVS_PIN23_Pos 23 +#define PORT_PORTP_DRIVS_PIN23_Msk (0x01 << PORT_PORTP_DRIVS_PIN23_Pos) + +#define PORT_PORTA_INEN_PIN0_Pos 0 +#define PORT_PORTA_INEN_PIN0_Msk (0x01 << PORT_PORTA_INEN_PIN0_Pos) +#define PORT_PORTA_INEN_PIN1_Pos 1 +#define PORT_PORTA_INEN_PIN1_Msk (0x01 << PORT_PORTA_INEN_PIN1_Pos) +#define PORT_PORTA_INEN_PIN2_Pos 2 +#define PORT_PORTA_INEN_PIN2_Msk (0x01 << PORT_PORTA_INEN_PIN2_Pos) +#define PORT_PORTA_INEN_PIN3_Pos 3 +#define PORT_PORTA_INEN_PIN3_Msk (0x01 << PORT_PORTA_INEN_PIN3_Pos) +#define PORT_PORTA_INEN_PIN4_Pos 4 +#define PORT_PORTA_INEN_PIN4_Msk (0x01 << PORT_PORTA_INEN_PIN4_Pos) +#define PORT_PORTA_INEN_PIN5_Pos 5 +#define PORT_PORTA_INEN_PIN5_Msk (0x01 << PORT_PORTA_INEN_PIN5_Pos) +#define PORT_PORTA_INEN_PIN6_Pos 6 +#define PORT_PORTA_INEN_PIN6_Msk (0x01 << PORT_PORTA_INEN_PIN6_Pos) +#define PORT_PORTA_INEN_PIN7_Pos 7 +#define PORT_PORTA_INEN_PIN7_Msk (0x01 << PORT_PORTA_INEN_PIN7_Pos) +#define PORT_PORTA_INEN_PIN8_Pos 8 +#define PORT_PORTA_INEN_PIN8_Msk (0x01 << PORT_PORTA_INEN_PIN8_Pos) +#define PORT_PORTA_INEN_PIN9_Pos 9 +#define PORT_PORTA_INEN_PIN9_Msk (0x01 << PORT_PORTA_INEN_PIN9_Pos) +#define PORT_PORTA_INEN_PIN10_Pos 10 +#define PORT_PORTA_INEN_PIN10_Msk (0x01 << PORT_PORTA_INEN_PIN10_Pos) +#define PORT_PORTA_INEN_PIN11_Pos 11 +#define PORT_PORTA_INEN_PIN11_Msk (0x01 << PORT_PORTA_INEN_PIN11_Pos) +#define PORT_PORTA_INEN_PIN12_Pos 12 +#define PORT_PORTA_INEN_PIN12_Msk (0x01 << PORT_PORTA_INEN_PIN12_Pos) +#define PORT_PORTA_INEN_PIN13_Pos 13 +#define PORT_PORTA_INEN_PIN13_Msk (0x01 << PORT_PORTA_INEN_PIN13_Pos) +#define PORT_PORTA_INEN_PIN14_Pos 14 +#define PORT_PORTA_INEN_PIN14_Msk (0x01 << PORT_PORTA_INEN_PIN14_Pos) +#define PORT_PORTA_INEN_PIN15_Pos 15 +#define PORT_PORTA_INEN_PIN15_Msk (0x01 << PORT_PORTA_INEN_PIN15_Pos) + +#define PORT_PORTB_INEN_PIN0_Pos 0 +#define PORT_PORTB_INEN_PIN0_Msk (0x01 << PORT_PORTB_INEN_PIN0_Pos) +#define PORT_PORTB_INEN_PIN1_Pos 1 +#define PORT_PORTB_INEN_PIN1_Msk (0x01 << PORT_PORTB_INEN_PIN1_Pos) +#define PORT_PORTB_INEN_PIN2_Pos 2 +#define PORT_PORTB_INEN_PIN2_Msk (0x01 << PORT_PORTB_INEN_PIN2_Pos) +#define PORT_PORTB_INEN_PIN3_Pos 3 +#define PORT_PORTB_INEN_PIN3_Msk (0x01 << PORT_PORTB_INEN_PIN3_Pos) +#define PORT_PORTB_INEN_PIN4_Pos 4 +#define PORT_PORTB_INEN_PIN4_Msk (0x01 << PORT_PORTB_INEN_PIN4_Pos) +#define PORT_PORTB_INEN_PIN5_Pos 5 +#define PORT_PORTB_INEN_PIN5_Msk (0x01 << PORT_PORTB_INEN_PIN5_Pos) +#define PORT_PORTB_INEN_PIN6_Pos 6 +#define PORT_PORTB_INEN_PIN6_Msk (0x01 << PORT_PORTB_INEN_PIN6_Pos) +#define PORT_PORTB_INEN_PIN7_Pos 7 +#define PORT_PORTB_INEN_PIN7_Msk (0x01 << PORT_PORTB_INEN_PIN7_Pos) +#define PORT_PORTB_INEN_PIN8_Pos 8 +#define PORT_PORTB_INEN_PIN8_Msk (0x01 << PORT_PORTB_INEN_PIN8_Pos) +#define PORT_PORTB_INEN_PIN9_Pos 9 +#define PORT_PORTB_INEN_PIN9_Msk (0x01 << PORT_PORTB_INEN_PIN9_Pos) +#define PORT_PORTB_INEN_PIN10_Pos 10 +#define PORT_PORTB_INEN_PIN10_Msk (0x01 << PORT_PORTB_INEN_PIN10_Pos) +#define PORT_PORTB_INEN_PIN11_Pos 11 +#define PORT_PORTB_INEN_PIN11_Msk (0x01 << PORT_PORTB_INEN_PIN11_Pos) +#define PORT_PORTB_INEN_PIN12_Pos 12 +#define PORT_PORTB_INEN_PIN12_Msk (0x01 << PORT_PORTB_INEN_PIN12_Pos) +#define PORT_PORTB_INEN_PIN13_Pos 13 +#define PORT_PORTB_INEN_PIN13_Msk (0x01 << PORT_PORTB_INEN_PIN13_Pos) +#define PORT_PORTB_INEN_PIN14_Pos 14 +#define PORT_PORTB_INEN_PIN14_Msk (0x01 << PORT_PORTB_INEN_PIN14_Pos) +#define PORT_PORTB_INEN_PIN15_Pos 15 +#define PORT_PORTB_INEN_PIN15_Msk (0x01 << PORT_PORTB_INEN_PIN15_Pos) + +#define PORT_PORTC_INEN_PIN0_Pos 0 +#define PORT_PORTC_INEN_PIN0_Msk (0x01 << PORT_PORTC_INEN_PIN0_Pos) +#define PORT_PORTC_INEN_PIN1_Pos 1 +#define PORT_PORTC_INEN_PIN1_Msk (0x01 << PORT_PORTC_INEN_PIN1_Pos) +#define PORT_PORTC_INEN_PIN2_Pos 2 +#define PORT_PORTC_INEN_PIN2_Msk (0x01 << PORT_PORTC_INEN_PIN2_Pos) +#define PORT_PORTC_INEN_PIN3_Pos 3 +#define PORT_PORTC_INEN_PIN3_Msk (0x01 << PORT_PORTC_INEN_PIN3_Pos) +#define PORT_PORTC_INEN_PIN4_Pos 4 +#define PORT_PORTC_INEN_PIN4_Msk (0x01 << PORT_PORTC_INEN_PIN4_Pos) +#define PORT_PORTC_INEN_PIN5_Pos 5 +#define PORT_PORTC_INEN_PIN5_Msk (0x01 << PORT_PORTC_INEN_PIN5_Pos) +#define PORT_PORTC_INEN_PIN6_Pos 6 +#define PORT_PORTC_INEN_PIN6_Msk (0x01 << PORT_PORTC_INEN_PIN6_Pos) +#define PORT_PORTC_INEN_PIN7_Pos 7 +#define PORT_PORTC_INEN_PIN7_Msk (0x01 << PORT_PORTC_INEN_PIN7_Pos) +#define PORT_PORTC_INEN_PIN8_Pos 8 +#define PORT_PORTC_INEN_PIN8_Msk (0x01 << PORT_PORTC_INEN_PIN8_Pos) +#define PORT_PORTC_INEN_PIN9_Pos 9 +#define PORT_PORTC_INEN_PIN9_Msk (0x01 << PORT_PORTC_INEN_PIN9_Pos) +#define PORT_PORTC_INEN_PIN10_Pos 10 +#define PORT_PORTC_INEN_PIN10_Msk (0x01 << PORT_PORTC_INEN_PIN10_Pos) +#define PORT_PORTC_INEN_PIN11_Pos 11 +#define PORT_PORTC_INEN_PIN11_Msk (0x01 << PORT_PORTC_INEN_PIN11_Pos) +#define PORT_PORTC_INEN_PIN12_Pos 12 +#define PORT_PORTC_INEN_PIN12_Msk (0x01 << PORT_PORTC_INEN_PIN12_Pos) +#define PORT_PORTC_INEN_PIN13_Pos 13 +#define PORT_PORTC_INEN_PIN13_Msk (0x01 << PORT_PORTC_INEN_PIN13_Pos) +#define PORT_PORTC_INEN_PIN14_Pos 14 +#define PORT_PORTC_INEN_PIN14_Msk (0x01 << PORT_PORTC_INEN_PIN14_Pos) +#define PORT_PORTC_INEN_PIN15_Pos 15 +#define PORT_PORTC_INEN_PIN15_Msk (0x01 << PORT_PORTC_INEN_PIN15_Pos) + +#define PORT_PORTM_INEN_PIN0_Pos 0 +#define PORT_PORTM_INEN_PIN0_Msk (0x01 << PORT_PORTM_INEN_PIN0_Pos) +#define PORT_PORTM_INEN_PIN1_Pos 1 +#define PORT_PORTM_INEN_PIN1_Msk (0x01 << PORT_PORTM_INEN_PIN1_Pos) +#define PORT_PORTM_INEN_PIN2_Pos 2 +#define PORT_PORTM_INEN_PIN2_Msk (0x01 << PORT_PORTM_INEN_PIN2_Pos) +#define PORT_PORTM_INEN_PIN3_Pos 3 +#define PORT_PORTM_INEN_PIN3_Msk (0x01 << PORT_PORTM_INEN_PIN3_Pos) +#define PORT_PORTM_INEN_PIN4_Pos 4 +#define PORT_PORTM_INEN_PIN4_Msk (0x01 << PORT_PORTM_INEN_PIN4_Pos) +#define PORT_PORTM_INEN_PIN5_Pos 5 +#define PORT_PORTM_INEN_PIN5_Msk (0x01 << PORT_PORTM_INEN_PIN5_Pos) +#define PORT_PORTM_INEN_PIN6_Pos 6 +#define PORT_PORTM_INEN_PIN6_Msk (0x01 << PORT_PORTM_INEN_PIN6_Pos) +#define PORT_PORTM_INEN_PIN7_Pos 7 +#define PORT_PORTM_INEN_PIN7_Msk (0x01 << PORT_PORTM_INEN_PIN7_Pos) +#define PORT_PORTM_INEN_PIN8_Pos 8 +#define PORT_PORTM_INEN_PIN8_Msk (0x01 << PORT_PORTM_INEN_PIN8_Pos) +#define PORT_PORTM_INEN_PIN9_Pos 9 +#define PORT_PORTM_INEN_PIN9_Msk (0x01 << PORT_PORTM_INEN_PIN9_Pos) +#define PORT_PORTM_INEN_PIN10_Pos 10 +#define PORT_PORTM_INEN_PIN10_Msk (0x01 << PORT_PORTM_INEN_PIN10_Pos) +#define PORT_PORTM_INEN_PIN11_Pos 11 +#define PORT_PORTM_INEN_PIN11_Msk (0x01 << PORT_PORTM_INEN_PIN11_Pos) +#define PORT_PORTM_INEN_PIN12_Pos 12 +#define PORT_PORTM_INEN_PIN12_Msk (0x01 << PORT_PORTM_INEN_PIN12_Pos) +#define PORT_PORTM_INEN_PIN13_Pos 13 +#define PORT_PORTM_INEN_PIN13_Msk (0x01 << PORT_PORTM_INEN_PIN13_Pos) +#define PORT_PORTM_INEN_PIN14_Pos 14 +#define PORT_PORTM_INEN_PIN14_Msk (0x01 << PORT_PORTM_INEN_PIN14_Pos) +#define PORT_PORTM_INEN_PIN15_Pos 15 +#define PORT_PORTM_INEN_PIN15_Msk (0x01 << PORT_PORTM_INEN_PIN15_Pos) +#define PORT_PORTM_INEN_PIN16_Pos 16 +#define PORT_PORTM_INEN_PIN16_Msk (0x01 << PORT_PORTM_INEN_PIN16_Pos) +#define PORT_PORTM_INEN_PIN17_Pos 17 +#define PORT_PORTM_INEN_PIN17_Msk (0x01 << PORT_PORTM_INEN_PIN17_Pos) +#define PORT_PORTM_INEN_PIN18_Pos 18 +#define PORT_PORTM_INEN_PIN18_Msk (0x01 << PORT_PORTM_INEN_PIN18_Pos) +#define PORT_PORTM_INEN_PIN19_Pos 19 +#define PORT_PORTM_INEN_PIN19_Msk (0x01 << PORT_PORTM_INEN_PIN19_Pos) +#define PORT_PORTM_INEN_PIN20_Pos 20 +#define PORT_PORTM_INEN_PIN20_Msk (0x01 << PORT_PORTM_INEN_PIN20_Pos) +#define PORT_PORTM_INEN_PIN21_Pos 21 +#define PORT_PORTM_INEN_PIN21_Msk (0x01 << PORT_PORTM_INEN_PIN21_Pos) +#define PORT_PORTM_INEN_PIN22_Pos 22 +#define PORT_PORTM_INEN_PIN22_Msk (0x01 << PORT_PORTM_INEN_PIN22_Pos) +#define PORT_PORTM_INEN_PIN23_Pos 23 +#define PORT_PORTM_INEN_PIN23_Msk (0x01 << PORT_PORTM_INEN_PIN23_Pos) + +#define PORT_PORTN_INEN_PIN0_Pos 0 +#define PORT_PORTN_INEN_PIN0_Msk (0x01 << PORT_PORTN_INEN_PIN0_Pos) +#define PORT_PORTN_INEN_PIN1_Pos 1 +#define PORT_PORTN_INEN_PIN1_Msk (0x01 << PORT_PORTN_INEN_PIN1_Pos) +#define PORT_PORTN_INEN_PIN2_Pos 2 +#define PORT_PORTN_INEN_PIN2_Msk (0x01 << PORT_PORTN_INEN_PIN2_Pos) +#define PORT_PORTN_INEN_PIN3_Pos 3 +#define PORT_PORTN_INEN_PIN3_Msk (0x01 << PORT_PORTN_INEN_PIN3_Pos) +#define PORT_PORTN_INEN_PIN4_Pos 4 +#define PORT_PORTN_INEN_PIN4_Msk (0x01 << PORT_PORTN_INEN_PIN4_Pos) +#define PORT_PORTN_INEN_PIN5_Pos 5 +#define PORT_PORTN_INEN_PIN5_Msk (0x01 << PORT_PORTN_INEN_PIN5_Pos) +#define PORT_PORTN_INEN_PIN6_Pos 6 +#define PORT_PORTN_INEN_PIN6_Msk (0x01 << PORT_PORTN_INEN_PIN6_Pos) +#define PORT_PORTN_INEN_PIN7_Pos 7 +#define PORT_PORTN_INEN_PIN7_Msk (0x01 << PORT_PORTN_INEN_PIN7_Pos) +#define PORT_PORTN_INEN_PIN8_Pos 8 +#define PORT_PORTN_INEN_PIN8_Msk (0x01 << PORT_PORTN_INEN_PIN8_Pos) +#define PORT_PORTN_INEN_PIN9_Pos 9 +#define PORT_PORTN_INEN_PIN9_Msk (0x01 << PORT_PORTN_INEN_PIN9_Pos) +#define PORT_PORTN_INEN_PIN10_Pos 10 +#define PORT_PORTN_INEN_PIN10_Msk (0x01 << PORT_PORTN_INEN_PIN10_Pos) +#define PORT_PORTN_INEN_PIN11_Pos 11 +#define PORT_PORTN_INEN_PIN11_Msk (0x01 << PORT_PORTN_INEN_PIN11_Pos) +#define PORT_PORTN_INEN_PIN12_Pos 12 +#define PORT_PORTN_INEN_PIN12_Msk (0x01 << PORT_PORTN_INEN_PIN12_Pos) +#define PORT_PORTN_INEN_PIN13_Pos 13 +#define PORT_PORTN_INEN_PIN13_Msk (0x01 << PORT_PORTN_INEN_PIN13_Pos) +#define PORT_PORTN_INEN_PIN14_Pos 14 +#define PORT_PORTN_INEN_PIN14_Msk (0x01 << PORT_PORTN_INEN_PIN14_Pos) +#define PORT_PORTN_INEN_PIN15_Pos 15 +#define PORT_PORTN_INEN_PIN15_Msk (0x01 << PORT_PORTN_INEN_PIN15_Pos) +#define PORT_PORTN_INEN_PIN16_Pos 16 +#define PORT_PORTN_INEN_PIN16_Msk (0x01 << PORT_PORTN_INEN_PIN16_Pos) +#define PORT_PORTN_INEN_PIN17_Pos 17 +#define PORT_PORTN_INEN_PIN17_Msk (0x01 << PORT_PORTN_INEN_PIN17_Pos) +#define PORT_PORTN_INEN_PIN18_Pos 18 +#define PORT_PORTN_INEN_PIN18_Msk (0x01 << PORT_PORTN_INEN_PIN18_Pos) +#define PORT_PORTN_INEN_PIN19_Pos 19 +#define PORT_PORTN_INEN_PIN19_Msk (0x01 << PORT_PORTN_INEN_PIN19_Pos) +#define PORT_PORTN_INEN_PIN20_Pos 20 +#define PORT_PORTN_INEN_PIN20_Msk (0x01 << PORT_PORTN_INEN_PIN20_Pos) +#define PORT_PORTN_INEN_PIN21_Pos 21 +#define PORT_PORTN_INEN_PIN21_Msk (0x01 << PORT_PORTN_INEN_PIN21_Pos) +#define PORT_PORTN_INEN_PIN22_Pos 22 +#define PORT_PORTN_INEN_PIN22_Msk (0x01 << PORT_PORTN_INEN_PIN22_Pos) +#define PORT_PORTN_INEN_PIN23_Pos 23 +#define PORT_PORTN_INEN_PIN23_Msk (0x01 << PORT_PORTN_INEN_PIN23_Pos) + +#define PORT_PORTP_INEN_PIN0_Pos 0 +#define PORT_PORTP_INEN_PIN0_Msk (0x01 << PORT_PORTP_INEN_PIN0_Pos) +#define PORT_PORTP_INEN_PIN1_Pos 1 +#define PORT_PORTP_INEN_PIN1_Msk (0x01 << PORT_PORTP_INEN_PIN1_Pos) +#define PORT_PORTP_INEN_PIN2_Pos 2 +#define PORT_PORTP_INEN_PIN2_Msk (0x01 << PORT_PORTP_INEN_PIN2_Pos) +#define PORT_PORTP_INEN_PIN3_Pos 3 +#define PORT_PORTP_INEN_PIN3_Msk (0x01 << PORT_PORTP_INEN_PIN3_Pos) +#define PORT_PORTP_INEN_PIN4_Pos 4 +#define PORT_PORTP_INEN_PIN4_Msk (0x01 << PORT_PORTP_INEN_PIN4_Pos) +#define PORT_PORTP_INEN_PIN5_Pos 5 +#define PORT_PORTP_INEN_PIN5_Msk (0x01 << PORT_PORTP_INEN_PIN5_Pos) +#define PORT_PORTP_INEN_PIN6_Pos 6 +#define PORT_PORTP_INEN_PIN6_Msk (0x01 << PORT_PORTP_INEN_PIN6_Pos) +#define PORT_PORTP_INEN_PIN7_Pos 7 +#define PORT_PORTP_INEN_PIN7_Msk (0x01 << PORT_PORTP_INEN_PIN7_Pos) +#define PORT_PORTP_INEN_PIN8_Pos 8 +#define PORT_PORTP_INEN_PIN8_Msk (0x01 << PORT_PORTP_INEN_PIN8_Pos) +#define PORT_PORTP_INEN_PIN9_Pos 9 +#define PORT_PORTP_INEN_PIN9_Msk (0x01 << PORT_PORTP_INEN_PIN9_Pos) +#define PORT_PORTP_INEN_PIN10_Pos 10 +#define PORT_PORTP_INEN_PIN10_Msk (0x01 << PORT_PORTP_INEN_PIN10_Pos) +#define PORT_PORTP_INEN_PIN11_Pos 11 +#define PORT_PORTP_INEN_PIN11_Msk (0x01 << PORT_PORTP_INEN_PIN11_Pos) +#define PORT_PORTP_INEN_PIN12_Pos 12 +#define PORT_PORTP_INEN_PIN12_Msk (0x01 << PORT_PORTP_INEN_PIN12_Pos) +#define PORT_PORTP_INEN_PIN13_Pos 13 +#define PORT_PORTP_INEN_PIN13_Msk (0x01 << PORT_PORTP_INEN_PIN13_Pos) +#define PORT_PORTP_INEN_PIN14_Pos 14 +#define PORT_PORTP_INEN_PIN14_Msk (0x01 << PORT_PORTP_INEN_PIN14_Pos) +#define PORT_PORTP_INEN_PIN15_Pos 15 +#define PORT_PORTP_INEN_PIN15_Msk (0x01 << PORT_PORTP_INEN_PIN15_Pos) +#define PORT_PORTP_INEN_PIN16_Pos 16 +#define PORT_PORTP_INEN_PIN16_Msk (0x01 << PORT_PORTP_INEN_PIN16_Pos) +#define PORT_PORTP_INEN_PIN17_Pos 17 +#define PORT_PORTP_INEN_PIN17_Msk (0x01 << PORT_PORTP_INEN_PIN17_Pos) +#define PORT_PORTP_INEN_PIN18_Pos 18 +#define PORT_PORTP_INEN_PIN18_Msk (0x01 << PORT_PORTP_INEN_PIN18_Pos) +#define PORT_PORTP_INEN_PIN19_Pos 19 +#define PORT_PORTP_INEN_PIN19_Msk (0x01 << PORT_PORTP_INEN_PIN19_Pos) +#define PORT_PORTP_INEN_PIN20_Pos 20 +#define PORT_PORTP_INEN_PIN20_Msk (0x01 << PORT_PORTP_INEN_PIN20_Pos) +#define PORT_PORTP_INEN_PIN21_Pos 21 +#define PORT_PORTP_INEN_PIN21_Msk (0x01 << PORT_PORTP_INEN_PIN21_Pos) +#define PORT_PORTP_INEN_PIN22_Pos 22 +#define PORT_PORTP_INEN_PIN22_Msk (0x01 << PORT_PORTP_INEN_PIN22_Pos) +#define PORT_PORTP_INEN_PIN23_Pos 23 +#define PORT_PORTP_INEN_PIN23_Msk (0x01 << PORT_PORTP_INEN_PIN23_Pos) + + + + +typedef struct { + __IO uint32_t DATA; +#define PIN0 0 +#define PIN1 1 +#define PIN2 2 +#define PIN3 3 +#define PIN4 4 +#define PIN5 5 +#define PIN6 6 +#define PIN7 7 +#define PIN8 8 +#define PIN9 9 +#define PIN10 10 +#define PIN11 11 +#define PIN12 12 +#define PIN13 13 +#define PIN14 14 +#define PIN15 15 +#define PIN16 16 +#define PIN17 17 +#define PIN18 18 +#define PIN19 19 +#define PIN20 20 +#define PIN21 21 +#define PIN22 22 +#define PIN23 23 +#define PIN24 24 + + __IO uint32_t DIR; //0 ÊäÈë 1 Êä³ö + + __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 µçƽ´¥·¢ÖÐ¶Ï 0 ±ßÑØ´¥·¢ÖÐ¶Ï + + __IO uint32_t INTBE; //Both Edge£¬µ±INTLVLTRGÉèΪ±ßÑØ´¥·¢ÖжÏʱ£¬´ËλÖÃ1±íʾÉÏÉýÑØºÍϽµÑض¼´¥·¢Öжϣ¬ÖÃ0ʱ´¥·¢±ßÑØÓÉINTRISEENÑ¡Ôñ + + __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 ÉÏÉýÑØ/¸ßµçƽ´¥·¢ÖÐ¶Ï 0 ϽµÑØ/µÍµçƽ´¥·¢ÖÐ¶Ï + + __IO uint32_t INTEN; //1 ÖжÏʹÄÜ 0 ÖжϽûÖ¹ + + __IO uint32_t INTRAWSTAT; //Öжϼì²âµ¥ÔªÊÇ·ñ¼ì²âµ½ÁË´¥·¢ÖжϵÄÌõ¼þ 1 ¼ì²âµ½ÁËÖжϴ¥·¢Ìõ¼þ 0 ûÓмì²âµ½Öжϴ¥·¢Ìõ¼þ + + __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0 + + __IO uint32_t INTCLR; //д1Çå³ýÖжϱêÖ¾£¬Ö»¶Ô±ßÑØ´¥·¢ÖжÏÓÐÓà +} GPIO_TypeDef; - __I uint32_t CVAL; //定时器当å‰�值,LDVAL-CVAL å�¯è®¡ç®—出计时时长 - __IO uint32_t CTRL; +#define GPIO_DATA_PIN0_Pos 0 +#define GPIO_DATA_PIN0_Msk (0x01 << GPIO_DATA_PIN0_Pos) +#define GPIO_DATA_PIN1_Pos 1 +#define GPIO_DATA_PIN1_Msk (0x01 << GPIO_DATA_PIN1_Pos) +#define GPIO_DATA_PIN2_Pos 2 +#define GPIO_DATA_PIN2_Msk (0x01 << GPIO_DATA_PIN2_Pos) +#define GPIO_DATA_PIN3_Pos 3 +#define GPIO_DATA_PIN3_Msk (0x01 << GPIO_DATA_PIN3_Pos) +#define GPIO_DATA_PIN4_Pos 4 +#define GPIO_DATA_PIN4_Msk (0x01 << GPIO_DATA_PIN4_Pos) +#define GPIO_DATA_PIN5_Pos 5 +#define GPIO_DATA_PIN5_Msk (0x01 << GPIO_DATA_PIN5_Pos) +#define GPIO_DATA_PIN6_Pos 6 +#define GPIO_DATA_PIN6_Msk (0x01 << GPIO_DATA_PIN6_Pos) +#define GPIO_DATA_PIN7_Pos 7 +#define GPIO_DATA_PIN7_Msk (0x01 << GPIO_DATA_PIN7_Pos) +#define GPIO_DATA_PIN8_Pos 8 +#define GPIO_DATA_PIN8_Msk (0x01 << GPIO_DATA_PIN8_Pos) +#define GPIO_DATA_PIN9_Pos 9 +#define GPIO_DATA_PIN9_Msk (0x01 << GPIO_DATA_PIN9_Pos) +#define GPIO_DATA_PIN10_Pos 10 +#define GPIO_DATA_PIN10_Msk (0x01 << GPIO_DATA_PIN10_Pos) +#define GPIO_DATA_PIN11_Pos 11 +#define GPIO_DATA_PIN11_Msk (0x01 << GPIO_DATA_PIN11_Pos) +#define GPIO_DATA_PIN12_Pos 12 +#define GPIO_DATA_PIN12_Msk (0x01 << GPIO_DATA_PIN12_Pos) +#define GPIO_DATA_PIN13_Pos 13 +#define GPIO_DATA_PIN13_Msk (0x01 << GPIO_DATA_PIN13_Pos) +#define GPIO_DATA_PIN14_Pos 14 +#define GPIO_DATA_PIN14_Msk (0x01 << GPIO_DATA_PIN14_Pos) +#define GPIO_DATA_PIN15_Pos 15 +#define GPIO_DATA_PIN15_Msk (0x01 << GPIO_DATA_PIN15_Pos) +#define GPIO_DATA_PIN16_Pos 16 +#define GPIO_DATA_PIN16_Msk (0x01 << GPIO_DATA_PIN16_Pos) +#define GPIO_DATA_PIN17_Pos 17 +#define GPIO_DATA_PIN17_Msk (0x01 << GPIO_DATA_PIN17_Pos) +#define GPIO_DATA_PIN18_Pos 18 +#define GPIO_DATA_PIN18_Msk (0x01 << GPIO_DATA_PIN18_Pos) +#define GPIO_DATA_PIN19_Pos 19 +#define GPIO_DATA_PIN19_Msk (0x01 << GPIO_DATA_PIN19_Pos) +#define GPIO_DATA_PIN20_Pos 20 +#define GPIO_DATA_PIN20_Msk (0x01 << GPIO_DATA_PIN20_Pos) +#define GPIO_DATA_PIN21_Pos 21 +#define GPIO_DATA_PIN21_Msk (0x01 << GPIO_DATA_PIN21_Pos) +#define GPIO_DATA_PIN22_Pos 22 +#define GPIO_DATA_PIN22_Msk (0x01 << GPIO_DATA_PIN22_Pos) +#define GPIO_DATA_PIN23_Pos 23 +#define GPIO_DATA_PIN23_Msk (0x01 << GPIO_DATA_PIN23_Pos) + +#define GPIO_DIR_PIN0_Pos 0 +#define GPIO_DIR_PIN0_Msk (0x01 << GPIO_DIR_PIN0_Pos) +#define GPIO_DIR_PIN1_Pos 1 +#define GPIO_DIR_PIN1_Msk (0x01 << GPIO_DIR_PIN1_Pos) +#define GPIO_DIR_PIN2_Pos 2 +#define GPIO_DIR_PIN2_Msk (0x01 << GPIO_DIR_PIN2_Pos) +#define GPIO_DIR_PIN3_Pos 3 +#define GPIO_DIR_PIN3_Msk (0x01 << GPIO_DIR_PIN3_Pos) +#define GPIO_DIR_PIN4_Pos 4 +#define GPIO_DIR_PIN4_Msk (0x01 << GPIO_DIR_PIN4_Pos) +#define GPIO_DIR_PIN5_Pos 5 +#define GPIO_DIR_PIN5_Msk (0x01 << GPIO_DIR_PIN5_Pos) +#define GPIO_DIR_PIN6_Pos 6 +#define GPIO_DIR_PIN6_Msk (0x01 << GPIO_DIR_PIN6_Pos) +#define GPIO_DIR_PIN7_Pos 7 +#define GPIO_DIR_PIN7_Msk (0x01 << GPIO_DIR_PIN7_Pos) +#define GPIO_DIR_PIN8_Pos 8 +#define GPIO_DIR_PIN8_Msk (0x01 << GPIO_DIR_PIN8_Pos) +#define GPIO_DIR_PIN9_Pos 9 +#define GPIO_DIR_PIN9_Msk (0x01 << GPIO_DIR_PIN9_Pos) +#define GPIO_DIR_PIN10_Pos 10 +#define GPIO_DIR_PIN10_Msk (0x01 << GPIO_DIR_PIN10_Pos) +#define GPIO_DIR_PIN11_Pos 11 +#define GPIO_DIR_PIN11_Msk (0x01 << GPIO_DIR_PIN11_Pos) +#define GPIO_DIR_PIN12_Pos 12 +#define GPIO_DIR_PIN12_Msk (0x01 << GPIO_DIR_PIN12_Pos) +#define GPIO_DIR_PIN13_Pos 13 +#define GPIO_DIR_PIN13_Msk (0x01 << GPIO_DIR_PIN13_Pos) +#define GPIO_DIR_PIN14_Pos 14 +#define GPIO_DIR_PIN14_Msk (0x01 << GPIO_DIR_PIN14_Pos) +#define GPIO_DIR_PIN15_Pos 15 +#define GPIO_DIR_PIN15_Msk (0x01 << GPIO_DIR_PIN15_Pos) +#define GPIO_DIR_PIN16_Pos 16 +#define GPIO_DIR_PIN16_Msk (0x01 << GPIO_DIR_PIN16_Pos) +#define GPIO_DIR_PIN17_Pos 17 +#define GPIO_DIR_PIN17_Msk (0x01 << GPIO_DIR_PIN17_Pos) +#define GPIO_DIR_PIN18_Pos 18 +#define GPIO_DIR_PIN18_Msk (0x01 << GPIO_DIR_PIN18_Pos) +#define GPIO_DIR_PIN19_Pos 19 +#define GPIO_DIR_PIN19_Msk (0x01 << GPIO_DIR_PIN19_Pos) +#define GPIO_DIR_PIN20_Pos 20 +#define GPIO_DIR_PIN20_Msk (0x01 << GPIO_DIR_PIN20_Pos) +#define GPIO_DIR_PIN21_Pos 21 +#define GPIO_DIR_PIN21_Msk (0x01 << GPIO_DIR_PIN21_Pos) +#define GPIO_DIR_PIN22_Pos 22 +#define GPIO_DIR_PIN22_Msk (0x01 << GPIO_DIR_PIN22_Pos) +#define GPIO_DIR_PIN23_Pos 23 +#define GPIO_DIR_PIN23_Msk (0x01 << GPIO_DIR_PIN23_Pos) + +#define GPIO_INTLVLTRG_PIN0_Pos 0 +#define GPIO_INTLVLTRG_PIN0_Msk (0x01 << GPIO_INTLVLTRG_PIN0_Pos) +#define GPIO_INTLVLTRG_PIN1_Pos 1 +#define GPIO_INTLVLTRG_PIN1_Msk (0x01 << GPIO_INTLVLTRG_PIN1_Pos) +#define GPIO_INTLVLTRG_PIN2_Pos 2 +#define GPIO_INTLVLTRG_PIN2_Msk (0x01 << GPIO_INTLVLTRG_PIN2_Pos) +#define GPIO_INTLVLTRG_PIN3_Pos 3 +#define GPIO_INTLVLTRG_PIN3_Msk (0x01 << GPIO_INTLVLTRG_PIN3_Pos) +#define GPIO_INTLVLTRG_PIN4_Pos 4 +#define GPIO_INTLVLTRG_PIN4_Msk (0x01 << GPIO_INTLVLTRG_PIN4_Pos) +#define GPIO_INTLVLTRG_PIN5_Pos 5 +#define GPIO_INTLVLTRG_PIN5_Msk (0x01 << GPIO_INTLVLTRG_PIN5_Pos) +#define GPIO_INTLVLTRG_PIN6_Pos 6 +#define GPIO_INTLVLTRG_PIN6_Msk (0x01 << GPIO_INTLVLTRG_PIN6_Pos) +#define GPIO_INTLVLTRG_PIN7_Pos 7 +#define GPIO_INTLVLTRG_PIN7_Msk (0x01 << GPIO_INTLVLTRG_PIN7_Pos) +#define GPIO_INTLVLTRG_PIN8_Pos 8 +#define GPIO_INTLVLTRG_PIN8_Msk (0x01 << GPIO_INTLVLTRG_PIN8_Pos) +#define GPIO_INTLVLTRG_PIN9_Pos 9 +#define GPIO_INTLVLTRG_PIN9_Msk (0x01 << GPIO_INTLVLTRG_PIN9_Pos) +#define GPIO_INTLVLTRG_PIN10_Pos 10 +#define GPIO_INTLVLTRG_PIN10_Msk (0x01 << GPIO_INTLVLTRG_PIN10_Pos) +#define GPIO_INTLVLTRG_PIN11_Pos 11 +#define GPIO_INTLVLTRG_PIN11_Msk (0x01 << GPIO_INTLVLTRG_PIN11_Pos) +#define GPIO_INTLVLTRG_PIN12_Pos 12 +#define GPIO_INTLVLTRG_PIN12_Msk (0x01 << GPIO_INTLVLTRG_PIN12_Pos) +#define GPIO_INTLVLTRG_PIN13_Pos 13 +#define GPIO_INTLVLTRG_PIN13_Msk (0x01 << GPIO_INTLVLTRG_PIN13_Pos) +#define GPIO_INTLVLTRG_PIN14_Pos 14 +#define GPIO_INTLVLTRG_PIN14_Msk (0x01 << GPIO_INTLVLTRG_PIN14_Pos) +#define GPIO_INTLVLTRG_PIN15_Pos 15 +#define GPIO_INTLVLTRG_PIN15_Msk (0x01 << GPIO_INTLVLTRG_PIN15_Pos) +#define GPIO_INTLVLTRG_PIN16_Pos 16 +#define GPIO_INTLVLTRG_PIN16_Msk (0x01 << GPIO_INTLVLTRG_PIN16_Pos) +#define GPIO_INTLVLTRG_PIN17_Pos 17 +#define GPIO_INTLVLTRG_PIN17_Msk (0x01 << GPIO_INTLVLTRG_PIN17_Pos) +#define GPIO_INTLVLTRG_PIN18_Pos 18 +#define GPIO_INTLVLTRG_PIN18_Msk (0x01 << GPIO_INTLVLTRG_PIN18_Pos) +#define GPIO_INTLVLTRG_PIN19_Pos 19 +#define GPIO_INTLVLTRG_PIN19_Msk (0x01 << GPIO_INTLVLTRG_PIN19_Pos) +#define GPIO_INTLVLTRG_PIN20_Pos 20 +#define GPIO_INTLVLTRG_PIN20_Msk (0x01 << GPIO_INTLVLTRG_PIN20_Pos) +#define GPIO_INTLVLTRG_PIN21_Pos 21 +#define GPIO_INTLVLTRG_PIN21_Msk (0x01 << GPIO_INTLVLTRG_PIN21_Pos) +#define GPIO_INTLVLTRG_PIN22_Pos 22 +#define GPIO_INTLVLTRG_PIN22_Msk (0x01 << GPIO_INTLVLTRG_PIN22_Pos) +#define GPIO_INTLVLTRG_PIN23_Pos 23 +#define GPIO_INTLVLTRG_PIN23_Msk (0x01 << GPIO_INTLVLTRG_PIN23_Pos) + +#define GPIO_INTBE_PIN0_Pos 0 +#define GPIO_INTBE_PIN0_Msk (0x01 << GPIO_INTBE_PIN0_Pos) +#define GPIO_INTBE_PIN1_Pos 1 +#define GPIO_INTBE_PIN1_Msk (0x01 << GPIO_INTBE_PIN1_Pos) +#define GPIO_INTBE_PIN2_Pos 2 +#define GPIO_INTBE_PIN2_Msk (0x01 << GPIO_INTBE_PIN2_Pos) +#define GPIO_INTBE_PIN3_Pos 3 +#define GPIO_INTBE_PIN3_Msk (0x01 << GPIO_INTBE_PIN3_Pos) +#define GPIO_INTBE_PIN4_Pos 4 +#define GPIO_INTBE_PIN4_Msk (0x01 << GPIO_INTBE_PIN4_Pos) +#define GPIO_INTBE_PIN5_Pos 5 +#define GPIO_INTBE_PIN5_Msk (0x01 << GPIO_INTBE_PIN5_Pos) +#define GPIO_INTBE_PIN6_Pos 6 +#define GPIO_INTBE_PIN6_Msk (0x01 << GPIO_INTBE_PIN6_Pos) +#define GPIO_INTBE_PIN7_Pos 7 +#define GPIO_INTBE_PIN7_Msk (0x01 << GPIO_INTBE_PIN7_Pos) +#define GPIO_INTBE_PIN8_Pos 8 +#define GPIO_INTBE_PIN8_Msk (0x01 << GPIO_INTBE_PIN8_Pos) +#define GPIO_INTBE_PIN9_Pos 9 +#define GPIO_INTBE_PIN9_Msk (0x01 << GPIO_INTBE_PIN9_Pos) +#define GPIO_INTBE_PIN10_Pos 10 +#define GPIO_INTBE_PIN10_Msk (0x01 << GPIO_INTBE_PIN10_Pos) +#define GPIO_INTBE_PIN11_Pos 11 +#define GPIO_INTBE_PIN11_Msk (0x01 << GPIO_INTBE_PIN11_Pos) +#define GPIO_INTBE_PIN12_Pos 12 +#define GPIO_INTBE_PIN12_Msk (0x01 << GPIO_INTBE_PIN12_Pos) +#define GPIO_INTBE_PIN13_Pos 13 +#define GPIO_INTBE_PIN13_Msk (0x01 << GPIO_INTBE_PIN13_Pos) +#define GPIO_INTBE_PIN14_Pos 14 +#define GPIO_INTBE_PIN14_Msk (0x01 << GPIO_INTBE_PIN14_Pos) +#define GPIO_INTBE_PIN15_Pos 15 +#define GPIO_INTBE_PIN15_Msk (0x01 << GPIO_INTBE_PIN15_Pos) +#define GPIO_INTBE_PIN16_Pos 16 +#define GPIO_INTBE_PIN16_Msk (0x01 << GPIO_INTBE_PIN16_Pos) +#define GPIO_INTBE_PIN17_Pos 17 +#define GPIO_INTBE_PIN17_Msk (0x01 << GPIO_INTBE_PIN17_Pos) +#define GPIO_INTBE_PIN18_Pos 18 +#define GPIO_INTBE_PIN18_Msk (0x01 << GPIO_INTBE_PIN18_Pos) +#define GPIO_INTBE_PIN19_Pos 19 +#define GPIO_INTBE_PIN19_Msk (0x01 << GPIO_INTBE_PIN19_Pos) +#define GPIO_INTBE_PIN20_Pos 20 +#define GPIO_INTBE_PIN20_Msk (0x01 << GPIO_INTBE_PIN20_Pos) +#define GPIO_INTBE_PIN21_Pos 21 +#define GPIO_INTBE_PIN21_Msk (0x01 << GPIO_INTBE_PIN21_Pos) +#define GPIO_INTBE_PIN22_Pos 22 +#define GPIO_INTBE_PIN22_Msk (0x01 << GPIO_INTBE_PIN22_Pos) +#define GPIO_INTBE_PIN23_Pos 23 +#define GPIO_INTBE_PIN23_Msk (0x01 << GPIO_INTBE_PIN23_Pos) + +#define GPIO_INTRISEEN_PIN0_Pos 0 +#define GPIO_INTRISEEN_PIN0_Msk (0x01 << GPIO_INTRISEEN_PIN0_Pos) +#define GPIO_INTRISEEN_PIN1_Pos 1 +#define GPIO_INTRISEEN_PIN1_Msk (0x01 << GPIO_INTRISEEN_PIN1_Pos) +#define GPIO_INTRISEEN_PIN2_Pos 2 +#define GPIO_INTRISEEN_PIN2_Msk (0x01 << GPIO_INTRISEEN_PIN2_Pos) +#define GPIO_INTRISEEN_PIN3_Pos 3 +#define GPIO_INTRISEEN_PIN3_Msk (0x01 << GPIO_INTRISEEN_PIN3_Pos) +#define GPIO_INTRISEEN_PIN4_Pos 4 +#define GPIO_INTRISEEN_PIN4_Msk (0x01 << GPIO_INTRISEEN_PIN4_Pos) +#define GPIO_INTRISEEN_PIN5_Pos 5 +#define GPIO_INTRISEEN_PIN5_Msk (0x01 << GPIO_INTRISEEN_PIN5_Pos) +#define GPIO_INTRISEEN_PIN6_Pos 6 +#define GPIO_INTRISEEN_PIN6_Msk (0x01 << GPIO_INTRISEEN_PIN6_Pos) +#define GPIO_INTRISEEN_PIN7_Pos 7 +#define GPIO_INTRISEEN_PIN7_Msk (0x01 << GPIO_INTRISEEN_PIN7_Pos) +#define GPIO_INTRISEEN_PIN8_Pos 8 +#define GPIO_INTRISEEN_PIN8_Msk (0x01 << GPIO_INTRISEEN_PIN8_Pos) +#define GPIO_INTRISEEN_PIN9_Pos 9 +#define GPIO_INTRISEEN_PIN9_Msk (0x01 << GPIO_INTRISEEN_PIN9_Pos) +#define GPIO_INTRISEEN_PIN10_Pos 10 +#define GPIO_INTRISEEN_PIN10_Msk (0x01 << GPIO_INTRISEEN_PIN10_Pos) +#define GPIO_INTRISEEN_PIN11_Pos 11 +#define GPIO_INTRISEEN_PIN11_Msk (0x01 << GPIO_INTRISEEN_PIN11_Pos) +#define GPIO_INTRISEEN_PIN12_Pos 12 +#define GPIO_INTRISEEN_PIN12_Msk (0x01 << GPIO_INTRISEEN_PIN12_Pos) +#define GPIO_INTRISEEN_PIN13_Pos 13 +#define GPIO_INTRISEEN_PIN13_Msk (0x01 << GPIO_INTRISEEN_PIN13_Pos) +#define GPIO_INTRISEEN_PIN14_Pos 14 +#define GPIO_INTRISEEN_PIN14_Msk (0x01 << GPIO_INTRISEEN_PIN14_Pos) +#define GPIO_INTRISEEN_PIN15_Pos 15 +#define GPIO_INTRISEEN_PIN15_Msk (0x01 << GPIO_INTRISEEN_PIN15_Pos) +#define GPIO_INTRISEEN_PIN16_Pos 16 +#define GPIO_INTRISEEN_PIN16_Msk (0x01 << GPIO_INTRISEEN_PIN16_Pos) +#define GPIO_INTRISEEN_PIN17_Pos 17 +#define GPIO_INTRISEEN_PIN17_Msk (0x01 << GPIO_INTRISEEN_PIN17_Pos) +#define GPIO_INTRISEEN_PIN18_Pos 18 +#define GPIO_INTRISEEN_PIN18_Msk (0x01 << GPIO_INTRISEEN_PIN18_Pos) +#define GPIO_INTRISEEN_PIN19_Pos 19 +#define GPIO_INTRISEEN_PIN19_Msk (0x01 << GPIO_INTRISEEN_PIN19_Pos) +#define GPIO_INTRISEEN_PIN20_Pos 20 +#define GPIO_INTRISEEN_PIN20_Msk (0x01 << GPIO_INTRISEEN_PIN20_Pos) +#define GPIO_INTRISEEN_PIN21_Pos 21 +#define GPIO_INTRISEEN_PIN21_Msk (0x01 << GPIO_INTRISEEN_PIN21_Pos) +#define GPIO_INTRISEEN_PIN22_Pos 22 +#define GPIO_INTRISEEN_PIN22_Msk (0x01 << GPIO_INTRISEEN_PIN22_Pos) +#define GPIO_INTRISEEN_PIN23_Pos 23 +#define GPIO_INTRISEEN_PIN23_Msk (0x01 << GPIO_INTRISEEN_PIN23_Pos) + +#define GPIO_INTEN_PIN0_Pos 0 +#define GPIO_INTEN_PIN0_Msk (0x01 << GPIO_INTEN_PIN0_Pos) +#define GPIO_INTEN_PIN1_Pos 1 +#define GPIO_INTEN_PIN1_Msk (0x01 << GPIO_INTEN_PIN1_Pos) +#define GPIO_INTEN_PIN2_Pos 2 +#define GPIO_INTEN_PIN2_Msk (0x01 << GPIO_INTEN_PIN2_Pos) +#define GPIO_INTEN_PIN3_Pos 3 +#define GPIO_INTEN_PIN3_Msk (0x01 << GPIO_INTEN_PIN3_Pos) +#define GPIO_INTEN_PIN4_Pos 4 +#define GPIO_INTEN_PIN4_Msk (0x01 << GPIO_INTEN_PIN4_Pos) +#define GPIO_INTEN_PIN5_Pos 5 +#define GPIO_INTEN_PIN5_Msk (0x01 << GPIO_INTEN_PIN5_Pos) +#define GPIO_INTEN_PIN6_Pos 6 +#define GPIO_INTEN_PIN6_Msk (0x01 << GPIO_INTEN_PIN6_Pos) +#define GPIO_INTEN_PIN7_Pos 7 +#define GPIO_INTEN_PIN7_Msk (0x01 << GPIO_INTEN_PIN7_Pos) +#define GPIO_INTEN_PIN8_Pos 8 +#define GPIO_INTEN_PIN8_Msk (0x01 << GPIO_INTEN_PIN8_Pos) +#define GPIO_INTEN_PIN9_Pos 9 +#define GPIO_INTEN_PIN9_Msk (0x01 << GPIO_INTEN_PIN9_Pos) +#define GPIO_INTEN_PIN10_Pos 10 +#define GPIO_INTEN_PIN10_Msk (0x01 << GPIO_INTEN_PIN10_Pos) +#define GPIO_INTEN_PIN11_Pos 11 +#define GPIO_INTEN_PIN11_Msk (0x01 << GPIO_INTEN_PIN11_Pos) +#define GPIO_INTEN_PIN12_Pos 12 +#define GPIO_INTEN_PIN12_Msk (0x01 << GPIO_INTEN_PIN12_Pos) +#define GPIO_INTEN_PIN13_Pos 13 +#define GPIO_INTEN_PIN13_Msk (0x01 << GPIO_INTEN_PIN13_Pos) +#define GPIO_INTEN_PIN14_Pos 14 +#define GPIO_INTEN_PIN14_Msk (0x01 << GPIO_INTEN_PIN14_Pos) +#define GPIO_INTEN_PIN15_Pos 15 +#define GPIO_INTEN_PIN15_Msk (0x01 << GPIO_INTEN_PIN15_Pos) +#define GPIO_INTEN_PIN16_Pos 16 +#define GPIO_INTEN_PIN16_Msk (0x01 << GPIO_INTEN_PIN16_Pos) +#define GPIO_INTEN_PIN17_Pos 17 +#define GPIO_INTEN_PIN17_Msk (0x01 << GPIO_INTEN_PIN17_Pos) +#define GPIO_INTEN_PIN18_Pos 18 +#define GPIO_INTEN_PIN18_Msk (0x01 << GPIO_INTEN_PIN18_Pos) +#define GPIO_INTEN_PIN19_Pos 19 +#define GPIO_INTEN_PIN19_Msk (0x01 << GPIO_INTEN_PIN19_Pos) +#define GPIO_INTEN_PIN20_Pos 20 +#define GPIO_INTEN_PIN20_Msk (0x01 << GPIO_INTEN_PIN20_Pos) +#define GPIO_INTEN_PIN21_Pos 21 +#define GPIO_INTEN_PIN21_Msk (0x01 << GPIO_INTEN_PIN21_Pos) +#define GPIO_INTEN_PIN22_Pos 22 +#define GPIO_INTEN_PIN22_Msk (0x01 << GPIO_INTEN_PIN22_Pos) +#define GPIO_INTEN_PIN23_Pos 23 +#define GPIO_INTEN_PIN23_Msk (0x01 << GPIO_INTEN_PIN23_Pos) + +#define GPIO_INTRAWSTAT_PIN0_Pos 0 +#define GPIO_INTRAWSTAT_PIN0_Msk (0x01 << GPIO_INTRAWSTAT_PIN0_Pos) +#define GPIO_INTRAWSTAT_PIN1_Pos 1 +#define GPIO_INTRAWSTAT_PIN1_Msk (0x01 << GPIO_INTRAWSTAT_PIN1_Pos) +#define GPIO_INTRAWSTAT_PIN2_Pos 2 +#define GPIO_INTRAWSTAT_PIN2_Msk (0x01 << GPIO_INTRAWSTAT_PIN2_Pos) +#define GPIO_INTRAWSTAT_PIN3_Pos 3 +#define GPIO_INTRAWSTAT_PIN3_Msk (0x01 << GPIO_INTRAWSTAT_PIN3_Pos) +#define GPIO_INTRAWSTAT_PIN4_Pos 4 +#define GPIO_INTRAWSTAT_PIN4_Msk (0x01 << GPIO_INTRAWSTAT_PIN4_Pos) +#define GPIO_INTRAWSTAT_PIN5_Pos 5 +#define GPIO_INTRAWSTAT_PIN5_Msk (0x01 << GPIO_INTRAWSTAT_PIN5_Pos) +#define GPIO_INTRAWSTAT_PIN6_Pos 6 +#define GPIO_INTRAWSTAT_PIN6_Msk (0x01 << GPIO_INTRAWSTAT_PIN6_Pos) +#define GPIO_INTRAWSTAT_PIN7_Pos 7 +#define GPIO_INTRAWSTAT_PIN7_Msk (0x01 << GPIO_INTRAWSTAT_PIN7_Pos) +#define GPIO_INTRAWSTAT_PIN8_Pos 8 +#define GPIO_INTRAWSTAT_PIN8_Msk (0x01 << GPIO_INTRAWSTAT_PIN8_Pos) +#define GPIO_INTRAWSTAT_PIN9_Pos 9 +#define GPIO_INTRAWSTAT_PIN9_Msk (0x01 << GPIO_INTRAWSTAT_PIN9_Pos) +#define GPIO_INTRAWSTAT_PIN10_Pos 10 +#define GPIO_INTRAWSTAT_PIN10_Msk (0x01 << GPIO_INTRAWSTAT_PIN10_Pos) +#define GPIO_INTRAWSTAT_PIN11_Pos 11 +#define GPIO_INTRAWSTAT_PIN11_Msk (0x01 << GPIO_INTRAWSTAT_PIN11_Pos) +#define GPIO_INTRAWSTAT_PIN12_Pos 12 +#define GPIO_INTRAWSTAT_PIN12_Msk (0x01 << GPIO_INTRAWSTAT_PIN12_Pos) +#define GPIO_INTRAWSTAT_PIN13_Pos 13 +#define GPIO_INTRAWSTAT_PIN13_Msk (0x01 << GPIO_INTRAWSTAT_PIN13_Pos) +#define GPIO_INTRAWSTAT_PIN14_Pos 14 +#define GPIO_INTRAWSTAT_PIN14_Msk (0x01 << GPIO_INTRAWSTAT_PIN14_Pos) +#define GPIO_INTRAWSTAT_PIN15_Pos 15 +#define GPIO_INTRAWSTAT_PIN15_Msk (0x01 << GPIO_INTRAWSTAT_PIN15_Pos) +#define GPIO_INTRAWSTAT_PIN16_Pos 16 +#define GPIO_INTRAWSTAT_PIN16_Msk (0x01 << GPIO_INTRAWSTAT_PIN16_Pos) +#define GPIO_INTRAWSTAT_PIN17_Pos 17 +#define GPIO_INTRAWSTAT_PIN17_Msk (0x01 << GPIO_INTRAWSTAT_PIN17_Pos) +#define GPIO_INTRAWSTAT_PIN18_Pos 18 +#define GPIO_INTRAWSTAT_PIN18_Msk (0x01 << GPIO_INTRAWSTAT_PIN18_Pos) +#define GPIO_INTRAWSTAT_PIN19_Pos 19 +#define GPIO_INTRAWSTAT_PIN19_Msk (0x01 << GPIO_INTRAWSTAT_PIN19_Pos) +#define GPIO_INTRAWSTAT_PIN20_Pos 20 +#define GPIO_INTRAWSTAT_PIN20_Msk (0x01 << GPIO_INTRAWSTAT_PIN20_Pos) +#define GPIO_INTRAWSTAT_PIN21_Pos 21 +#define GPIO_INTRAWSTAT_PIN21_Msk (0x01 << GPIO_INTRAWSTAT_PIN21_Pos) +#define GPIO_INTRAWSTAT_PIN22_Pos 22 +#define GPIO_INTRAWSTAT_PIN22_Msk (0x01 << GPIO_INTRAWSTAT_PIN22_Pos) +#define GPIO_INTRAWSTAT_PIN23_Pos 23 +#define GPIO_INTRAWSTAT_PIN23_Msk (0x01 << GPIO_INTRAWSTAT_PIN23_Pos) + +#define GPIO_INTSTAT_PIN0_Pos 0 +#define GPIO_INTSTAT_PIN0_Msk (0x01 << GPIO_INTSTAT_PIN0_Pos) +#define GPIO_INTSTAT_PIN1_Pos 1 +#define GPIO_INTSTAT_PIN1_Msk (0x01 << GPIO_INTSTAT_PIN1_Pos) +#define GPIO_INTSTAT_PIN2_Pos 2 +#define GPIO_INTSTAT_PIN2_Msk (0x01 << GPIO_INTSTAT_PIN2_Pos) +#define GPIO_INTSTAT_PIN3_Pos 3 +#define GPIO_INTSTAT_PIN3_Msk (0x01 << GPIO_INTSTAT_PIN3_Pos) +#define GPIO_INTSTAT_PIN4_Pos 4 +#define GPIO_INTSTAT_PIN4_Msk (0x01 << GPIO_INTSTAT_PIN4_Pos) +#define GPIO_INTSTAT_PIN5_Pos 5 +#define GPIO_INTSTAT_PIN5_Msk (0x01 << GPIO_INTSTAT_PIN5_Pos) +#define GPIO_INTSTAT_PIN6_Pos 6 +#define GPIO_INTSTAT_PIN6_Msk (0x01 << GPIO_INTSTAT_PIN6_Pos) +#define GPIO_INTSTAT_PIN7_Pos 7 +#define GPIO_INTSTAT_PIN7_Msk (0x01 << GPIO_INTSTAT_PIN7_Pos) +#define GPIO_INTSTAT_PIN8_Pos 8 +#define GPIO_INTSTAT_PIN8_Msk (0x01 << GPIO_INTSTAT_PIN8_Pos) +#define GPIO_INTSTAT_PIN9_Pos 9 +#define GPIO_INTSTAT_PIN9_Msk (0x01 << GPIO_INTSTAT_PIN9_Pos) +#define GPIO_INTSTAT_PIN10_Pos 10 +#define GPIO_INTSTAT_PIN10_Msk (0x01 << GPIO_INTSTAT_PIN10_Pos) +#define GPIO_INTSTAT_PIN11_Pos 11 +#define GPIO_INTSTAT_PIN11_Msk (0x01 << GPIO_INTSTAT_PIN11_Pos) +#define GPIO_INTSTAT_PIN12_Pos 12 +#define GPIO_INTSTAT_PIN12_Msk (0x01 << GPIO_INTSTAT_PIN12_Pos) +#define GPIO_INTSTAT_PIN13_Pos 13 +#define GPIO_INTSTAT_PIN13_Msk (0x01 << GPIO_INTSTAT_PIN13_Pos) +#define GPIO_INTSTAT_PIN14_Pos 14 +#define GPIO_INTSTAT_PIN14_Msk (0x01 << GPIO_INTSTAT_PIN14_Pos) +#define GPIO_INTSTAT_PIN15_Pos 15 +#define GPIO_INTSTAT_PIN15_Msk (0x01 << GPIO_INTSTAT_PIN15_Pos) +#define GPIO_INTSTAT_PIN16_Pos 16 +#define GPIO_INTSTAT_PIN16_Msk (0x01 << GPIO_INTSTAT_PIN16_Pos) +#define GPIO_INTSTAT_PIN17_Pos 17 +#define GPIO_INTSTAT_PIN17_Msk (0x01 << GPIO_INTSTAT_PIN17_Pos) +#define GPIO_INTSTAT_PIN18_Pos 18 +#define GPIO_INTSTAT_PIN18_Msk (0x01 << GPIO_INTSTAT_PIN18_Pos) +#define GPIO_INTSTAT_PIN19_Pos 19 +#define GPIO_INTSTAT_PIN19_Msk (0x01 << GPIO_INTSTAT_PIN19_Pos) +#define GPIO_INTSTAT_PIN20_Pos 20 +#define GPIO_INTSTAT_PIN20_Msk (0x01 << GPIO_INTSTAT_PIN20_Pos) +#define GPIO_INTSTAT_PIN21_Pos 21 +#define GPIO_INTSTAT_PIN21_Msk (0x01 << GPIO_INTSTAT_PIN21_Pos) +#define GPIO_INTSTAT_PIN22_Pos 22 +#define GPIO_INTSTAT_PIN22_Msk (0x01 << GPIO_INTSTAT_PIN22_Pos) +#define GPIO_INTSTAT_PIN23_Pos 23 +#define GPIO_INTSTAT_PIN23_Msk (0x01 << GPIO_INTSTAT_PIN23_Pos) + +#define GPIO_INTCLR_PIN0_Pos 0 +#define GPIO_INTCLR_PIN0_Msk (0x01 << GPIO_INTCLR_PIN0_Pos) +#define GPIO_INTCLR_PIN1_Pos 1 +#define GPIO_INTCLR_PIN1_Msk (0x01 << GPIO_INTCLR_PIN1_Pos) +#define GPIO_INTCLR_PIN2_Pos 2 +#define GPIO_INTCLR_PIN2_Msk (0x01 << GPIO_INTCLR_PIN2_Pos) +#define GPIO_INTCLR_PIN3_Pos 3 +#define GPIO_INTCLR_PIN3_Msk (0x01 << GPIO_INTCLR_PIN3_Pos) +#define GPIO_INTCLR_PIN4_Pos 4 +#define GPIO_INTCLR_PIN4_Msk (0x01 << GPIO_INTCLR_PIN4_Pos) +#define GPIO_INTCLR_PIN5_Pos 5 +#define GPIO_INTCLR_PIN5_Msk (0x01 << GPIO_INTCLR_PIN5_Pos) +#define GPIO_INTCLR_PIN6_Pos 6 +#define GPIO_INTCLR_PIN6_Msk (0x01 << GPIO_INTCLR_PIN6_Pos) +#define GPIO_INTCLR_PIN7_Pos 7 +#define GPIO_INTCLR_PIN7_Msk (0x01 << GPIO_INTCLR_PIN7_Pos) +#define GPIO_INTCLR_PIN8_Pos 8 +#define GPIO_INTCLR_PIN8_Msk (0x01 << GPIO_INTCLR_PIN8_Pos) +#define GPIO_INTCLR_PIN9_Pos 9 +#define GPIO_INTCLR_PIN9_Msk (0x01 << GPIO_INTCLR_PIN9_Pos) +#define GPIO_INTCLR_PIN10_Pos 10 +#define GPIO_INTCLR_PIN10_Msk (0x01 << GPIO_INTCLR_PIN10_Pos) +#define GPIO_INTCLR_PIN11_Pos 11 +#define GPIO_INTCLR_PIN11_Msk (0x01 << GPIO_INTCLR_PIN11_Pos) +#define GPIO_INTCLR_PIN12_Pos 12 +#define GPIO_INTCLR_PIN12_Msk (0x01 << GPIO_INTCLR_PIN12_Pos) +#define GPIO_INTCLR_PIN13_Pos 13 +#define GPIO_INTCLR_PIN13_Msk (0x01 << GPIO_INTCLR_PIN13_Pos) +#define GPIO_INTCLR_PIN14_Pos 14 +#define GPIO_INTCLR_PIN14_Msk (0x01 << GPIO_INTCLR_PIN14_Pos) +#define GPIO_INTCLR_PIN15_Pos 15 +#define GPIO_INTCLR_PIN15_Msk (0x01 << GPIO_INTCLR_PIN15_Pos) +#define GPIO_INTCLR_PIN16_Pos 16 +#define GPIO_INTCLR_PIN16_Msk (0x01 << GPIO_INTCLR_PIN16_Pos) +#define GPIO_INTCLR_PIN17_Pos 17 +#define GPIO_INTCLR_PIN17_Msk (0x01 << GPIO_INTCLR_PIN17_Pos) +#define GPIO_INTCLR_PIN18_Pos 18 +#define GPIO_INTCLR_PIN18_Msk (0x01 << GPIO_INTCLR_PIN18_Pos) +#define GPIO_INTCLR_PIN19_Pos 19 +#define GPIO_INTCLR_PIN19_Msk (0x01 << GPIO_INTCLR_PIN19_Pos) +#define GPIO_INTCLR_PIN20_Pos 20 +#define GPIO_INTCLR_PIN20_Msk (0x01 << GPIO_INTCLR_PIN20_Pos) +#define GPIO_INTCLR_PIN21_Pos 21 +#define GPIO_INTCLR_PIN21_Msk (0x01 << GPIO_INTCLR_PIN21_Pos) +#define GPIO_INTCLR_PIN22_Pos 22 +#define GPIO_INTCLR_PIN22_Msk (0x01 << GPIO_INTCLR_PIN22_Pos) +#define GPIO_INTCLR_PIN23_Pos 23 +#define GPIO_INTCLR_PIN23_Msk (0x01 << GPIO_INTCLR_PIN23_Pos) + + + + +typedef struct { + __IO uint32_t LDVAL; //¶¨Ê±Æ÷¼ÓÔØÖµ£¬Ê¹Äܺó¶¨Ê±Æ÷´Ó´ËÊýÖµ¿ªÊ¼Ïòϵݼõ¼ÆÊý + + __I uint32_t CVAL; //¶¨Ê±Æ÷µ±Ç°Öµ£¬LDVAL-CVAL ¿É¼ÆËã³ö¼ÆÊ±Ê±³¤ + + __IO uint32_t CTRL; } TIMR_TypeDef; -#define TIMR_CTRL_EN_Pos 0 //æ­¤ä½�赋1导致TIMR从LDVAL开始å�‘下递å‡�计数 -#define TIMR_CTRL_EN_Msk (0x01 << TIMR_CTRL_EN_Pos) -#define TIMR_CTRL_CLKSRC_Pos 1 //æ—¶é’Ÿæº�:0 内部系统时钟 1 外部引脚脉冲计数 -#define TIMR_CTRL_CLKSRC_Msk (0x01 << TIMR_CTRL_CLKSRC_Pos) -#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRx的计数时钟为TIMRx-1的溢出信å�· -#define TIMR_CTRL_CASCADE_Msk (0x01 << TIMR_CTRL_CASCADE_Pos) - -typedef struct -{ - __IO uint32_t PCTRL; //Pulse Control,脉宽测é‡�模å�—控制寄存器 - - __I uint32_t PCVAL; //脉宽测é‡�定时器当å‰�值 - - uint32_t RESERVED[2]; - __IO uint32_t IE; +#define TIMR_CTRL_EN_Pos 0 //´Ëλ¸³1µ¼ÖÂTIMR´ÓLDVAL¿ªÊ¼Ïòϵݼõ¼ÆÊý +#define TIMR_CTRL_EN_Msk (0x01 << TIMR_CTRL_EN_Pos) +#define TIMR_CTRL_CLKSRC_Pos 1 //ʱÖÓÔ´£º0 ÄÚ²¿ÏµÍ³Ê±ÖÓ 1 ÍⲿÒý½ÅÂö³å¼ÆÊý +#define TIMR_CTRL_CLKSRC_Msk (0x01 << TIMR_CTRL_CLKSRC_Pos) +#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRxµÄ¼ÆÊýʱÖÓΪTIMRx-1µÄÒç³öÐźŠ+#define TIMR_CTRL_CASCADE_Msk (0x01 << TIMR_CTRL_CASCADE_Pos) - __IO uint32_t IF; - __IO uint32_t HALT; -} TIMRG_TypeDef; +typedef struct { + __IO uint32_t PCTRL; //Pulse Control£¬Âö¿í²âÁ¿Ä£¿é¿ØÖƼĴæÆ÷ -#define TIMRG_PCTRL_EN_Pos 0 //开始测é‡�脉宽,脉宽内32ä½�计数器从0开始å�‘上计数 -#define TIMRG_PCTRL_EN_Msk (0x01 << TIMRG_PCTRL_EN_Pos) -#define TIMRG_PCTRL_HIGH_Pos 1 //0 测é‡�低电平长度 1 测é‡�高电平长度 -#define TIMRG_PCTRL_HIGH_Msk (0x01 << TIMRG_PCTRL_HIGH_Pos) -#define TIMRG_PCTRL_CLKSRC_Pos 2 //æ—¶é’Ÿæº�:0 内部系统时钟 1 脉宽测é‡�模å�—å�˜æˆ�一个计数器,ä¸�å†�具有脉宽测é‡�功能 -#define TIMRG_PCTRL_CLKSRC_Msk (0x01 << TIMRG_PCTRL_CLKSRC_Pos) - -#define TIMRG_IE_TIMR0_Pos 0 -#define TIMRG_IE_TIMR0_Msk (0x01 << TIMRG_IE_TIMR0_Pos) -#define TIMRG_IE_TIMR1_Pos 1 -#define TIMRG_IE_TIMR1_Msk (0x01 << TIMRG_IE_TIMR1_Pos) -#define TIMRG_IE_TIMR2_Pos 2 -#define TIMRG_IE_TIMR2_Msk (0x01 << TIMRG_IE_TIMR2_Pos) -#define TIMRG_IE_TIMR3_Pos 3 -#define TIMRG_IE_TIMR3_Msk (0x01 << TIMRG_IE_TIMR3_Pos) -#define TIMRG_IE_TIMR4_Pos 4 -#define TIMRG_IE_TIMR4_Msk (0x01 << TIMRG_IE_TIMR4_Pos) -#define TIMRG_IE_TIMR5_Pos 5 -#define TIMRG_IE_TIMR5_Msk (0x01 << TIMRG_IE_TIMR5_Pos) -#define TIMRG_IE_PULSE_Pos 16 -#define TIMRG_IE_PULSE_Msk (0x01 << TIMRG_IE_PULSE_Pos) - -#define TIMRG_IF_TIMR0_Pos 0 //写1清零 -#define TIMRG_IF_TIMR0_Msk (0x01 << TIMRG_IF_TIMR0_Pos) -#define TIMRG_IF_TIMR1_Pos 1 -#define TIMRG_IF_TIMR1_Msk (0x01 << TIMRG_IF_TIMR1_Pos) -#define TIMRG_IF_TIMR2_Pos 2 -#define TIMRG_IF_TIMR2_Msk (0x01 << TIMRG_IF_TIMR2_Pos) -#define TIMRG_IF_TIMR3_Pos 3 -#define TIMRG_IF_TIMR3_Msk (0x01 << TIMRG_IF_TIMR3_Pos) -#define TIMRG_IF_TIMR4_Pos 4 -#define TIMRG_IF_TIMR4_Msk (0x01 << TIMRG_IF_TIMR4_Pos) -#define TIMRG_IF_TIMR5_Pos 5 -#define TIMRG_IF_TIMR5_Msk (0x01 << TIMRG_IF_TIMR5_Pos) -#define TIMRG_IF_PULSE_Pos 16 -#define TIMRG_IF_PULSE_Msk (0x01 << TIMRG_IF_PULSE_Pos) - -#define TIMRG_HALT_TIMR0_Pos 0 //1 æš‚å�œè®¡æ•° -#define TIMRG_HALT_TIMR0_Msk (0x01 << TIMRG_HALT_TIMR0_Pos) -#define TIMRG_HALT_TIMR1_Pos 1 -#define TIMRG_HALT_TIMR1_Msk (0x01 << TIMRG_HALT_TIMR1_Pos) -#define TIMRG_HALT_TIMR2_Pos 2 -#define TIMRG_HALT_TIMR2_Msk (0x01 << TIMRG_HALT_TIMR2_Pos) -#define TIMRG_HALT_TIMR3_Pos 3 -#define TIMRG_HALT_TIMR3_Msk (0x01 << TIMRG_HALT_TIMR3_Pos) -#define TIMRG_HALT_TIMR4_Pos 4 -#define TIMRG_HALT_TIMR4_Msk (0x01 << TIMRG_HALT_TIMR4_Pos) -#define TIMRG_HALT_TIMR5_Pos 5 -#define TIMRG_HALT_TIMR5_Msk (0x01 << TIMRG_HALT_TIMR5_Pos) - -typedef struct -{ - __IO uint32_t DATA; + __I uint32_t PCVAL; //Âö¿í²âÁ¿¶¨Ê±Æ÷µ±Ç°Öµ - __IO uint32_t CTRL; + uint32_t RESERVED[2]; - __IO uint32_t BAUD; + __IO uint32_t IE; - __IO uint32_t FIFO; + __IO uint32_t IF; - __IO uint32_t LINCR; + __IO uint32_t HALT; +} TIMRG_TypeDef; - union { - __IO uint32_t CTSCR; - __IO uint32_t RTSCR; - }; +#define TIMRG_PCTRL_EN_Pos 0 //¿ªÊ¼²âÁ¿Âö¿í£¬Âö¿íÄÚ32λ¼ÆÊýÆ÷´Ó0¿ªÊ¼ÏòÉϼÆÊý +#define TIMRG_PCTRL_EN_Msk (0x01 << TIMRG_PCTRL_EN_Pos) +#define TIMRG_PCTRL_HIGH_Pos 1 //0 ²âÁ¿µÍµçƽ³¤¶È 1 ²âÁ¿¸ßµçƽ³¤¶È +#define TIMRG_PCTRL_HIGH_Msk (0x01 << TIMRG_PCTRL_HIGH_Pos) +#define TIMRG_PCTRL_CLKSRC_Pos 2 //ʱÖÓÔ´£º0 ÄÚ²¿ÏµÍ³Ê±ÖÓ 1 Âö¿í²âÁ¿Ä£¿é±ä³ÉÒ»¸ö¼ÆÊýÆ÷£¬²»ÔÙ¾ßÓÐÂö¿í²âÁ¿¹¦ÄÜ +#define TIMRG_PCTRL_CLKSRC_Msk (0x01 << TIMRG_PCTRL_CLKSRC_Pos) + +#define TIMRG_IE_TIMR0_Pos 0 +#define TIMRG_IE_TIMR0_Msk (0x01 << TIMRG_IE_TIMR0_Pos) +#define TIMRG_IE_TIMR1_Pos 1 +#define TIMRG_IE_TIMR1_Msk (0x01 << TIMRG_IE_TIMR1_Pos) +#define TIMRG_IE_TIMR2_Pos 2 +#define TIMRG_IE_TIMR2_Msk (0x01 << TIMRG_IE_TIMR2_Pos) +#define TIMRG_IE_TIMR3_Pos 3 +#define TIMRG_IE_TIMR3_Msk (0x01 << TIMRG_IE_TIMR3_Pos) +#define TIMRG_IE_TIMR4_Pos 4 +#define TIMRG_IE_TIMR4_Msk (0x01 << TIMRG_IE_TIMR4_Pos) +#define TIMRG_IE_TIMR5_Pos 5 +#define TIMRG_IE_TIMR5_Msk (0x01 << TIMRG_IE_TIMR5_Pos) +#define TIMRG_IE_PULSE_Pos 16 +#define TIMRG_IE_PULSE_Msk (0x01 << TIMRG_IE_PULSE_Pos) + +#define TIMRG_IF_TIMR0_Pos 0 //д1ÇåÁã +#define TIMRG_IF_TIMR0_Msk (0x01 << TIMRG_IF_TIMR0_Pos) +#define TIMRG_IF_TIMR1_Pos 1 +#define TIMRG_IF_TIMR1_Msk (0x01 << TIMRG_IF_TIMR1_Pos) +#define TIMRG_IF_TIMR2_Pos 2 +#define TIMRG_IF_TIMR2_Msk (0x01 << TIMRG_IF_TIMR2_Pos) +#define TIMRG_IF_TIMR3_Pos 3 +#define TIMRG_IF_TIMR3_Msk (0x01 << TIMRG_IF_TIMR3_Pos) +#define TIMRG_IF_TIMR4_Pos 4 +#define TIMRG_IF_TIMR4_Msk (0x01 << TIMRG_IF_TIMR4_Pos) +#define TIMRG_IF_TIMR5_Pos 5 +#define TIMRG_IF_TIMR5_Msk (0x01 << TIMRG_IF_TIMR5_Pos) +#define TIMRG_IF_PULSE_Pos 16 +#define TIMRG_IF_PULSE_Msk (0x01 << TIMRG_IF_PULSE_Pos) + +#define TIMRG_HALT_TIMR0_Pos 0 //1 ÔÝÍ£¼ÆÊý +#define TIMRG_HALT_TIMR0_Msk (0x01 << TIMRG_HALT_TIMR0_Pos) +#define TIMRG_HALT_TIMR1_Pos 1 +#define TIMRG_HALT_TIMR1_Msk (0x01 << TIMRG_HALT_TIMR1_Pos) +#define TIMRG_HALT_TIMR2_Pos 2 +#define TIMRG_HALT_TIMR2_Msk (0x01 << TIMRG_HALT_TIMR2_Pos) +#define TIMRG_HALT_TIMR3_Pos 3 +#define TIMRG_HALT_TIMR3_Msk (0x01 << TIMRG_HALT_TIMR3_Pos) +#define TIMRG_HALT_TIMR4_Pos 4 +#define TIMRG_HALT_TIMR4_Msk (0x01 << TIMRG_HALT_TIMR4_Pos) +#define TIMRG_HALT_TIMR5_Pos 5 +#define TIMRG_HALT_TIMR5_Msk (0x01 << TIMRG_HALT_TIMR5_Pos) + + + + +typedef struct { + __IO uint32_t DATA; + + __IO uint32_t CTRL; + + __IO uint32_t BAUD; + + __IO uint32_t FIFO; + + __IO uint32_t LINCR; + + union { + __IO uint32_t CTSCR; + + __IO uint32_t RTSCR; + }; } UART_TypeDef; -#define UART_DATA_DATA_Pos 0 -#define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos) -#define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数æ�®æ—¶ï¼Œè¯¥ä½�硬件置1,读å�–æ•°æ�®å�Žè‡ªåŠ¨æ¸…é›¶ -#define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos) -#define UART_DATA_PAERR_Pos 10 //Parity Error -#define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos) - -#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在å�‘é€�æ•°æ�® 1 空闲状æ€�,没有数æ�®å�‘é€� -#define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos) -#define UART_CTRL_TXFF_Pos 1 //TX FIFO Full -#define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos) -#define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数æ�®å°‘于设定个数时产生中断 -#define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos) -#define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty -#define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos) -#define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°æ—¶äº§ç”Ÿä¸­æ–­ -#define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos) -#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零 -#define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos) -#define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 -#define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos) -#define UART_CTRL_EN_Pos 9 -#define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos) -#define UART_CTRL_LOOP_Pos 10 -#define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos) -#define UART_CTRL_BAUDEN_Pos 13 //必须写1 -#define UART_CTRL_BAUDEN_Msk (0x01 << UART_CTRL_BAUDEN_Pos) -#define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符å�Žï¼Œè¶…过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�® -#define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos) -#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect,检测到LIN Break,å�³RX线上检测到连续11ä½�低电平 -#define UART_CTRL_BRKDET_Msk (0x01 << UART_CTRL_BRKDET_Pos) -#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect 中断使能 -#define UART_CTRL_BRKIE_Msk (0x01 << UART_CTRL_BRKIE_Pos) -#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break,å�‘é€�LIN Break -#define UART_CTRL_GENBRK_Msk (0x01 << UART_CTRL_GENBRK_Pos) -#define UART_CTRL_DATA9b_Pos 18 //1 9ä½�æ•°æ�®ä½� 0 8ä½�æ•°æ�®ä½� -#define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos) -#define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 å�¶æ ¡éªŒ 101 固定为1 111 固定为0 -#define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos) -#define UART_CTRL_STOP2b_Pos 22 //1 2ä½�å�œæ­¢ä½� 0 1ä½�å�œæ­¢ä½� -#define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos) -#define UART_CTRL_TOTIME_Pos 24 //TimeOut æ—¶é•¿ = TOTIME/(BAUDRAUD/10) ç§’ -#define UART_CTRL_TOTIME_Msk (0xFFu << UART_CTRL_TOTIME_Pos) - -#define UART_BAUD_BAUD_Pos 0 //串å�£æ³¢ç‰¹çއ = SYS_Freq/16/BAUD - 1 -#define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos) -#define UART_BAUD_TXD_Pos 14 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£TXD引脚上的电平 -#define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos) -#define UART_BAUD_RXD_Pos 15 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£RXD引脚上的电平 -#define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos) -#define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF -#define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos) -#define UART_BAUD_TXIF_Pos 17 //å�‘é€�中断标志 = TXTHRF & TXIE -#define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos) -#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect 中断标志,检测到LIN Breakæ—¶è‹¥BRKIE=1,此ä½�由硬件置ä½� -#define UART_BAUD_BRKIF_Msk (0x01 << UART_BAUD_BRKIF_Pos) -#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°ï¼ˆRXLVL >= RXTHR)时硬件置1 -#define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos) -#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数æ�®å°‘于设定个数(TXLVL <= TXTHR)时硬件置1 -#define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos) -#define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�®æ—¶è‹¥TOIE=1,此ä½�由硬件置ä½� -#define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos) -#define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE -#define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos) -#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1å�¯åŠ¨è‡ªåŠ¨æ³¢ç‰¹çŽ‡æ ¡å‡†ï¼Œå®Œæˆ�å�Žè‡ªåŠ¨æ¸…é›¶ -#define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos) -#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测ä½�长,0 1ä½�,通过测起始ä½� 脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFF \ - // 1 2ä½�,通过测起始ä½�加1ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFE \ - // 1 4ä½�,通过测起始ä½�加3ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xF8 \ - // 1 8ä½�,通过测起始ä½�加7ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0x80 -#define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos) -#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准æˆ�功 1 自动波特率校准失败 -#define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos) -#define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 -#define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos) - -#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数 -#define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos) -#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数 -#define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos) -#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触å�‘é—¨é™�,中断使能时 RXLVL >= RXTHR 触å�‘RX中断 -#define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos) -#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触å�‘é—¨é™�,中断使能时 TXLVL <= TXTHR 触å�‘TX中断 -#define UART_FIFO_TXTHR_Msk (0xFFu << UART_FIFO_TXTHR_Pos) - -#define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能 -#define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos) -#define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状æ€� -#define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos) -#define UART_LINCR_GENBRKIE_Pos 2 //å�‘é€�LIN Break完æˆ�中断使能 -#define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos) -#define UART_LINCR_GENBRKIF_Pos 3 //å�‘é€�LIN Break完æˆ�中断状æ€� -#define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos) -#define UART_LINCR_GENBRK_Pos 4 //å�‘é€�LIN Break,å�‘é€�完æˆ�自动清零 -#define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos) - -#define UART_CTSCR_EN_Pos 0 //CTSæµ�控使能 -#define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos) -#define UART_CTSCR_POL_Pos 2 //CTSä¿¡å�·æž�性,0 低有效,CTS输入为低表示å�¯ä»¥å�‘é€�æ•°æ�® -#define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos) -#define UART_CTSCR_STAT_Pos 7 //CTSä¿¡å�·çš„当å‰�状æ€� -#define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos) - -#define UART_RTSCR_EN_Pos 1 //RTSæµ�控使能 -#define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos) -#define UART_RTSCR_POL_Pos 3 //RTSä¿¡å�·æž�性 0 低有效,RTS输入为低表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® -#define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos) -#define UART_RTSCR_THR_Pos 4 //RTSæµ�控的触å�‘阈值 0 1字节 1 2字节 2 4字节 3 6字节 -#define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos) -#define UART_RTSCR_STAT_Pos 8 //RTSä¿¡å�·çš„当å‰�状æ€� -#define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos) - -typedef struct -{ - __IO uint32_t CTRL; - - __IO uint32_t DATA; - - __IO uint32_t STAT; - - __IO uint32_t IE; - __IO uint32_t IF; +#define UART_DATA_DATA_Pos 0 +#define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos) +#define UART_DATA_VALID_Pos 9 //µ±DATA×Ö¶ÎÓÐÓÐЧµÄ½ÓÊÕÊý¾Ýʱ£¬¸ÃλӲ¼þÖÃ1£¬¶ÁÈ¡Êý¾Ýºó×Ô¶¯ÇåÁã +#define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos) +#define UART_DATA_PAERR_Pos 10 //Parity Error +#define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos) + +#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 ÕýÔÚ·¢ËÍÊý¾Ý 1 ¿ÕÏÐ״̬£¬Ã»ÓÐÊý¾Ý·¢ËÍ +#define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos) +#define UART_CTRL_TXFF_Pos 1 //TX FIFO Full +#define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos) +#define UART_CTRL_TXIE_Pos 2 //TX ÖжÏʹÄÜ: 1 TX FF ÖÐÊý¾ÝÉÙÓÚÉ趨¸öÊýʱ²úÉúÖÐ¶Ï +#define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos) +#define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty +#define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos) +#define UART_CTRL_RXIE_Pos 4 //RX ÖжÏʹÄÜ: 1 RX FF ÖÐÊý¾Ý´ïµ½É趨¸öÊýʱ²úÉúÖÐ¶Ï +#define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos) +#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow£¬Ð´1ÇåÁã +#define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos) +#define UART_CTRL_TXDOIE_Pos 6 //TX Done ÖжÏʹÄÜ£¬·¢ËÍFIFO¿ÕÇÒ·¢ËÍ·¢ËÍÒÆÎ»¼Ä´æÆ÷Òѽ«×îºóһλ·¢ËͳöÈ¥ +#define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos) +#define UART_CTRL_EN_Pos 9 +#define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos) +#define UART_CTRL_LOOP_Pos 10 +#define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos) +#define UART_CTRL_BAUDEN_Pos 13 //±ØÐëд1 +#define UART_CTRL_BAUDEN_Msk (0x01 << UART_CTRL_BAUDEN_Pos) +#define UART_CTRL_TOIE_Pos 14 //TimeOut ÖжÏʹÄÜ£¬½ÓÊÕµ½Éϸö×Ö·ûºó£¬³¬¹ý TOTIME/BAUDRAUD ÃëûÓнÓÊÕµ½ÐµÄÊý¾Ý +#define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos) +#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect£¬¼ì²âµ½LIN Break£¬¼´RXÏßÉϼì²âµ½Á¬Ðø11λµÍµçƽ +#define UART_CTRL_BRKDET_Msk (0x01 << UART_CTRL_BRKDET_Pos) +#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect ÖжÏʹÄÜ +#define UART_CTRL_BRKIE_Msk (0x01 << UART_CTRL_BRKIE_Pos) +#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break£¬·¢ËÍLIN Break +#define UART_CTRL_GENBRK_Msk (0x01 << UART_CTRL_GENBRK_Pos) +#define UART_CTRL_DATA9b_Pos 18 //1 9λÊý¾Ýλ 0 8λÊý¾Ýλ +#define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos) +#define UART_CTRL_PARITY_Pos 19 //000 ÎÞУÑé 001 ÆæÐ£Ñé 011 żУÑé 101 ¹Ì¶¨Îª1 111 ¹Ì¶¨Îª0 +#define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos) +#define UART_CTRL_STOP2b_Pos 22 //1 2λֹͣλ 0 1λֹͣλ +#define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos) +#define UART_CTRL_TOTIME_Pos 24 //TimeOut ʱ³¤ = TOTIME/(BAUDRAUD/10) Ãë +#define UART_CTRL_TOTIME_Msk (0xFFu<< UART_CTRL_TOTIME_Pos) + +#define UART_BAUD_BAUD_Pos 0 //´®¿Ú²¨ÌØÂÊ = SYS_Freq/16/BAUD - 1 +#define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos) +#define UART_BAUD_TXD_Pos 14 //ͨ¹ý´Ëλ¿ÉÖ±½Ó¶ÁÈ¡´®¿ÚTXDÒý½ÅÉÏµÄµçÆ½ +#define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos) +#define UART_BAUD_RXD_Pos 15 //ͨ¹ý´Ëλ¿ÉÖ±½Ó¶ÁÈ¡´®¿ÚRXDÒý½ÅÉÏµÄµçÆ½ +#define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos) +#define UART_BAUD_RXTOIF_Pos 16 //½ÓÊÕ&³¬Ê±µÄÖжϱêÖ¾ = RXIF | TOIF +#define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos) +#define UART_BAUD_TXIF_Pos 17 //·¢ËÍÖжϱêÖ¾ = TXTHRF & TXIE +#define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos) +#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect ÖжϱêÖ¾£¬¼ì²âµ½LIN BreakʱÈôBRKIE=1£¬´ËλÓÉÓ²¼þÖÃλ +#define UART_BAUD_BRKIF_Msk (0x01 << UART_BAUD_BRKIF_Pos) +#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag£¬RX FIFOÖÐÊý¾Ý´ïµ½É趨¸öÊý£¨RXLVL >= RXTHR£©Ê±Ó²¼þÖÃ1 +#define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos) +#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag£¬TX FIFOÖÐÊý¾ÝÉÙÓÚÉ趨¸öÊý£¨TXLVL <= TXTHR£©Ê±Ó²¼þÖÃ1 +#define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos) +#define UART_BAUD_TOIF_Pos 21 //TimeOut ÖжϱêÖ¾£¬³¬¹ý TOTIME/BAUDRAUD ÃëûÓнÓÊÕµ½ÐµÄÊý¾ÝʱÈôTOIE=1£¬´ËλÓÉÓ²¼þÖÃλ +#define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos) +#define UART_BAUD_RXIF_Pos 22 //½ÓÊÕÖжϱêÖ¾ = RXTHRF & RXIE +#define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos) +#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable£¬Ð´1Æô¶¯×Ô¶¯²¨ÌØÂÊУ׼£¬Íê³Éºó×Ô¶¯ÇåÁã +#define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos) +#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit£¬ÓÃÓÚ¼ÆËã²¨ÌØÂʵļì²â볤£¬0 1λ£¬Í¨¹ý²âÆðʼλ Âö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xFF + // 1 2λ£¬Í¨¹ý²âÆðʼλ¼Ó1λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xFE + // 1 4λ£¬Í¨¹ý²âÆðʼλ¼Ó3λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xF8 + // 1 8λ£¬Í¨¹ý²âÆðʼλ¼Ó7λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0x80 +#define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos) +#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error£¬0 ×Ô¶¯²¨ÌØÂÊУ׼³É¹¦ 1 ×Ô¶¯²¨ÌØÂÊУ׼ʧ°Ü +#define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos) +#define UART_BAUD_TXDOIF_Pos 27 //TX Done ÖжϱêÖ¾£¬·¢ËÍFIFO¿ÕÇÒ·¢ËÍ·¢ËÍÒÆÎ»¼Ä´æÆ÷Òѽ«×îºóһλ·¢ËͳöÈ¥ +#define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos) + +#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level£¬RX FIFO ÖÐ×Ö·û¸öÊý +#define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos) +#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level£¬TX FIFO ÖÐ×Ö·û¸öÊý +#define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos) +#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold£¬RXÖжϴ¥·¢ÃÅÏÞ£¬ÖжÏʹÄÜʱ RXLVL >= RXTHR ´¥·¢RXÖÐ¶Ï +#define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos) +#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold£¬TXÖжϴ¥·¢ÃÅÏÞ£¬ÖжÏʹÄÜʱ TXLVL <= TXTHR ´¥·¢TXÖÐ¶Ï +#define UART_FIFO_TXTHR_Msk (0xFFu<< UART_FIFO_TXTHR_Pos) + +#define UART_LINCR_BRKDETIE_Pos 0 //¼ì²âµ½LIN BreakÖжÏʹÄÜ +#define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos) +#define UART_LINCR_BRKDETIF_Pos 1 //¼ì²âµ½LIN BreakÖжÏ״̬ +#define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos) +#define UART_LINCR_GENBRKIE_Pos 2 //·¢ËÍLIN BreakÍê³ÉÖжÏʹÄÜ +#define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos) +#define UART_LINCR_GENBRKIF_Pos 3 //·¢ËÍLIN BreakÍê³ÉÖжÏ״̬ +#define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos) +#define UART_LINCR_GENBRK_Pos 4 //·¢ËÍLIN Break£¬·¢ËÍÍê³É×Ô¶¯ÇåÁã +#define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos) + +#define UART_CTSCR_EN_Pos 0 //CTSÁ÷¿ØÊ¹ÄÜ +#define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos) +#define UART_CTSCR_POL_Pos 2 //CTSÐźż«ÐÔ£¬0 µÍÓÐЧ£¬CTSÊäÈëΪµÍ±íʾ¿ÉÒÔ·¢ËÍÊý¾Ý +#define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos) +#define UART_CTSCR_STAT_Pos 7 //CTSÐźŵĵ±Ç°×´Ì¬ +#define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos) + +#define UART_RTSCR_EN_Pos 1 //RTSÁ÷¿ØÊ¹ÄÜ +#define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos) +#define UART_RTSCR_POL_Pos 3 //RTSÐźż«ÐÔ 0 µÍÓÐЧ£¬RTSÊäÈëΪµÍ±íʾ¿ÉÒÔ½ÓÊÕÊý¾Ý +#define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos) +#define UART_RTSCR_THR_Pos 4 //RTSÁ÷¿ØµÄ´¥·¢ãÐÖµ 0 1×Ö½Ú 1 2×Ö½Ú 2 4×Ö½Ú 3 6×Ö½Ú +#define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos) +#define UART_RTSCR_STAT_Pos 8 //RTSÐźŵĵ±Ç°×´Ì¬ +#define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos) + + + + +typedef struct { + __IO uint32_t CTRL; + + __IO uint32_t DATA; + + __IO uint32_t STAT; + + __IO uint32_t IE; + + __IO uint32_t IF; } SPI_TypeDef; -#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2) -#define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos) -#define SPI_CTRL_EN_Pos 3 -#define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos) -#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, å�–值3--15,表示4--16ä½� -#define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos) -#define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳å�˜æ²¿é‡‡æ ·æ•°æ�® 1 在SCLK的第二个跳å�˜æ²¿é‡‡æ ·æ•°æ�® -#define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos) -#define SPI_CTRL_CPOL_Pos 9 //0 空闲状æ€�下SCLK为低电平 1 空闲状æ€�下SCLK为高电平 -#define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos) -#define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 SPI 3 SPI -#define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos) -#define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模å¼� 0 从模å¼� -#define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos) -#define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置 -#define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos) -#define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信å�·è¿›è¡ŒåŽ»æŠ–æ“�作 0 对SPI输入信å�·ä¸�进行去抖æ“�作 -#define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos) -#define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中æ¯�字符之间会将SSN拉高å�Šä¸ªSCLK周期 -#define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos) -#define SPI_CTRL_TFCLR_Pos 24 //TX FIFO Clear -#define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos) -#define SPI_CTRL_RFCLR_Pos 25 //RX FIFO Clear -#define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos) - -#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1,软件写1清零 -#define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos) -#define SPI_STAT_TFE_Pos 1 //å�‘é€�FIFO Empty -#define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos) -#define SPI_STAT_TFNF_Pos 2 //å�‘é€�FIFO Not Full -#define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos) -#define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty -#define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos) -#define SPI_STAT_RFF_Pos 4 //接收FIFO Full -#define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos) -#define SPI_STAT_RFOVF_Pos 5 //接收FIFO Overflow -#define SPI_STAT_RFOVF_Msk (0x01 << SPI_STAT_RFOVF_Pos) -#define SPI_STAT_TFLVL_Pos 6 //å�‘é€�FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 TFNF=0时表示FIFO内有8个数æ�®ï¼ŒTFNF=1时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® -#define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos) -#define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 RFF=1时表示FIFO内有8个数æ�®ï¼Œ RFF=0时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® -#define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos) -#define SPI_STAT_BUSY_Pos 15 -#define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos) - -#define SPI_IE_RFOVF_Pos 0 -#define SPI_IE_RFOVF_Msk (0x01 << SPI_IE_RFOVF_Pos) -#define SPI_IE_RFF_Pos 1 -#define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos) -#define SPI_IE_RFHF_Pos 2 -#define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos) -#define SPI_IE_TFE_Pos 3 -#define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos) -#define SPI_IE_TFHF_Pos 4 -#define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos) -#define SPI_IE_WTC_Pos 8 //Word Transmit Complete -#define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos) -#define SPI_IE_FTC_Pos 9 //Frame Transmit Complete -#define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos) - -#define SPI_IF_RFOVF_Pos 0 //写1清零 -#define SPI_IF_RFOVF_Msk (0x01 << SPI_IF_RFOVF_Pos) -#define SPI_IF_RFF_Pos 1 -#define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos) -#define SPI_IF_RFHF_Pos 2 -#define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos) -#define SPI_IF_TFE_Pos 3 -#define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos) -#define SPI_IF_TFHF_Pos 4 -#define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos) -#define SPI_IF_WTC_Pos 8 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1 -#define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos) -#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTCç½®ä½�æ—¶è‹¥TX FIFO是空的,则FTCç½®ä½� -#define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos) - -typedef struct -{ - __IO uint32_t CLKDIV; //[15:0] 须将内部工作频率分到SCL频率的5å€�,å�³CLKDIV = SYS_Freq/5/SCL_Freq - 1 - - __IO uint32_t CTRL; - - __IO uint32_t MSTDAT; - - __IO uint32_t MSTCMD; - __IO uint32_t SLVCR; - - __IO uint32_t SLVIF; - - __IO uint32_t SLVTX; - - __IO uint32_t SLVRX; +#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI¹¤×÷ʱÖÓ = SYS_Freq/pow(2, CLKDIV+2) +#define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos) +#define SPI_CTRL_EN_Pos 3 +#define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos) +#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, ȡֵ3--15£¬±íʾ4--16λ +#define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos) +#define SPI_CTRL_CPHA_Pos 8 //0 ÔÚSCLKµÄµÚÒ»¸öÌø±äÑØ²ÉÑùÊý¾Ý 1 ÔÚSCLKµÄµÚ¶þ¸öÌø±äÑØ²ÉÑùÊý¾Ý +#define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos) +#define SPI_CTRL_CPOL_Pos 9 //0 ¿ÕÏÐ״̬ÏÂSCLKΪµÍµçƽ 1 ¿ÕÏÐ״̬ÏÂSCLKΪ¸ßµçƽ +#define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos) +#define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 SPI 3 SPI +#define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos) +#define SPI_CTRL_MSTR_Pos 12 //Master, 1 Ö÷ģʽ 0 ´Óģʽ +#define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos) +#define SPI_CTRL_FAST_Pos 13 //1 SPI¹¤×÷ʱÖÓ = SYS_Freq/2 0 SPI¹¤×÷ʱÖÓÓÉSPI->CTRL.CLKDIVÉèÖà +#define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos) +#define SPI_CTRL_FILTE_Pos 16 //1 ¶ÔSPIÊäÈëÐźŽøÐÐÈ¥¶¶²Ù×÷ 0 ¶ÔSPIÊäÈëÐźŲ»½øÐÐÈ¥¶¶²Ù×÷ +#define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos) +#define SPI_CTRL_SSN_H_Pos 17 //0 ´«Êä¹ý³ÌÖÐSSNʼÖÕΪ0 1 ´«Êä¹ý³ÌÖÐÿ×Ö·ûÖ®¼ä»á½«SSNÀ­¸ß°ë¸öSCLKÖÜÆÚ +#define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos) +#define SPI_CTRL_TFCLR_Pos 24 //TX FIFO Clear +#define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos) +#define SPI_CTRL_RFCLR_Pos 25 //RX FIFO Clear +#define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos) + +#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete£¬Ã¿´«ÊäÍê³ÉÒ»¸öÊý¾Ý×ÖÓÉÓ²¼þÖÃ1£¬Èí¼þд1ÇåÁã +#define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos) +#define SPI_STAT_TFE_Pos 1 //·¢ËÍFIFO Empty +#define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos) +#define SPI_STAT_TFNF_Pos 2 //·¢ËÍFIFO Not Full +#define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos) +#define SPI_STAT_RFNE_Pos 3 //½ÓÊÕFIFO Not Empty +#define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos) +#define SPI_STAT_RFF_Pos 4 //½ÓÊÕFIFO Full +#define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos) +#define SPI_STAT_RFOVF_Pos 5 //½ÓÊÕFIFO Overflow +#define SPI_STAT_RFOVF_Msk (0x01 << SPI_STAT_RFOVF_Pos) +#define SPI_STAT_TFLVL_Pos 6 //·¢ËÍFIFOÖÐÊý¾Ý¸öÊý£¬ 0 TFNF=0ʱ±íʾFIFOÄÚÓÐ8¸öÊý¾Ý£¬TFNF=1ʱ±íʾFIFOÄÚÓÐ0¸öÊý¾Ý 1--7 FIFOÄÚÓÐ1--7¸öÊý¾Ý +#define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos) +#define SPI_STAT_RFLVL_Pos 9 //½ÓÊÕFIFOÖÐÊý¾Ý¸öÊý£¬ 0 RFF=1ʱ±íʾFIFOÄÚÓÐ8¸öÊý¾Ý£¬ RFF=0ʱ±íʾFIFOÄÚÓÐ0¸öÊý¾Ý 1--7 FIFOÄÚÓÐ1--7¸öÊý¾Ý +#define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos) +#define SPI_STAT_BUSY_Pos 15 +#define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos) + +#define SPI_IE_RFOVF_Pos 0 +#define SPI_IE_RFOVF_Msk (0x01 << SPI_IE_RFOVF_Pos) +#define SPI_IE_RFF_Pos 1 +#define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos) +#define SPI_IE_RFHF_Pos 2 +#define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos) +#define SPI_IE_TFE_Pos 3 +#define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos) +#define SPI_IE_TFHF_Pos 4 +#define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos) +#define SPI_IE_WTC_Pos 8 //Word Transmit Complete +#define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos) +#define SPI_IE_FTC_Pos 9 //Frame Transmit Complete +#define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos) + +#define SPI_IF_RFOVF_Pos 0 //д1ÇåÁã +#define SPI_IF_RFOVF_Msk (0x01 << SPI_IF_RFOVF_Pos) +#define SPI_IF_RFF_Pos 1 +#define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos) +#define SPI_IF_RFHF_Pos 2 +#define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos) +#define SPI_IF_TFE_Pos 3 +#define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos) +#define SPI_IF_TFHF_Pos 4 +#define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos) +#define SPI_IF_WTC_Pos 8 //Word Transmit Complete£¬Ã¿´«ÊäÍê³ÉÒ»¸öÊý¾Ý×ÖÓÉÓ²¼þÖÃ1 +#define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos) +#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete£¬WTCÖÃλʱÈôTX FIFOÊǿյģ¬ÔòFTCÖÃλ +#define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos) + + + + +typedef struct { + __IO uint32_t CLKDIV; //[15:0] Ð뽫ÄÚ²¿¹¤×÷ƵÂÊ·Öµ½SCLƵÂʵÄ5±¶£¬¼´CLKDIV = SYS_Freq/5/SCL_Freq - 1 + + __IO uint32_t CTRL; + + __IO uint32_t MSTDAT; + + __IO uint32_t MSTCMD; + + __IO uint32_t SLVCR; + + __IO uint32_t SLVIF; + + __IO uint32_t SLVTX; + + __IO uint32_t SLVRX; } I2C_TypeDef; -#define I2C_CTRL_MSTIE_Pos 6 -#define I2C_CTRL_MSTIE_Msk (0x01 << I2C_CTRL_MSTIE_Pos) -#define I2C_CTRL_EN_Pos 7 -#define I2C_CTRL_EN_Msk (0x01 << I2C_CTRL_EN_Pos) - -#define I2C_MSTCMD_IF_Pos 0 //1 有等待处ç�†çš„中断,写1清零 有两ç§�情况下此ä½�硬件置ä½�:1ã€�一个字节传输完æˆ� 2ã€�总线访问æ�ƒä¸¢å¤± -#define I2C_MSTCMD_IF_Msk (0x01 << I2C_MSTCMD_IF_Pos) -#define I2C_MSTCMD_TIP_Pos 1 //Transmission In Process -#define I2C_MSTCMD_TIP_Msk (0x01 << I2C_MSTCMD_TIP_Pos) -#define I2C_MSTCMD_ACK_Pos 3 //接收模å¼�下,0 å�‘å�‘é€�端å��馈ACK 1 å�‘å�‘é€�端å��馈NACK -#define I2C_MSTCMD_ACK_Msk (0x01 << I2C_MSTCMD_ACK_Pos) -#define I2C_MSTCMD_WR_Pos 4 // å�‘Slave写数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 -#define I2C_MSTCMD_WR_Msk (0x01 << I2C_MSTCMD_WR_Pos) -#define I2C_MSTCMD_RD_Pos 5 //写:从Slave读数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 读:当I2C模å�—失去总线的访问æ�ƒæ—¶ç¡¬ä»¶ç½®1 -#define I2C_MSTCMD_RD_Msk (0x01 << I2C_MSTCMD_RD_Pos) -#define I2C_MSTCMD_BUSY_Pos 6 //读:当检测到START之å�Žï¼Œè¿™ä¸€ä½�å�˜1;当检测到STOP之å�Žï¼Œè¿™ä¸€ä½�å�˜0 -#define I2C_MSTCMD_BUSY_Msk (0x01 << I2C_MSTCMD_BUSY_Pos) -#define I2C_MSTCMD_STO_Pos 6 //写:产生STOP,自动清零 -#define I2C_MSTCMD_STO_Msk (0x01 << I2C_MSTCMD_STO_Pos) -#define I2C_MSTCMD_RXACK_Pos 7 //读:接收到的Slaveçš„ACKä½�,0 收到ACK 1 收到NACK -#define I2C_MSTCMD_RXACK_Msk (0x01 << I2C_MSTCMD_RXACK_Pos) -#define I2C_MSTCMD_STA_Pos 7 //写:产生START,自动清零 -#define I2C_MSTCMD_STA_Msk (0x01 << I2C_MSTCMD_STA_Pos) - -#define I2C_SLVCR_IM_RXEND_Pos 0 //接收完æˆ�中断ç¦�æ­¢ -#define I2C_SLVCR_IM_RXEND_Msk (0x01 << I2C_SLVCR_IM_RXEND_Pos) -#define I2C_SLVCR_IM_TXEND_Pos 1 //å�‘é€�完æˆ�中断ç¦�æ­¢ -#define I2C_SLVCR_IM_TXEND_Msk (0x01 << I2C_SLVCR_IM_TXEND_Pos) -#define I2C_SLVCR_IM_STADET_Pos 2 //检测到起始中断ç¦�æ­¢ -#define I2C_SLVCR_IM_STADET_Msk (0x01 << I2C_SLVCR_IM_STADET_Pos) -#define I2C_SLVCR_IM_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­ç¦�æ­¢ -#define I2C_SLVCR_IM_STODET_Msk (0x01 << I2C_SLVCR_IM_STODET_Pos) -#define I2C_SLVCR_IM_RDREQ_Pos 4 //接收到读请求中断ç¦�æ­¢ -#define I2C_SLVCR_IM_RDREQ_Msk (0x01 << I2C_SLVCR_IM_RDREQ_Pos) -#define I2C_SLVCR_IM_WRREQ_Pos 5 //接收到写请求中断ç¦�æ­¢ -#define I2C_SLVCR_IM_WRREQ_Msk (0x01 << I2C_SLVCR_IM_WRREQ_Pos) -#define I2C_SLVCR_ADDR7b_Pos 16 //1 7ä½�地å�€æ¨¡å¼� 0 10ä½�地å�€æ¨¡å¼� -#define I2C_SLVCR_ADDR7b_Msk (0x01 << I2C_SLVCR_ADDR7b_Pos) -#define I2C_SLVCR_ACK_Pos 17 //1 应答ACK 0 应答NACK -#define I2C_SLVCR_ACK_Msk (0x01 << I2C_SLVCR_ACK_Pos) -#define I2C_SLVCR_SLAVE_Pos 18 //1 从机模å¼� 0 主机模å¼� -#define I2C_SLVCR_SLAVE_Msk (0x01 << I2C_SLVCR_SLAVE_Pos) -#define I2C_SLVCR_DEBOUNCE_Pos 19 //去抖动使能 -#define I2C_SLVCR_DEBOUNCE_Msk (0x01 << I2C_SLVCR_DEBOUNCE_Pos) -#define I2C_SLVCR_ADDR_Pos 20 //从机地å�€ -#define I2C_SLVCR_ADDR_Msk (0x3FF << I2C_SLVCR_ADDR_Pos) - -#define I2C_SLVIF_RXEND_Pos 0 //接收完æˆ�中断标志,写1清零 -#define I2C_SLVIF_RXEND_Msk (0x01 << I2C_SLVIF_RXEND_Pos) -#define I2C_SLVIF_TXEND_Pos 1 //å�‘é€�完æˆ�中断标志,写1清零 -#define I2C_SLVIF_TXEND_Msk (0x01 << I2C_SLVIF_TXEND_Pos) -#define I2C_SLVIF_STADET_Pos 2 //检测到起始中断标志,写1清零 -#define I2C_SLVIF_STADET_Msk (0x01 << I2C_SLVIF_STADET_Pos) -#define I2C_SLVIF_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­æ ‡å¿—,写1清零 -#define I2C_SLVIF_STODET_Msk (0x01 << I2C_SLVIF_STODET_Pos) -#define I2C_SLVIF_RDREQ_Pos 4 //接收到读请求中断标志 -#define I2C_SLVIF_RDREQ_Msk (0x01 << I2C_SLVIF_RDREQ_Pos) -#define I2C_SLVIF_WRREQ_Pos 5 //接收到写请求中断标志 -#define I2C_SLVIF_WRREQ_Msk (0x01 << I2C_SLVIF_WRREQ_Pos) -#define I2C_SLVIF_ACTIVE_Pos 6 //slave 有效 -#define I2C_SLVIF_ACTIVE_Msk (0x01 << I2C_SLVIF_ACTIVE_Pos) - -typedef struct -{ - __IO uint32_t CTRL; - - __IO uint32_t START; - - __IO uint32_t IE; - - __IO uint32_t IF; - - struct - { - __IO uint32_t STAT; - - __IO uint32_t DATA; - uint32_t RESERVED[2]; - } CH[8]; - - __IO uint32_t CTRL1; - - __IO uint32_t CTRL2; - - uint32_t RESERVED[2]; - - __IO uint32_t CALIBSET; - - __IO uint32_t CALIBEN; +#define I2C_CTRL_MSTIE_Pos 6 +#define I2C_CTRL_MSTIE_Msk (0x01 << I2C_CTRL_MSTIE_Pos) +#define I2C_CTRL_EN_Pos 7 +#define I2C_CTRL_EN_Msk (0x01 << I2C_CTRL_EN_Pos) + +#define I2C_MSTCMD_IF_Pos 0 //1 Óеȴý´¦ÀíµÄÖжϣ¬Ð´1ÇåÁã ÓÐÁ½ÖÖÇé¿öÏ´ËλӲ¼þÖÃλ£º1¡¢Ò»¸ö×Ö½Ú´«ÊäÍê³É 2¡¢×ÜÏß·ÃÎÊȨ¶ªÊ§ +#define I2C_MSTCMD_IF_Msk (0x01 << I2C_MSTCMD_IF_Pos) +#define I2C_MSTCMD_TIP_Pos 1 //Transmission In Process +#define I2C_MSTCMD_TIP_Msk (0x01 << I2C_MSTCMD_TIP_Pos) +#define I2C_MSTCMD_ACK_Pos 3 //½ÓÊÕģʽÏ£¬0 Ïò·¢ËͶ˷´À¡ACK 1 Ïò·¢ËͶ˷´À¡NACK +#define I2C_MSTCMD_ACK_Msk (0x01 << I2C_MSTCMD_ACK_Pos) +#define I2C_MSTCMD_WR_Pos 4 // ÏòSlaveдÊý¾Ýʱ£¬°ÑÕâһλд1£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_WR_Msk (0x01 << I2C_MSTCMD_WR_Pos) +#define I2C_MSTCMD_RD_Pos 5 //д£º´ÓSlave¶ÁÊý¾Ýʱ£¬°ÑÕâһλд1£¬×Ô¶¯ÇåÁã ¶Á£ºµ±I2CÄ£¿éʧȥ×ÜÏߵķÃÎÊȨʱӲ¼þÖÃ1 +#define I2C_MSTCMD_RD_Msk (0x01 << I2C_MSTCMD_RD_Pos) +#define I2C_MSTCMD_BUSY_Pos 6 //¶Á£ºµ±¼ì²âµ½STARTÖ®ºó£¬Õâһλ±ä1£»µ±¼ì²âµ½STOPÖ®ºó£¬Õâһλ±ä0 +#define I2C_MSTCMD_BUSY_Msk (0x01 << I2C_MSTCMD_BUSY_Pos) +#define I2C_MSTCMD_STO_Pos 6 //д£º²úÉúSTOP£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_STO_Msk (0x01 << I2C_MSTCMD_STO_Pos) +#define I2C_MSTCMD_RXACK_Pos 7 //¶Á£º½ÓÊÕµ½µÄSlaveµÄACK룬0 ÊÕµ½ACK 1 ÊÕµ½NACK +#define I2C_MSTCMD_RXACK_Msk (0x01 << I2C_MSTCMD_RXACK_Pos) +#define I2C_MSTCMD_STA_Pos 7 //д£º²úÉúSTART£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_STA_Msk (0x01 << I2C_MSTCMD_STA_Pos) + +#define I2C_SLVCR_IM_RXEND_Pos 0 //½ÓÊÕÍê³ÉÖжϽûÖ¹ +#define I2C_SLVCR_IM_RXEND_Msk (0x01 << I2C_SLVCR_IM_RXEND_Pos) +#define I2C_SLVCR_IM_TXEND_Pos 1 //·¢ËÍÍê³ÉÖжϽûÖ¹ +#define I2C_SLVCR_IM_TXEND_Msk (0x01 << I2C_SLVCR_IM_TXEND_Pos) +#define I2C_SLVCR_IM_STADET_Pos 2 //¼ì²âµ½ÆðʼÖжϽûÖ¹ +#define I2C_SLVCR_IM_STADET_Msk (0x01 << I2C_SLVCR_IM_STADET_Pos) +#define I2C_SLVCR_IM_STODET_Pos 3 //¼ì²âµ½Í£Ö¹ÖжϽûÖ¹ +#define I2C_SLVCR_IM_STODET_Msk (0x01 << I2C_SLVCR_IM_STODET_Pos) +#define I2C_SLVCR_IM_RDREQ_Pos 4 //½ÓÊÕµ½¶ÁÇëÇóÖжϽûÖ¹ +#define I2C_SLVCR_IM_RDREQ_Msk (0x01 << I2C_SLVCR_IM_RDREQ_Pos) +#define I2C_SLVCR_IM_WRREQ_Pos 5 //½ÓÊÕµ½Ð´ÇëÇóÖжϽûÖ¹ +#define I2C_SLVCR_IM_WRREQ_Msk (0x01 << I2C_SLVCR_IM_WRREQ_Pos) +#define I2C_SLVCR_ADDR7b_Pos 16 //1 7λµØÖ·Ä£Ê½ 0 10λµØÖ·Ä£Ê½ +#define I2C_SLVCR_ADDR7b_Msk (0x01 << I2C_SLVCR_ADDR7b_Pos) +#define I2C_SLVCR_ACK_Pos 17 //1 Ó¦´ðACK 0 Ó¦´ðNACK +#define I2C_SLVCR_ACK_Msk (0x01 << I2C_SLVCR_ACK_Pos) +#define I2C_SLVCR_SLAVE_Pos 18 //1 ´Ó»úģʽ 0 Ö÷»úģʽ +#define I2C_SLVCR_SLAVE_Msk (0x01 << I2C_SLVCR_SLAVE_Pos) +#define I2C_SLVCR_DEBOUNCE_Pos 19 //È¥¶¶¶¯Ê¹ÄÜ +#define I2C_SLVCR_DEBOUNCE_Msk (0x01 << I2C_SLVCR_DEBOUNCE_Pos) +#define I2C_SLVCR_ADDR_Pos 20 //´Ó»úµØÖ· +#define I2C_SLVCR_ADDR_Msk (0x3FF << I2C_SLVCR_ADDR_Pos) + +#define I2C_SLVIF_RXEND_Pos 0 //½ÓÊÕÍê³ÉÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_RXEND_Msk (0x01 << I2C_SLVIF_RXEND_Pos) +#define I2C_SLVIF_TXEND_Pos 1 //·¢ËÍÍê³ÉÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_TXEND_Msk (0x01 << I2C_SLVIF_TXEND_Pos) +#define I2C_SLVIF_STADET_Pos 2 //¼ì²âµ½ÆðʼÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_STADET_Msk (0x01 << I2C_SLVIF_STADET_Pos) +#define I2C_SLVIF_STODET_Pos 3 //¼ì²âµ½Í£Ö¹ÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_STODET_Msk (0x01 << I2C_SLVIF_STODET_Pos) +#define I2C_SLVIF_RDREQ_Pos 4 //½ÓÊÕµ½¶ÁÇëÇóÖжϱêÖ¾ +#define I2C_SLVIF_RDREQ_Msk (0x01 << I2C_SLVIF_RDREQ_Pos) +#define I2C_SLVIF_WRREQ_Pos 5 //½ÓÊÕµ½Ð´ÇëÇóÖжϱêÖ¾ +#define I2C_SLVIF_WRREQ_Msk (0x01 << I2C_SLVIF_WRREQ_Pos) +#define I2C_SLVIF_ACTIVE_Pos 6 //slave ÓÐЧ +#define I2C_SLVIF_ACTIVE_Msk (0x01 << I2C_SLVIF_ACTIVE_Pos) + + + + +typedef struct { + __IO uint32_t CTRL; + + __IO uint32_t START; + + __IO uint32_t IE; + + __IO uint32_t IF; + + struct { + __IO uint32_t STAT; + + __IO uint32_t DATA; + + uint32_t RESERVED[2]; + } CH[8]; + + __IO uint32_t CTRL1; + + __IO uint32_t CTRL2; + + uint32_t RESERVED[2]; + + __IO uint32_t CALIBSET; + + __IO uint32_t CALIBEN; } ADC_TypeDef; -#define ADC_CTRL_CH0_Pos 0 //通é�“选中 -#define ADC_CTRL_CH0_Msk (0x01 << ADC_CTRL_CH0_Pos) -#define ADC_CTRL_CH1_Pos 1 -#define ADC_CTRL_CH1_Msk (0x01 << ADC_CTRL_CH1_Pos) -#define ADC_CTRL_CH2_Pos 2 -#define ADC_CTRL_CH2_Msk (0x01 << ADC_CTRL_CH2_Pos) -#define ADC_CTRL_CH3_Pos 3 -#define ADC_CTRL_CH3_Msk (0x01 << ADC_CTRL_CH3_Pos) -#define ADC_CTRL_CH4_Pos 4 -#define ADC_CTRL_CH4_Msk (0x01 << ADC_CTRL_CH4_Pos) -#define ADC_CTRL_CH5_Pos 5 -#define ADC_CTRL_CH5_Msk (0x01 << ADC_CTRL_CH5_Pos) -#define ADC_CTRL_CH6_Pos 6 -#define ADC_CTRL_CH6_Msk (0x01 << ADC_CTRL_CH6_Pos) -#define ADC_CTRL_CH7_Pos 7 -#define ADC_CTRL_CH7_Msk (0x01 << ADC_CTRL_CH7_Pos) -#define ADC_CTRL_AVG_Pos 8 //0 1次采样 1 2次采样å�–å¹³å�‡å€¼ 3 4次采样å�–å¹³å�‡å€¼ 7 8次采样å�–å¹³å�‡å€¼ 15 16次采样å�–å¹³å�‡å€¼ -#define ADC_CTRL_AVG_Msk (0x0F << ADC_CTRL_AVG_Pos) -#define ADC_CTRL_EN_Pos 12 -#define ADC_CTRL_EN_Msk (0x01 << ADC_CTRL_EN_Pos) -#define ADC_CTRL_CONT_Pos 13 //Continuous conversion,å�ªåœ¨è½¯ä»¶å�¯åŠ¨æ¨¡å¼�下有效,0 å�•次转æ�¢ï¼Œè½¬æ�¢å®Œæˆ�å�ŽSTARTä½�自动清除å�œæ­¢è½¬æ�¢ -#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 连续转æ�¢ï¼Œå�¯åЍå�Žä¸€ç›´é‡‡æ ·ã€�转æ�¢ï¼Œç›´åˆ°è½¯ä»¶æ¸…除STARTä½� -#define ADC_CTRL_TRIG_Pos 14 //转æ�¢è§¦å�‘æ–¹å¼�:0 软件å�¯åŠ¨è½¬æ�¢ 1 PWM触å�‘ -#define ADC_CTRL_TRIG_Msk (0x01 << ADC_CTRL_TRIG_Pos) -#define ADC_CTRL_CLKSRC_Pos 15 //0 VCO 1 HRC -#define ADC_CTRL_CLKSRC_Msk (0x01 << ADC_CTRL_CLKSRC_Pos) -#define ADC_CTRL_FIFOCLR_Pos 24 //[24] CH0_FIFO_CLR [25] CH1_FIFO_CLR ... [31] CH7_FIFO_CLR -#define ADC_CTRL_FIFOCLR_Msk (0xFFu << ADC_CTRL_FIFOCLR_Pos) - -#define ADC_START_GO_Pos 0 //软件触å�‘模å¼�下,写1å�¯åЍADC采样和转æ�¢ï¼Œåœ¨å�•次模å¼�下转æ�¢å®Œæˆ�å�Žç¡¬ä»¶è‡ªåŠ¨æ¸…é›¶ï¼Œåœ¨æ‰«æ��模å¼�下必须软件写0å�œæ­¢ADC转æ�¢ -#define ADC_START_GO_Msk (0x01 << ADC_START_GO_Pos) -#define ADC_START_BUSY_Pos 4 -#define ADC_START_BUSY_Msk (0x01 << ADC_START_BUSY_Pos) - -#define ADC_IE_CH0EOC_Pos 0 //End Of Convertion -#define ADC_IE_CH0EOC_Msk (0x01 << ADC_IE_CH0EOC_Pos) -#define ADC_IE_CH0OVF_Pos 1 //Overflow -#define ADC_IE_CH0OVF_Msk (0x01 << ADC_IE_CH0OVF_Pos) -#define ADC_IE_CH0HFULL_Pos 2 //FIFO Half Full -#define ADC_IE_CH0HFULL_Msk (0x01 << ADC_IE_CH0HFULL_Pos) -#define ADC_IE_CH0FULL_Pos 3 //FIFO Full -#define ADC_IE_CH0FULL_Msk (0x01 << ADC_IE_CH0FULL_Pos) -#define ADC_IE_CH1EOC_Pos 4 -#define ADC_IE_CH1EOC_Msk (0x01 << ADC_IE_CH1EOC_Pos) -#define ADC_IE_CH1OVF_Pos 5 -#define ADC_IE_CH1OVF_Msk (0x01 << ADC_IE_CH1OVF_Pos) -#define ADC_IE_CH1HFULL_Pos 6 -#define ADC_IE_CH1HFULL_Msk (0x01 << ADC_IE_CH1HFULL_Pos) -#define ADC_IE_CH1FULL_Pos 7 -#define ADC_IE_CH1FULL_Msk (0x01 << ADC_IE_CH1FULL_Pos) -#define ADC_IE_CH2EOC_Pos 8 -#define ADC_IE_CH2EOC_Msk (0x01 << ADC_IE_CH2EOC_Pos) -#define ADC_IE_CH2OVF_Pos 9 -#define ADC_IE_CH2OVF_Msk (0x01 << ADC_IE_CH2OVF_Pos) -#define ADC_IE_CH2HFULL_Pos 10 -#define ADC_IE_CH2HFULL_Msk (0x01 << ADC_IE_CH2HFULL_Pos) -#define ADC_IE_CH2FULL_Pos 11 -#define ADC_IE_CH2FULL_Msk (0x01 << ADC_IE_CH2FULL_Pos) -#define ADC_IE_CH3EOC_Pos 12 -#define ADC_IE_CH3EOC_Msk (0x01 << ADC_IE_CH3EOC_Pos) -#define ADC_IE_CH3OVF_Pos 13 -#define ADC_IE_CH3OVF_Msk (0x01 << ADC_IE_CH3OVF_Pos) -#define ADC_IE_CH3HFULL_Pos 14 -#define ADC_IE_CH3HFULL_Msk (0x01 << ADC_IE_CH3HFULL_Pos) -#define ADC_IE_CH3FULL_Pos 15 -#define ADC_IE_CH3FULL_Msk (0x01 << ADC_IE_CH3FULL_Pos) -#define ADC_IE_CH4EOC_Pos 16 -#define ADC_IE_CH4EOC_Msk (0x01 << ADC_IE_CH4EOC_Pos) -#define ADC_IE_CH4OVF_Pos 17 -#define ADC_IE_CH4OVF_Msk (0x01 << ADC_IE_CH4OVF_Pos) -#define ADC_IE_CH4HFULL_Pos 18 -#define ADC_IE_CH4HFULL_Msk (0x01 << ADC_IE_CH4HFULL_Pos) -#define ADC_IE_CH4FULL_Pos 19 -#define ADC_IE_CH4FULL_Msk (0x01 << ADC_IE_CH4FULL_Pos) -#define ADC_IE_CH5EOC_Pos 20 -#define ADC_IE_CH5EOC_Msk (0x01 << ADC_IE_CH5EOC_Pos) -#define ADC_IE_CH5OVF_Pos 21 -#define ADC_IE_CH5OVF_Msk (0x01 << ADC_IE_CH5OVF_Pos) -#define ADC_IE_CH5HFULL_Pos 22 -#define ADC_IE_CH5HFULL_Msk (0x01 << ADC_IE_CH5HFULL_Pos) -#define ADC_IE_CH5FULL_Pos 23 -#define ADC_IE_CH5FULL_Msk (0x01 << ADC_IE_CH5FULL_Pos) -#define ADC_IE_CH6EOC_Pos 24 -#define ADC_IE_CH6EOC_Msk (0x01 << ADC_IE_CH6EOC_Pos) -#define ADC_IE_CH6OVF_Pos 25 -#define ADC_IE_CH6OVF_Msk (0x01 << ADC_IE_CH6OVF_Pos) -#define ADC_IE_CH6HFULL_Pos 26 -#define ADC_IE_CH6HFULL_Msk (0x01 << ADC_IE_CH6HFULL_Pos) -#define ADC_IE_CH6FULL_Pos 27 -#define ADC_IE_CH6FULL_Msk (0x01 << ADC_IE_CH6FULL_Pos) -#define ADC_IE_CH7EOC_Pos 28 -#define ADC_IE_CH7EOC_Msk (0x01 << ADC_IE_CH7EOC_Pos) -#define ADC_IE_CH7OVF_Pos 29 -#define ADC_IE_CH7OVF_Msk (0x01 << ADC_IE_CH7OVF_Pos) -#define ADC_IE_CH7HFULL_Pos 30 -#define ADC_IE_CH7HFULL_Msk (0x01 << ADC_IE_CH7HFULL_Pos) -#define ADC_IE_CH7FULL_Pos 31 -#define ADC_IE_CH7FULL_Msk (0x01u << ADC_IE_CH7FULL_Pos) - -#define ADC_IF_CH0EOC_Pos 0 //写1清零 -#define ADC_IF_CH0EOC_Msk (0x01 << ADC_IF_CH0EOC_Pos) -#define ADC_IF_CH0OVF_Pos 1 //写1清零 -#define ADC_IF_CH0OVF_Msk (0x01 << ADC_IF_CH0OVF_Pos) -#define ADC_IF_CH0HFULL_Pos 2 //写1清零 -#define ADC_IF_CH0HFULL_Msk (0x01 << ADC_IF_CH0HFULL_Pos) -#define ADC_IF_CH0FULL_Pos 3 //写1清零 -#define ADC_IF_CH0FULL_Msk (0x01 << ADC_IF_CH0FULL_Pos) -#define ADC_IF_CH1EOC_Pos 4 -#define ADC_IF_CH1EOC_Msk (0x01 << ADC_IF_CH1EOC_Pos) -#define ADC_IF_CH1OVF_Pos 5 -#define ADC_IF_CH1OVF_Msk (0x01 << ADC_IF_CH1OVF_Pos) -#define ADC_IF_CH1HFULL_Pos 6 -#define ADC_IF_CH1HFULL_Msk (0x01 << ADC_IF_CH1HFULL_Pos) -#define ADC_IF_CH1FULL_Pos 7 -#define ADC_IF_CH1FULL_Msk (0x01 << ADC_IF_CH1FULL_Pos) -#define ADC_IF_CH2EOC_Pos 8 -#define ADC_IF_CH2EOC_Msk (0x01 << ADC_IF_CH2EOC_Pos) -#define ADC_IF_CH2OVF_Pos 9 -#define ADC_IF_CH2OVF_Msk (0x01 << ADC_IF_CH2OVF_Pos) -#define ADC_IF_CH2HFULL_Pos 10 -#define ADC_IF_CH2HFULL_Msk (0x01 << ADC_IF_CH2HFULL_Pos) -#define ADC_IF_CH2FULL_Pos 11 -#define ADC_IF_CH2FULL_Msk (0x01 << ADC_IF_CH2FULL_Pos) -#define ADC_IF_CH3EOC_Pos 12 -#define ADC_IF_CH3EOC_Msk (0x01 << ADC_IF_CH3EOC_Pos) -#define ADC_IF_CH3OVF_Pos 13 -#define ADC_IF_CH3OVF_Msk (0x01 << ADC_IF_CH3OVF_Pos) -#define ADC_IF_CH3HFULL_Pos 14 -#define ADC_IF_CH3HFULL_Msk (0x01 << ADC_IF_CH3HFULL_Pos) -#define ADC_IF_CH3FULL_Pos 15 -#define ADC_IF_CH3FULL_Msk (0x01 << ADC_IF_CH3FULL_Pos) -#define ADC_IF_CH4EOC_Pos 16 -#define ADC_IF_CH4EOC_Msk (0x01 << ADC_IF_CH4EOC_Pos) -#define ADC_IF_CH4OVF_Pos 17 -#define ADC_IF_CH4OVF_Msk (0x01 << ADC_IF_CH4OVF_Pos) -#define ADC_IF_CH4HFULL_Pos 18 -#define ADC_IF_CH4HFULL_Msk (0x01 << ADC_IF_CH4HFULL_Pos) -#define ADC_IF_CH4FULL_Pos 19 -#define ADC_IF_CH4FULL_Msk (0x01 << ADC_IF_CH4FULL_Pos) -#define ADC_IF_CH5EOC_Pos 20 -#define ADC_IF_CH5EOC_Msk (0x01 << ADC_IF_CH5EOC_Pos) -#define ADC_IF_CH5OVF_Pos 21 -#define ADC_IF_CH5OVF_Msk (0x01 << ADC_IF_CH5OVF_Pos) -#define ADC_IF_CH5HFULL_Pos 22 -#define ADC_IF_CH5HFULL_Msk (0x01 << ADC_IF_CH5HFULL_Pos) -#define ADC_IF_CH5FULL_Pos 23 -#define ADC_IF_CH5FULL_Msk (0x01 << ADC_IF_CH5FULL_Pos) -#define ADC_IF_CH6EOC_Pos 24 -#define ADC_IF_CH6EOC_Msk (0x01 << ADC_IF_CH6EOC_Pos) -#define ADC_IF_CH6OVF_Pos 25 -#define ADC_IF_CH6OVF_Msk (0x01 << ADC_IF_CH6OVF_Pos) -#define ADC_IF_CH6HFULL_Pos 26 -#define ADC_IF_CH6HFULL_Msk (0x01 << ADC_IF_CH6HFULL_Pos) -#define ADC_IF_CH6FULL_Pos 27 -#define ADC_IF_CH6FULL_Msk (0x01 << ADC_IF_CH6FULL_Pos) -#define ADC_IF_CH7EOC_Pos 28 -#define ADC_IF_CH7EOC_Msk (0x01 << ADC_IF_CH7EOC_Pos) -#define ADC_IF_CH7OVF_Pos 29 -#define ADC_IF_CH7OVF_Msk (0x01 << ADC_IF_CH7OVF_Pos) -#define ADC_IF_CH7HFULL_Pos 30 -#define ADC_IF_CH7HFULL_Msk (0x01 << ADC_IF_CH7HFULL_Pos) -#define ADC_IF_CH7FULL_Pos 31 -#define ADC_IF_CH7FULL_Msk (0x01 << ADC_IF_CH7FULL_Pos) - -#define ADC_STAT_EOC_Pos 0 //写1清零 -#define ADC_STAT_EOC_Msk (0x01 << ADC_STAT_EOC_Pos) -#define ADC_STAT_OVF_Pos 1 //读数æ�®å¯„存器清除 -#define ADC_STAT_OVF_Msk (0x01 << ADC_STAT_OVF_Pos) -#define ADC_STAT_HFULL_Pos 2 -#define ADC_STAT_HFULL_Msk (0x01 << ADC_STAT_HFULL_Pos) -#define ADC_STAT_FULL_Pos 3 -#define ADC_STAT_FULL_Msk (0x01 << ADC_STAT_FULL_Pos) -#define ADC_STAT_EMPTY_Pos 4 -#define ADC_STAT_EMPTY_Msk (0x01 << ADC_STAT_EMPTY_Pos) - -#define ADC_CTRL1_RIN_Pos 4 //输入阻抗:0 无穷大 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K -#define ADC_CTRL1_RIN_Msk (0x07 << ADC_CTRL1_RIN_Pos) - -#define ADC_CTRL2_RESET_Pos 0 //数字电路å¤�ä½� -#define ADC_CTRL2_RESET_Msk (0x01 << ADC_CTRL2_RESET_Pos) -#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM,ADC与PGA输出共模电平选择 -#define ADC_CTRL2_ADCEVCM_Msk (0x01 << ADC_CTRL2_ADCEVCM_Pos) -#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM,PGA输入共模电平选择 -#define ADC_CTRL2_PGAIVCM_Msk (0x01 << ADC_CTRL2_PGAIVCM_Pos) -#define ADC_CTRL2_PGAGAIN_Pos 3 //0 25.1dB 1 21.6dB 2 11.1dB 3 3.5dB 4 0dB(1.8V) 5 -2.9dB 6 -5.3dB -#define ADC_CTRL2_PGAGAIN_Msk (0x07 << ADC_CTRL2_PGAGAIN_Pos) -#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC 内部 1.2V REFP电压输出到外部REFP引脚,用于测é‡�,或在需è¦�1.2V外部REFP时节çœ�æˆ�本 -#define ADC_CTRL2_REFPOUT_Msk (0x01 << ADC_CTRL2_REFPOUT_Pos -#define ADC_CTRL2_CLKDIV_Pos 24 //时钟分频,å�ªåœ¨æ—¶é’Ÿæº�为HRC时有效 -#define ADC_CTRL2_CLKDIV_Msk (0x1F << ADC_CTRL2_CLKDIV_Pos) -#define ADC_CTRL2_PGAVCM_Pos 29 -#define ADC_CTRL2_PGAVCM_Msk (0x07u << ADC_CTRL2_PGAVCM_Pos) - -#define ADC_CALIBSET_OFFSET_Pos 0 -#define ADC_CALIBSET_OFFSET_Msk (0x1FF << ADC_CALIBSET_OFFSET_Pos) -#define ADC_CALIBSET_K_Pos 16 -#define ADC_CALIBSET_K_Msk (0x1FF << ADC_CALIBSET_K_Pos) - -#define ADC_CALIBEN_OFFSET_Pos 0 -#define ADC_CALIBEN_OFFSET_Msk (0x01 << ADC_CALIBEN_OFFSET_Pos) -#define ADC_CALIBEN_K_Pos 1 -#define ADC_CALIBEN_K_Msk (0x01 << ADC_CALIBEN_K_Pos) - -typedef struct -{ - __IO uint32_t MODE; //0 普通模å¼�,Aã€�B两路输出互相独立 - //1 互补模å¼�,Aã€�B两路输出都由PERAã€�HIGHA控制,B路输出与A路输出æž�性相å��,且DZAã€�DZB控制Aã€�B路输出上å�‡æ²¿æŽ¨è¿Ÿæ—¶é—´ - //2 å�•次模å¼�,å�Œæ™®é€šæ¨¡å¼�,但一个周期å�Žè‡ªåЍå�œæ­¢ - //3 对称模å¼�,Aã€�B两路输出互相独立,以两个计数周期产生一个波形输出周期,分辨率æ��å�‡ä¸€å€�ã€�频率é™�低一å€� - //4 对称互补模å¼�,对称模å¼�和互补模å¼�的综å�ˆ - - __IO uint32_t PERA; //[15:0] 周期 - __IO uint32_t HIGHA; //[15:0] 高电平æŒ�ç»­æ—¶é•¿ - - __IO uint32_t DZA; //[9:0] 死区,å�³ä¸Šå�‡æ²¿æŽ¨è¿Ÿæ—¶é•¿ï¼Œå¿…é¡»å°�于HIGHA - - __IO uint32_t PERB; - - __IO uint32_t HIGHB; - - __IO uint32_t DZB; - - __IO uint32_t INIOUT; //Init Output level,åˆ�始输出电平 +#define ADC_CTRL_CH0_Pos 0 //ͨµÀÑ¡ÖÐ +#define ADC_CTRL_CH0_Msk (0x01 << ADC_CTRL_CH0_Pos) +#define ADC_CTRL_CH1_Pos 1 +#define ADC_CTRL_CH1_Msk (0x01 << ADC_CTRL_CH1_Pos) +#define ADC_CTRL_CH2_Pos 2 +#define ADC_CTRL_CH2_Msk (0x01 << ADC_CTRL_CH2_Pos) +#define ADC_CTRL_CH3_Pos 3 +#define ADC_CTRL_CH3_Msk (0x01 << ADC_CTRL_CH3_Pos) +#define ADC_CTRL_CH4_Pos 4 +#define ADC_CTRL_CH4_Msk (0x01 << ADC_CTRL_CH4_Pos) +#define ADC_CTRL_CH5_Pos 5 +#define ADC_CTRL_CH5_Msk (0x01 << ADC_CTRL_CH5_Pos) +#define ADC_CTRL_CH6_Pos 6 +#define ADC_CTRL_CH6_Msk (0x01 << ADC_CTRL_CH6_Pos) +#define ADC_CTRL_CH7_Pos 7 +#define ADC_CTRL_CH7_Msk (0x01 << ADC_CTRL_CH7_Pos) +#define ADC_CTRL_AVG_Pos 8 //0 1´Î²ÉÑù 1 2´Î²ÉÑùȡƽ¾ùÖµ 3 4´Î²ÉÑùȡƽ¾ùÖµ 7 8´Î²ÉÑùȡƽ¾ùÖµ 15 16´Î²ÉÑùȡƽ¾ùÖµ +#define ADC_CTRL_AVG_Msk (0x0F << ADC_CTRL_AVG_Pos) +#define ADC_CTRL_EN_Pos 12 +#define ADC_CTRL_EN_Msk (0x01 << ADC_CTRL_EN_Pos) +#define ADC_CTRL_CONT_Pos 13 //Continuous conversion£¬Ö»ÔÚÈí¼þÆô¶¯Ä£Ê½ÏÂÓÐЧ£¬0 µ¥´Îת»»£¬×ª»»Íê³ÉºóSTARTλ×Ô¶¯Çå³ýֹͣת»» +#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 Á¬Ðø×ª»»£¬Æô¶¯ºóÒ»Ö±²ÉÑù¡¢×ª»»£¬Ö±µ½Èí¼þÇå³ýSTARTλ +#define ADC_CTRL_TRIG_Pos 14 //ת»»´¥·¢·½Ê½£º0 Èí¼þÆô¶¯×ª»» 1 PWM´¥·¢ +#define ADC_CTRL_TRIG_Msk (0x01 << ADC_CTRL_TRIG_Pos) +#define ADC_CTRL_CLKSRC_Pos 15 //0 VCO 1 HRC +#define ADC_CTRL_CLKSRC_Msk (0x01 << ADC_CTRL_CLKSRC_Pos) +#define ADC_CTRL_FIFOCLR_Pos 24 //[24] CH0_FIFO_CLR [25] CH1_FIFO_CLR ... [31] CH7_FIFO_CLR +#define ADC_CTRL_FIFOCLR_Msk (0xFFu<< ADC_CTRL_FIFOCLR_Pos) + +#define ADC_START_GO_Pos 0 //Èí¼þ´¥·¢Ä£Ê½Ï£¬Ð´1Æô¶¯ADC²ÉÑùºÍת»»£¬ÔÚµ¥´ÎģʽÏÂת»»Íê³ÉºóÓ²¼þ×Ô¶¯ÇåÁ㣬ÔÚɨÃèģʽϱØÐëÈí¼þд0Í£Ö¹ADCת»» +#define ADC_START_GO_Msk (0x01 << ADC_START_GO_Pos) +#define ADC_START_BUSY_Pos 4 +#define ADC_START_BUSY_Msk (0x01 << ADC_START_BUSY_Pos) + +#define ADC_IE_CH0EOC_Pos 0 //End Of Convertion +#define ADC_IE_CH0EOC_Msk (0x01 << ADC_IE_CH0EOC_Pos) +#define ADC_IE_CH0OVF_Pos 1 //Overflow +#define ADC_IE_CH0OVF_Msk (0x01 << ADC_IE_CH0OVF_Pos) +#define ADC_IE_CH0HFULL_Pos 2 //FIFO Half Full +#define ADC_IE_CH0HFULL_Msk (0x01 << ADC_IE_CH0HFULL_Pos) +#define ADC_IE_CH0FULL_Pos 3 //FIFO Full +#define ADC_IE_CH0FULL_Msk (0x01 << ADC_IE_CH0FULL_Pos) +#define ADC_IE_CH1EOC_Pos 4 +#define ADC_IE_CH1EOC_Msk (0x01 << ADC_IE_CH1EOC_Pos) +#define ADC_IE_CH1OVF_Pos 5 +#define ADC_IE_CH1OVF_Msk (0x01 << ADC_IE_CH1OVF_Pos) +#define ADC_IE_CH1HFULL_Pos 6 +#define ADC_IE_CH1HFULL_Msk (0x01 << ADC_IE_CH1HFULL_Pos) +#define ADC_IE_CH1FULL_Pos 7 +#define ADC_IE_CH1FULL_Msk (0x01 << ADC_IE_CH1FULL_Pos) +#define ADC_IE_CH2EOC_Pos 8 +#define ADC_IE_CH2EOC_Msk (0x01 << ADC_IE_CH2EOC_Pos) +#define ADC_IE_CH2OVF_Pos 9 +#define ADC_IE_CH2OVF_Msk (0x01 << ADC_IE_CH2OVF_Pos) +#define ADC_IE_CH2HFULL_Pos 10 +#define ADC_IE_CH2HFULL_Msk (0x01 << ADC_IE_CH2HFULL_Pos) +#define ADC_IE_CH2FULL_Pos 11 +#define ADC_IE_CH2FULL_Msk (0x01 << ADC_IE_CH2FULL_Pos) +#define ADC_IE_CH3EOC_Pos 12 +#define ADC_IE_CH3EOC_Msk (0x01 << ADC_IE_CH3EOC_Pos) +#define ADC_IE_CH3OVF_Pos 13 +#define ADC_IE_CH3OVF_Msk (0x01 << ADC_IE_CH3OVF_Pos) +#define ADC_IE_CH3HFULL_Pos 14 +#define ADC_IE_CH3HFULL_Msk (0x01 << ADC_IE_CH3HFULL_Pos) +#define ADC_IE_CH3FULL_Pos 15 +#define ADC_IE_CH3FULL_Msk (0x01 << ADC_IE_CH3FULL_Pos) +#define ADC_IE_CH4EOC_Pos 16 +#define ADC_IE_CH4EOC_Msk (0x01 << ADC_IE_CH4EOC_Pos) +#define ADC_IE_CH4OVF_Pos 17 +#define ADC_IE_CH4OVF_Msk (0x01 << ADC_IE_CH4OVF_Pos) +#define ADC_IE_CH4HFULL_Pos 18 +#define ADC_IE_CH4HFULL_Msk (0x01 << ADC_IE_CH4HFULL_Pos) +#define ADC_IE_CH4FULL_Pos 19 +#define ADC_IE_CH4FULL_Msk (0x01 << ADC_IE_CH4FULL_Pos) +#define ADC_IE_CH5EOC_Pos 20 +#define ADC_IE_CH5EOC_Msk (0x01 << ADC_IE_CH5EOC_Pos) +#define ADC_IE_CH5OVF_Pos 21 +#define ADC_IE_CH5OVF_Msk (0x01 << ADC_IE_CH5OVF_Pos) +#define ADC_IE_CH5HFULL_Pos 22 +#define ADC_IE_CH5HFULL_Msk (0x01 << ADC_IE_CH5HFULL_Pos) +#define ADC_IE_CH5FULL_Pos 23 +#define ADC_IE_CH5FULL_Msk (0x01 << ADC_IE_CH5FULL_Pos) +#define ADC_IE_CH6EOC_Pos 24 +#define ADC_IE_CH6EOC_Msk (0x01 << ADC_IE_CH6EOC_Pos) +#define ADC_IE_CH6OVF_Pos 25 +#define ADC_IE_CH6OVF_Msk (0x01 << ADC_IE_CH6OVF_Pos) +#define ADC_IE_CH6HFULL_Pos 26 +#define ADC_IE_CH6HFULL_Msk (0x01 << ADC_IE_CH6HFULL_Pos) +#define ADC_IE_CH6FULL_Pos 27 +#define ADC_IE_CH6FULL_Msk (0x01 << ADC_IE_CH6FULL_Pos) +#define ADC_IE_CH7EOC_Pos 28 +#define ADC_IE_CH7EOC_Msk (0x01 << ADC_IE_CH7EOC_Pos) +#define ADC_IE_CH7OVF_Pos 29 +#define ADC_IE_CH7OVF_Msk (0x01 << ADC_IE_CH7OVF_Pos) +#define ADC_IE_CH7HFULL_Pos 30 +#define ADC_IE_CH7HFULL_Msk (0x01 << ADC_IE_CH7HFULL_Pos) +#define ADC_IE_CH7FULL_Pos 31 +#define ADC_IE_CH7FULL_Msk (0x01u<< ADC_IE_CH7FULL_Pos) + +#define ADC_IF_CH0EOC_Pos 0 //д1ÇåÁã +#define ADC_IF_CH0EOC_Msk (0x01 << ADC_IF_CH0EOC_Pos) +#define ADC_IF_CH0OVF_Pos 1 //д1ÇåÁã +#define ADC_IF_CH0OVF_Msk (0x01 << ADC_IF_CH0OVF_Pos) +#define ADC_IF_CH0HFULL_Pos 2 //д1ÇåÁã +#define ADC_IF_CH0HFULL_Msk (0x01 << ADC_IF_CH0HFULL_Pos) +#define ADC_IF_CH0FULL_Pos 3 //д1ÇåÁã +#define ADC_IF_CH0FULL_Msk (0x01 << ADC_IF_CH0FULL_Pos) +#define ADC_IF_CH1EOC_Pos 4 +#define ADC_IF_CH1EOC_Msk (0x01 << ADC_IF_CH1EOC_Pos) +#define ADC_IF_CH1OVF_Pos 5 +#define ADC_IF_CH1OVF_Msk (0x01 << ADC_IF_CH1OVF_Pos) +#define ADC_IF_CH1HFULL_Pos 6 +#define ADC_IF_CH1HFULL_Msk (0x01 << ADC_IF_CH1HFULL_Pos) +#define ADC_IF_CH1FULL_Pos 7 +#define ADC_IF_CH1FULL_Msk (0x01 << ADC_IF_CH1FULL_Pos) +#define ADC_IF_CH2EOC_Pos 8 +#define ADC_IF_CH2EOC_Msk (0x01 << ADC_IF_CH2EOC_Pos) +#define ADC_IF_CH2OVF_Pos 9 +#define ADC_IF_CH2OVF_Msk (0x01 << ADC_IF_CH2OVF_Pos) +#define ADC_IF_CH2HFULL_Pos 10 +#define ADC_IF_CH2HFULL_Msk (0x01 << ADC_IF_CH2HFULL_Pos) +#define ADC_IF_CH2FULL_Pos 11 +#define ADC_IF_CH2FULL_Msk (0x01 << ADC_IF_CH2FULL_Pos) +#define ADC_IF_CH3EOC_Pos 12 +#define ADC_IF_CH3EOC_Msk (0x01 << ADC_IF_CH3EOC_Pos) +#define ADC_IF_CH3OVF_Pos 13 +#define ADC_IF_CH3OVF_Msk (0x01 << ADC_IF_CH3OVF_Pos) +#define ADC_IF_CH3HFULL_Pos 14 +#define ADC_IF_CH3HFULL_Msk (0x01 << ADC_IF_CH3HFULL_Pos) +#define ADC_IF_CH3FULL_Pos 15 +#define ADC_IF_CH3FULL_Msk (0x01 << ADC_IF_CH3FULL_Pos) +#define ADC_IF_CH4EOC_Pos 16 +#define ADC_IF_CH4EOC_Msk (0x01 << ADC_IF_CH4EOC_Pos) +#define ADC_IF_CH4OVF_Pos 17 +#define ADC_IF_CH4OVF_Msk (0x01 << ADC_IF_CH4OVF_Pos) +#define ADC_IF_CH4HFULL_Pos 18 +#define ADC_IF_CH4HFULL_Msk (0x01 << ADC_IF_CH4HFULL_Pos) +#define ADC_IF_CH4FULL_Pos 19 +#define ADC_IF_CH4FULL_Msk (0x01 << ADC_IF_CH4FULL_Pos) +#define ADC_IF_CH5EOC_Pos 20 +#define ADC_IF_CH5EOC_Msk (0x01 << ADC_IF_CH5EOC_Pos) +#define ADC_IF_CH5OVF_Pos 21 +#define ADC_IF_CH5OVF_Msk (0x01 << ADC_IF_CH5OVF_Pos) +#define ADC_IF_CH5HFULL_Pos 22 +#define ADC_IF_CH5HFULL_Msk (0x01 << ADC_IF_CH5HFULL_Pos) +#define ADC_IF_CH5FULL_Pos 23 +#define ADC_IF_CH5FULL_Msk (0x01 << ADC_IF_CH5FULL_Pos) +#define ADC_IF_CH6EOC_Pos 24 +#define ADC_IF_CH6EOC_Msk (0x01 << ADC_IF_CH6EOC_Pos) +#define ADC_IF_CH6OVF_Pos 25 +#define ADC_IF_CH6OVF_Msk (0x01 << ADC_IF_CH6OVF_Pos) +#define ADC_IF_CH6HFULL_Pos 26 +#define ADC_IF_CH6HFULL_Msk (0x01 << ADC_IF_CH6HFULL_Pos) +#define ADC_IF_CH6FULL_Pos 27 +#define ADC_IF_CH6FULL_Msk (0x01 << ADC_IF_CH6FULL_Pos) +#define ADC_IF_CH7EOC_Pos 28 +#define ADC_IF_CH7EOC_Msk (0x01 << ADC_IF_CH7EOC_Pos) +#define ADC_IF_CH7OVF_Pos 29 +#define ADC_IF_CH7OVF_Msk (0x01 << ADC_IF_CH7OVF_Pos) +#define ADC_IF_CH7HFULL_Pos 30 +#define ADC_IF_CH7HFULL_Msk (0x01 << ADC_IF_CH7HFULL_Pos) +#define ADC_IF_CH7FULL_Pos 31 +#define ADC_IF_CH7FULL_Msk (0x01 << ADC_IF_CH7FULL_Pos) + +#define ADC_STAT_EOC_Pos 0 //д1ÇåÁã +#define ADC_STAT_EOC_Msk (0x01 << ADC_STAT_EOC_Pos) +#define ADC_STAT_OVF_Pos 1 //¶ÁÊý¾Ý¼Ä´æÆ÷Çå³ý +#define ADC_STAT_OVF_Msk (0x01 << ADC_STAT_OVF_Pos) +#define ADC_STAT_HFULL_Pos 2 +#define ADC_STAT_HFULL_Msk (0x01 << ADC_STAT_HFULL_Pos) +#define ADC_STAT_FULL_Pos 3 +#define ADC_STAT_FULL_Msk (0x01 << ADC_STAT_FULL_Pos) +#define ADC_STAT_EMPTY_Pos 4 +#define ADC_STAT_EMPTY_Msk (0x01 << ADC_STAT_EMPTY_Pos) + +#define ADC_CTRL1_RIN_Pos 4 //ÊäÈë×迹£º0 ÎÞÇî´ó 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K +#define ADC_CTRL1_RIN_Msk (0x07 << ADC_CTRL1_RIN_Pos) + +#define ADC_CTRL2_RESET_Pos 0 //Êý×ֵ緸´Î» +#define ADC_CTRL2_RESET_Msk (0x01 << ADC_CTRL2_RESET_Pos) +#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM£¬ADCÓëPGAÊä³ö¹²Ä£µçƽѡÔñ +#define ADC_CTRL2_ADCEVCM_Msk (0x01 << ADC_CTRL2_ADCEVCM_Pos) +#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM£¬PGAÊäÈ빲ģµçƽѡÔñ +#define ADC_CTRL2_PGAIVCM_Msk (0x01 << ADC_CTRL2_PGAIVCM_Pos) +#define ADC_CTRL2_PGAGAIN_Pos 3 //0 25.1dB 1 21.6dB 2 11.1dB 3 3.5dB 4 0dB(1.8V) 5 -2.9dB 6 -5.3dB +#define ADC_CTRL2_PGAGAIN_Msk (0x07 << ADC_CTRL2_PGAGAIN_Pos) +#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC ÄÚ²¿ 1.2V REFPµçѹÊä³öµ½ÍⲿREFPÒý½Å£¬ÓÃÓÚ²âÁ¿£¬»òÔÚÐèÒª1.2VÍⲿREFPʱ½ÚÊ¡³É±¾ +#define ADC_CTRL2_REFPOUT_Msk (0x01 << ADC_CTRL2_REFPOUT_Pos +#define ADC_CTRL2_CLKDIV_Pos 24 //ʱÖÓ·ÖÆµ£¬Ö»ÔÚʱÖÓԴΪHRCʱÓÐЧ +#define ADC_CTRL2_CLKDIV_Msk (0x1F << ADC_CTRL2_CLKDIV_Pos) +#define ADC_CTRL2_PGAVCM_Pos 29 +#define ADC_CTRL2_PGAVCM_Msk (0x07u<< ADC_CTRL2_PGAVCM_Pos) + +#define ADC_CALIBSET_OFFSET_Pos 0 +#define ADC_CALIBSET_OFFSET_Msk (0x1FF<< ADC_CALIBSET_OFFSET_Pos) +#define ADC_CALIBSET_K_Pos 16 +#define ADC_CALIBSET_K_Msk (0x1FF<< ADC_CALIBSET_K_Pos) + +#define ADC_CALIBEN_OFFSET_Pos 0 +#define ADC_CALIBEN_OFFSET_Msk (0x01 << ADC_CALIBEN_OFFSET_Pos) +#define ADC_CALIBEN_K_Pos 1 +#define ADC_CALIBEN_K_Msk (0x01 << ADC_CALIBEN_K_Pos) + + + + +typedef struct { + __IO uint32_t MODE; //0 ÆÕͨģʽ£¬A¡¢BÁ½Â·Êä³ö»¥Ïà¶ÀÁ¢ + //1 »¥²¹Ä£Ê½£¬A¡¢BÁ½Â·Êä³ö¶¼ÓÉPERA¡¢HIGHA¿ØÖÆ£¬B·Êä³öÓëA·Êä³ö¼«ÐÔÏà·´£¬ÇÒDZA¡¢DZB¿ØÖÆA¡¢B·Êä³öÉÏÉýÑØÍÆ³Ùʱ¼ä + //2 µ¥´Îģʽ£¬Í¬ÆÕͨģʽ£¬µ«Ò»¸öÖÜÆÚºó×Ô¶¯Í£Ö¹ + //3 ¶Ô³ÆÄ£Ê½£¬A¡¢BÁ½Â·Êä³ö»¥Ïà¶ÀÁ¢£¬ÒÔÁ½¸ö¼ÆÊýÖÜÆÚ²úÉúÒ»¸ö²¨ÐÎÊä³öÖÜÆÚ£¬·Ö±æÂÊÌáÉýÒ»±¶¡¢ÆµÂʽµµÍÒ»±¶ + //4 ¶Ô³Æ»¥²¹Ä£Ê½£¬¶Ô³ÆÄ£Ê½ºÍ»¥²¹Ä£Ê½µÄ×ÛºÏ + + __IO uint32_t PERA; //[15:0] ÖÜÆÚ + + __IO uint32_t HIGHA; //[15:0] ¸ßµçƽ³ÖÐøÊ±³¤ + + __IO uint32_t DZA; //[9:0] ËÀÇø£¬¼´ÉÏÉýÑØÍÆ³Ùʱ³¤£¬±ØÐëСÓÚHIGHA + + __IO uint32_t PERB; + + __IO uint32_t HIGHB; + + __IO uint32_t DZB; + + __IO uint32_t INIOUT; //Init Output level£¬³õʼÊä³öµçƽ } PWM_TypeDef; -#define PWM_INIOUT_PWMA_Pos 0 -#define PWM_INIOUT_PWMA_Msk (0x01 << PWM_INIOUT_PWMA_Pos) -#define PWM_INIOUT_PWMB_Pos 1 -#define PWM_INIOUT_PWMB_Msk (0x01 << PWM_INIOUT_PWMB_Pos) -typedef struct -{ - __IO uint32_t FORCEH; +#define PWM_INIOUT_PWMA_Pos 0 +#define PWM_INIOUT_PWMA_Msk (0x01 << PWM_INIOUT_PWMA_Pos) +#define PWM_INIOUT_PWMB_Pos 1 +#define PWM_INIOUT_PWMB_Msk (0x01 << PWM_INIOUT_PWMB_Pos) + +typedef struct { + __IO uint32_t FORCEH; + __IO uint32_t ADTRG0A; __IO uint32_t ADTRG0B; - + __IO uint32_t ADTRG1A; __IO uint32_t ADTRG1B; - + __IO uint32_t ADTRG2A; __IO uint32_t ADTRG2B; - + __IO uint32_t ADTRG3A; __IO uint32_t ADTRG3B; - + __IO uint32_t ADTRG4A; __IO uint32_t ADTRG4B; - + __IO uint32_t ADTRG5A; - __IO uint32_t ADTRG5B; - - uint32_t RESERVED[3]; - - __IO uint32_t HALT; //刹车控制 - - __IO uint32_t CHEN; - - __IO uint32_t IE; - - __IO uint32_t IF; - - __IO uint32_t IM; //Interrupt Mask - - __IO uint32_t IRS; //Interrupt Raw Stat + __IO uint32_t ADTRG5B; + + uint32_t RESERVED[3]; + + __IO uint32_t HALT; //ɲ³µ¿ØÖÆ + + __IO uint32_t CHEN; + + __IO uint32_t IE; + + __IO uint32_t IF; + + __IO uint32_t IM; //Interrupt Mask + + __IO uint32_t IRS; //Interrupt Raw Stat } PWMG_TypeDef; -#define PWMG_FORCEH_PWM0_Pos 0 -#define PWMG_FORCEH_PWM0_Msk (0x01 << PWMG_FORCEH_PWM0_Pos) -#define PWMG_FORCEH_PWM1_Pos 1 -#define PWMG_FORCEH_PWM1_Msk (0x01 << PWMG_FORCEH_PWM1_Pos) -#define PWMG_FORCEH_PWM2_Pos 2 -#define PWMG_FORCEH_PWM2_Msk (0x01 << PWMG_FORCEH_PWM2_Pos) -#define PWMG_FORCEH_PWM3_Pos 3 -#define PWMG_FORCEH_PWM3_Msk (0x01 << PWMG_FORCEH_PWM3_Pos) -#define PWMG_FORCEH_PWM4_Pos 4 -#define PWMG_FORCEH_PWM4_Msk (0x01 << PWMG_FORCEH_PWM4_Pos) -#define PWMG_FORCEH_PWM5_Pos 5 -#define PWMG_FORCEH_PWM5_Msk (0x01 << PWMG_FORCEH_PWM5_Pos) - -#define PWMG_ADTRG_VALUE_Pos 0 -#define PWMG_ADTRG_VALUE_Msk (0xFFFF << PWMG_ADTRG0A_VALUE_Pos) -#define PWMG_ADTRG_EVEN_Pos 16 //1 å�¶æ•°å‘¨æœŸç”Ÿæ•ˆ 0 奇数周期生效 -#define PWMG_ADTRG_EVEN_Msk (0x01 << PWMG_ADTRG0A_EVEN_Pos) -#define PWMG_ADTRG_EN_Pos 17 -#define PWMG_ADTRG_EN_Msk (0x01 << PWMG_ADTRG0A_EN_Pos) - -#define PWMG_HALT_EN_Pos 0 -#define PWMG_HALT_EN_Msk (0x01 << PWMG_HALT_EN_Pos) -#define PWMG_HALT_PWM0_Pos 1 -#define PWMG_HALT_PWM0_Msk (0x01 << PWMG_HALT_PWM0_Pos) -#define PWMG_HALT_PWM1_Pos 2 -#define PWMG_HALT_PWM1_Msk (0x01 << PWMG_HALT_PWM1_Pos) -#define PWMG_HALT_PWM2_Pos 3 -#define PWMG_HALT_PWM2_Msk (0x01 << PWMG_HALT_PWM2_Pos) -#define PWMG_HALT_PWM3_Pos 4 -#define PWMG_HALT_PWM3_Msk (0x01 << PWMG_HALT_PWM3_Pos) -#define PWMG_HALT_PWM4_Pos 5 -#define PWMG_HALT_PWM4_Msk (0x01 << PWMG_HALT_PWM4_Pos) -#define PWMG_HALT_PWM5_Pos 6 -#define PWMG_HALT_PWM5_Msk (0x01 << PWMG_HALT_PWM5_Pos) -#define PWMG_HALT_STOPCNT_Pos 7 //1 刹车时将PWM计数器清零,å�œæ­¢è®¡æ•° 0 刹车时,PWM计数器继续计数 -#define PWMG_HALT_STOPCNT_Msk (0x01 << PWMG_HALT_STOPCNT_Pos) -#define PWMG_HALT_INLVL_Pos 8 //1 刹车输入高电平有效 -#define PWMG_HALT_INLVL_Msk (0x01 << PWMG_HALT_INLVL_Pos) -#define PWMG_HALT_OUTLVL_Pos 9 //1 刹车过程中输出高电平 -#define PWMG_HALT_OUTLVL_Msk (0x01 << PWMG_HALT_OUTLVL_Pos) -#define PWMG_HALT_STAT_Pos 10 //1 正在刹车 -#define PWMG_HALT_STAT_Msk (0x01 << PWMG_HALT_STAT_Pos) - -#define PWMG_CHEN_PWM0A_Pos 0 -#define PWMG_CHEN_PWM0A_Msk (0x01 << PWMG_CHEN_PWM0A_Pos) -#define PWMG_CHEN_PWM0B_Pos 1 -#define PWMG_CHEN_PWM0B_Msk (0x01 << PWMG_CHEN_PWM0B_Pos) -#define PWMG_CHEN_PWM1A_Pos 2 -#define PWMG_CHEN_PWM1A_Msk (0x01 << PWMG_CHEN_PWM1A_Pos) -#define PWMG_CHEN_PWM1B_Pos 3 -#define PWMG_CHEN_PWM1B_Msk (0x01 << PWMG_CHEN_PWM1B_Pos) -#define PWMG_CHEN_PWM2A_Pos 4 -#define PWMG_CHEN_PWM2A_Msk (0x01 << PWMG_CHEN_PWM2A_Pos) -#define PWMG_CHEN_PWM2B_Pos 5 -#define PWMG_CHEN_PWM2B_Msk (0x01 << PWMG_CHEN_PWM2B_Pos) -#define PWMG_CHEN_PWM3A_Pos 6 -#define PWMG_CHEN_PWM3A_Msk (0x01 << PWMG_CHEN_PWM3A_Pos) -#define PWMG_CHEN_PWM3B_Pos 7 -#define PWMG_CHEN_PWM3B_Msk (0x01 << PWMG_CHEN_PWM3B_Pos) -#define PWMG_CHEN_PWM4A_Pos 8 -#define PWMG_CHEN_PWM4A_Msk (0x01 << PWMG_CHEN_PWM4A_Pos) -#define PWMG_CHEN_PWM4B_Pos 9 -#define PWMG_CHEN_PWM4B_Msk (0x01 << PWMG_CHEN_PWM4B_Pos) -#define PWMG_CHEN_PWM5A_Pos 10 -#define PWMG_CHEN_PWM5A_Msk (0x01 << PWMG_CHEN_PWM5A_Pos) -#define PWMG_CHEN_PWM5B_Pos 11 -#define PWMG_CHEN_PWM5B_Msk (0x01 << PWMG_CHEN_PWM5B_Pos) - -#define PWMG_IE_NEWP0A_Pos 0 -#define PWMG_IE_NEWP0A_Msk (0x01 << PWMG_IE_NEWP0A_Pos) -#define PWMG_IE_NEWP0B_Pos 1 -#define PWMG_IE_NEWP0B_Msk (0x01 << PWMG_IE_NEWP0B_Pos) -#define PWMG_IE_NEWP1A_Pos 2 -#define PWMG_IE_NEWP1A_Msk (0x01 << PWMG_IE_NEWP1A_Pos) -#define PWMG_IE_NEWP1B_Pos 3 -#define PWMG_IE_NEWP1B_Msk (0x01 << PWMG_IE_NEWP1B_Pos) -#define PWMG_IE_NEWP2A_Pos 4 -#define PWMG_IE_NEWP2A_Msk (0x01 << PWMG_IE_NEWP2A_Pos) -#define PWMG_IE_NEWP2B_Pos 5 -#define PWMG_IE_NEWP2B_Msk (0x01 << PWMG_IE_NEWP2B_Pos) -#define PWMG_IE_NEWP3A_Pos 6 -#define PWMG_IE_NEWP3A_Msk (0x01 << PWMG_IE_NEWP3A_Pos) -#define PWMG_IE_NEWP3B_Pos 7 -#define PWMG_IE_NEWP3B_Msk (0x01 << PWMG_IE_NEWP3B_Pos) -#define PWMG_IE_NEWP4A_Pos 8 -#define PWMG_IE_NEWP4A_Msk (0x01 << PWMG_IE_NEWP4A_Pos) -#define PWMG_IE_NEWP4B_Pos 9 -#define PWMG_IE_NEWP4B_Msk (0x01 << PWMG_IE_NEWP4B_Pos) -#define PWMG_IE_NEWP5A_Pos 10 -#define PWMG_IE_NEWP5A_Msk (0x01 << PWMG_IE_NEWP5A_Pos) -#define PWMG_IE_NEWP5B_Pos 11 -#define PWMG_IE_NEWP5B_Msk (0x01 << PWMG_IE_NEWP5B_Pos) -#define PWMG_IE_HEND0A_Pos 12 -#define PWMG_IE_HEND0A_Msk (0x01 << PWMG_IE_HEND0A_Pos) -#define PWMG_IE_HEND0B_Pos 13 -#define PWMG_IE_HEND0B_Msk (0x01 << PWMG_IE_HEND0B_Pos) -#define PWMG_IE_HEND1A_Pos 14 -#define PWMG_IE_HEND1A_Msk (0x01 << PWMG_IE_HEND1A_Pos) -#define PWMG_IE_HEND1B_Pos 15 -#define PWMG_IE_HEND1B_Msk (0x01 << PWMG_IE_HEND1B_Pos) -#define PWMG_IE_HEND2A_Pos 16 -#define PWMG_IE_HEND2A_Msk (0x01 << PWMG_IE_HEND2A_Pos) -#define PWMG_IE_HEND2B_Pos 17 -#define PWMG_IE_HEND2B_Msk (0x01 << PWMG_IE_HEND2B_Pos) -#define PWMG_IE_HEND3A_Pos 18 -#define PWMG_IE_HEND3A_Msk (0x01 << PWMG_IE_HEND3A_Pos) -#define PWMG_IE_HEND3B_Pos 19 -#define PWMG_IE_HEND3B_Msk (0x01 << PWMG_IE_HEND3B_Pos) -#define PWMG_IE_HEND4A_Pos 20 -#define PWMG_IE_HEND4A_Msk (0x01 << PWMG_IE_HEND4A_Pos) -#define PWMG_IE_HEND4B_Pos 21 -#define PWMG_IE_HEND4B_Msk (0x01 << PWMG_IE_HEND4B_Pos) -#define PWMG_IE_HEND5A_Pos 22 -#define PWMG_IE_HEND5A_Msk (0x01 << PWMG_IE_HEND5A_Pos) -#define PWMG_IE_HEND5B_Pos 23 -#define PWMG_IE_HEND5B_Msk (0x01 << PWMG_IE_HEND5B_Pos) -#define PWMG_IE_HALT_Pos 24 -#define PWMG_IE_HALT_Msk (0x01 << PWMG_IE_HALT_Pos) - -#define PWMG_IF_NEWP0A_Pos 0 -#define PWMG_IF_NEWP0A_Msk (0x01 << PWMG_IF_NEWP0A_Pos) -#define PWMG_IF_NEWP0B_Pos 1 -#define PWMG_IF_NEWP0B_Msk (0x01 << PWMG_IF_NEWP0B_Pos) -#define PWMG_IF_NEWP1A_Pos 2 -#define PWMG_IF_NEWP1A_Msk (0x01 << PWMG_IF_NEWP1A_Pos) -#define PWMG_IF_NEWP1B_Pos 3 -#define PWMG_IF_NEWP1B_Msk (0x01 << PWMG_IF_NEWP1B_Pos) -#define PWMG_IF_NEWP2A_Pos 4 -#define PWMG_IF_NEWP2A_Msk (0x01 << PWMG_IF_NEWP2A_Pos) -#define PWMG_IF_NEWP2B_Pos 5 -#define PWMG_IF_NEWP2B_Msk (0x01 << PWMG_IF_NEWP2B_Pos) -#define PWMG_IF_NEWP3A_Pos 6 -#define PWMG_IF_NEWP3A_Msk (0x01 << PWMG_IF_NEWP3A_Pos) -#define PWMG_IF_NEWP3B_Pos 7 -#define PWMG_IF_NEWP3B_Msk (0x01 << PWMG_IF_NEWP3B_Pos) -#define PWMG_IF_NEWP4A_Pos 8 -#define PWMG_IF_NEWP4A_Msk (0x01 << PWMG_IF_NEWP4A_Pos) -#define PWMG_IF_NEWP4B_Pos 9 -#define PWMG_IF_NEWP4B_Msk (0x01 << PWMG_IF_NEWP4B_Pos) -#define PWMG_IF_NEWP5A_Pos 10 -#define PWMG_IF_NEWP5A_Msk (0x01 << PWMG_IF_NEWP5A_Pos) -#define PWMG_IF_NEWP5B_Pos 11 -#define PWMG_IF_NEWP5B_Msk (0x01 << PWMG_IF_NEWP5B_Pos) -#define PWMG_IF_HEND0A_Pos 12 -#define PWMG_IF_HEND0A_Msk (0x01 << PWMG_IF_HEND0A_Pos) -#define PWMG_IF_HEND0B_Pos 13 -#define PWMG_IF_HEND0B_Msk (0x01 << PWMG_IF_HEND0B_Pos) -#define PWMG_IF_HEND1A_Pos 14 -#define PWMG_IF_HEND1A_Msk (0x01 << PWMG_IF_HEND1A_Pos) -#define PWMG_IF_HEND1B_Pos 15 -#define PWMG_IF_HEND1B_Msk (0x01 << PWMG_IF_HEND1B_Pos) -#define PWMG_IF_HEND2A_Pos 16 -#define PWMG_IF_HEND2A_Msk (0x01 << PWMG_IF_HEND2A_Pos) -#define PWMG_IF_HEND2B_Pos 17 -#define PWMG_IF_HEND2B_Msk (0x01 << PWMG_IF_HEND2B_Pos) -#define PWMG_IF_HEND3A_Pos 18 -#define PWMG_IF_HEND3A_Msk (0x01 << PWMG_IF_HEND3A_Pos) -#define PWMG_IF_HEND3B_Pos 19 -#define PWMG_IF_HEND3B_Msk (0x01 << PWMG_IF_HEND3B_Pos) -#define PWMG_IF_HEND4A_Pos 20 -#define PWMG_IF_HEND4A_Msk (0x01 << PWMG_IF_HEND4A_Pos) -#define PWMG_IF_HEND4B_Pos 21 -#define PWMG_IF_HEND4B_Msk (0x01 << PWMG_IF_HEND4B_Pos) -#define PWMG_IF_HEND5A_Pos 22 -#define PWMG_IF_HEND5A_Msk (0x01 << PWMG_IF_HEND5A_Pos) -#define PWMG_IF_HEND5B_Pos 23 -#define PWMG_IF_HEND5B_Msk (0x01 << PWMG_IF_HEND5B_Pos) -#define PWMG_IF_HALT_Pos 24 -#define PWMG_IF_HALT_Msk (0x01 << PWMG_IF_HALT_Pos) - -#define PWMG_IM_NEWP0A_Pos 0 //Interrupt Mask -#define PWMG_IM_NEWP0A_Msk (0x01 << PWMG_IM_NEWP0A_Pos) -#define PWMG_IM_NEWP0B_Pos 1 -#define PWMG_IM_NEWP0B_Msk (0x01 << PWMG_IM_NEWP0B_Pos) -#define PWMG_IM_NEWP1A_Pos 2 -#define PWMG_IM_NEWP1A_Msk (0x01 << PWMG_IM_NEWP1A_Pos) -#define PWMG_IM_NEWP1B_Pos 3 -#define PWMG_IM_NEWP1B_Msk (0x01 << PWMG_IM_NEWP1B_Pos) -#define PWMG_IM_NEWP2A_Pos 4 -#define PWMG_IM_NEWP2A_Msk (0x01 << PWMG_IM_NEWP2A_Pos) -#define PWMG_IM_NEWP2B_Pos 5 -#define PWMG_IM_NEWP2B_Msk (0x01 << PWMG_IM_NEWP2B_Pos) -#define PWMG_IM_NEWP3A_Pos 6 -#define PWMG_IM_NEWP3A_Msk (0x01 << PWMG_IM_NEWP3A_Pos) -#define PWMG_IM_NEWP3B_Pos 7 -#define PWMG_IM_NEWP3B_Msk (0x01 << PWMG_IM_NEWP3B_Pos) -#define PWMG_IM_NEWP4A_Pos 8 -#define PWMG_IM_NEWP4A_Msk (0x01 << PWMG_IM_NEWP4A_Pos) -#define PWMG_IM_NEWP4B_Pos 9 -#define PWMG_IM_NEWP4B_Msk (0x01 << PWMG_IM_NEWP4B_Pos) -#define PWMG_IM_NEWP5A_Pos 10 -#define PWMG_IM_NEWP5A_Msk (0x01 << PWMG_IM_NEWP5A_Pos) -#define PWMG_IM_NEWP5B_Pos 11 -#define PWMG_IM_NEWP5B_Msk (0x01 << PWMG_IM_NEWP5B_Pos) -#define PWMG_IM_HEND0A_Pos 12 -#define PWMG_IM_HEND0A_Msk (0x01 << PWMG_IM_HEND0A_Pos) -#define PWMG_IM_HEND0B_Pos 13 -#define PWMG_IM_HEND0B_Msk (0x01 << PWMG_IM_HEND0B_Pos) -#define PWMG_IM_HEND1A_Pos 14 -#define PWMG_IM_HEND1A_Msk (0x01 << PWMG_IM_HEND1A_Pos) -#define PWMG_IM_HEND1B_Pos 15 -#define PWMG_IM_HEND1B_Msk (0x01 << PWMG_IM_HEND1B_Pos) -#define PWMG_IM_HEND2A_Pos 16 -#define PWMG_IM_HEND2A_Msk (0x01 << PWMG_IM_HEND2A_Pos) -#define PWMG_IM_HEND2B_Pos 17 -#define PWMG_IM_HEND2B_Msk (0x01 << PWMG_IM_HEND2B_Pos) -#define PWMG_IM_HEND3A_Pos 18 -#define PWMG_IM_HEND3A_Msk (0x01 << PWMG_IM_HEND3A_Pos) -#define PWMG_IM_HEND3B_Pos 19 -#define PWMG_IM_HEND3B_Msk (0x01 << PWMG_IM_HEND3B_Pos) -#define PWMG_IM_HEND4A_Pos 20 -#define PWMG_IM_HEND4A_Msk (0x01 << PWMG_IM_HEND4A_Pos) -#define PWMG_IM_HEND4B_Pos 21 -#define PWMG_IM_HEND4B_Msk (0x01 << PWMG_IM_HEND4B_Pos) -#define PWMG_IM_HEND5A_Pos 22 -#define PWMG_IM_HEND5A_Msk (0x01 << PWMG_IM_HEND5A_Pos) -#define PWMG_IM_HEND5B_Pos 23 -#define PWMG_IM_HEND5B_Msk (0x01 << PWMG_IM_HEND5B_Pos) -#define PWMG_IM_HALT_Pos 24 -#define PWMG_IM_HALT_Msk (0x01 << PWMG_IM_HALT_Pos) - -#define PWMG_IRS_NEWP0A_Pos 0 //Interrupt Raw State -#define PWMG_IRS_NEWP0A_Msk (0x01 << PWMG_IRS_NEWP0A_Pos) -#define PWMG_IRS_NEWP0B_Pos 1 -#define PWMG_IRS_NEWP0B_Msk (0x01 << PWMG_IRS_NEWP0B_Pos) -#define PWMG_IRS_NEWP1A_Pos 2 -#define PWMG_IRS_NEWP1A_Msk (0x01 << PWMG_IRS_NEWP1A_Pos) -#define PWMG_IRS_NEWP1B_Pos 3 -#define PWMG_IRS_NEWP1B_Msk (0x01 << PWMG_IRS_NEWP1B_Pos) -#define PWMG_IRS_NEWP2A_Pos 4 -#define PWMG_IRS_NEWP2A_Msk (0x01 << PWMG_IRS_NEWP2A_Pos) -#define PWMG_IRS_NEWP2B_Pos 5 -#define PWMG_IRS_NEWP2B_Msk (0x01 << PWMG_IRS_NEWP2B_Pos) -#define PWMG_IRS_NEWP3A_Pos 6 -#define PWMG_IRS_NEWP3A_Msk (0x01 << PWMG_IRS_NEWP3A_Pos) -#define PWMG_IRS_NEWP3B_Pos 7 -#define PWMG_IRS_NEWP3B_Msk (0x01 << PWMG_IRS_NEWP3B_Pos) -#define PWMG_IRS_NEWP4A_Pos 8 -#define PWMG_IRS_NEWP4A_Msk (0x01 << PWMG_IRS_NEWP4A_Pos) -#define PWMG_IRS_NEWP4B_Pos 9 -#define PWMG_IRS_NEWP4B_Msk (0x01 << PWMG_IRS_NEWP4B_Pos) -#define PWMG_IRS_NEWP5A_Pos 10 -#define PWMG_IRS_NEWP5A_Msk (0x01 << PWMG_IRS_NEWP5A_Pos) -#define PWMG_IRS_NEWP5B_Pos 11 -#define PWMG_IRS_NEWP5B_Msk (0x01 << PWMG_IRS_NEWP5B_Pos) -#define PWMG_IRS_HEND0A_Pos 12 -#define PWMG_IRS_HEND0A_Msk (0x01 << PWMG_IRS_HEND0A_Pos) -#define PWMG_IRS_HEND0B_Pos 13 -#define PWMG_IRS_HEND0B_Msk (0x01 << PWMG_IRS_HEND0B_Pos) -#define PWMG_IRS_HEND1A_Pos 14 -#define PWMG_IRS_HEND1A_Msk (0x01 << PWMG_IRS_HEND1A_Pos) -#define PWMG_IRS_HEND1B_Pos 15 -#define PWMG_IRS_HEND1B_Msk (0x01 << PWMG_IRS_HEND1B_Pos) -#define PWMG_IRS_HEND2A_Pos 16 -#define PWMG_IRS_HEND2A_Msk (0x01 << PWMG_IRS_HEND2A_Pos) -#define PWMG_IRS_HEND2B_Pos 17 -#define PWMG_IRS_HEND2B_Msk (0x01 << PWMG_IRS_HEND2B_Pos) -#define PWMG_IRS_HEND3A_Pos 18 -#define PWMG_IRS_HEND3A_Msk (0x01 << PWMG_IRS_HEND3A_Pos) -#define PWMG_IRS_HEND3B_Pos 19 -#define PWMG_IRS_HEND3B_Msk (0x01 << PWMG_IRS_HEND3B_Pos) -#define PWMG_IRS_HEND4A_Pos 20 -#define PWMG_IRS_HEND4A_Msk (0x01 << PWMG_IRS_HEND4A_Pos) -#define PWMG_IRS_HEND4B_Pos 21 -#define PWMG_IRS_HEND4B_Msk (0x01 << PWMG_IRS_HEND4B_Pos) -#define PWMG_IRS_HEND5A_Pos 22 -#define PWMG_IRS_HEND5A_Msk (0x01 << PWMG_IRS_HEND5A_Pos) -#define PWMG_IRS_HEND5B_Pos 23 -#define PWMG_IRS_HEND5B_Msk (0x01 << PWMG_IRS_HEND5B_Pos) -#define PWMG_IRS_HALT_Pos 24 -#define PWMG_IRS_HALT_Msk (0x01 << PWMG_IRS_HALT_Pos) - -typedef struct -{ - __IO uint32_t EN; //[0] ENABLE - - __IO uint32_t IE; //å�ªæœ‰ä¸º1时,IF[CHx]在DMA传输结æ�Ÿæ—¶æ‰�能å�˜ä¸º1,å�¦åˆ™å°†ä¸€ç›´ä¿�æŒ�在0 - - __IO uint32_t IM; //当为1时,å�³ä½¿IF[CHx]为1,dma_int也ä¸�会因此å�˜1 - - __IO uint32_t IF; //写1清零 - - uint32_t RESERVED[12]; - - struct - { - __IO uint32_t CR; - - __IO uint32_t AM; //Adress Mode - - __IO uint32_t SRC; - - __IO uint32_t SRCSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DST; - - __IO uint32_t DSTSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 - uint32_t RESERVED[4]; - } CH[3]; +#define PWMG_FORCEH_PWM0_Pos 0 +#define PWMG_FORCEH_PWM0_Msk (0x01 << PWMG_FORCEH_PWM0_Pos) +#define PWMG_FORCEH_PWM1_Pos 1 +#define PWMG_FORCEH_PWM1_Msk (0x01 << PWMG_FORCEH_PWM1_Pos) +#define PWMG_FORCEH_PWM2_Pos 2 +#define PWMG_FORCEH_PWM2_Msk (0x01 << PWMG_FORCEH_PWM2_Pos) +#define PWMG_FORCEH_PWM3_Pos 3 +#define PWMG_FORCEH_PWM3_Msk (0x01 << PWMG_FORCEH_PWM3_Pos) +#define PWMG_FORCEH_PWM4_Pos 4 +#define PWMG_FORCEH_PWM4_Msk (0x01 << PWMG_FORCEH_PWM4_Pos) +#define PWMG_FORCEH_PWM5_Pos 5 +#define PWMG_FORCEH_PWM5_Msk (0x01 << PWMG_FORCEH_PWM5_Pos) + +#define PWMG_ADTRG_VALUE_Pos 0 +#define PWMG_ADTRG_VALUE_Msk (0xFFFF << PWMG_ADTRG0A_VALUE_Pos) +#define PWMG_ADTRG_EVEN_Pos 16 //1 żÊýÖÜÆÚÉúЧ 0 ÆæÊýÖÜÆÚÉúЧ +#define PWMG_ADTRG_EVEN_Msk (0x01 << PWMG_ADTRG0A_EVEN_Pos) +#define PWMG_ADTRG_EN_Pos 17 +#define PWMG_ADTRG_EN_Msk (0x01 << PWMG_ADTRG0A_EN_Pos) + +#define PWMG_HALT_EN_Pos 0 +#define PWMG_HALT_EN_Msk (0x01 << PWMG_HALT_EN_Pos) +#define PWMG_HALT_PWM0_Pos 1 +#define PWMG_HALT_PWM0_Msk (0x01 << PWMG_HALT_PWM0_Pos) +#define PWMG_HALT_PWM1_Pos 2 +#define PWMG_HALT_PWM1_Msk (0x01 << PWMG_HALT_PWM1_Pos) +#define PWMG_HALT_PWM2_Pos 3 +#define PWMG_HALT_PWM2_Msk (0x01 << PWMG_HALT_PWM2_Pos) +#define PWMG_HALT_PWM3_Pos 4 +#define PWMG_HALT_PWM3_Msk (0x01 << PWMG_HALT_PWM3_Pos) +#define PWMG_HALT_PWM4_Pos 5 +#define PWMG_HALT_PWM4_Msk (0x01 << PWMG_HALT_PWM4_Pos) +#define PWMG_HALT_PWM5_Pos 6 +#define PWMG_HALT_PWM5_Msk (0x01 << PWMG_HALT_PWM5_Pos) +#define PWMG_HALT_STOPCNT_Pos 7 //1 ɲ³µÊ±½«PWM¼ÆÊýÆ÷ÇåÁ㣬ֹͣ¼ÆÊý 0 ɲ³µÊ±£¬PWM¼ÆÊýÆ÷¼ÌÐø¼ÆÊý +#define PWMG_HALT_STOPCNT_Msk (0x01 << PWMG_HALT_STOPCNT_Pos) +#define PWMG_HALT_INLVL_Pos 8 //1 ɲ³µÊäÈë¸ßµçƽÓÐЧ +#define PWMG_HALT_INLVL_Msk (0x01 << PWMG_HALT_INLVL_Pos) +#define PWMG_HALT_OUTLVL_Pos 9 //1 ɲ³µ¹ý³ÌÖÐÊä³ö¸ßµçƽ +#define PWMG_HALT_OUTLVL_Msk (0x01 << PWMG_HALT_OUTLVL_Pos) +#define PWMG_HALT_STAT_Pos 10 //1 ÕýÔÚɲ³µ +#define PWMG_HALT_STAT_Msk (0x01 << PWMG_HALT_STAT_Pos) + +#define PWMG_CHEN_PWM0A_Pos 0 +#define PWMG_CHEN_PWM0A_Msk (0x01 << PWMG_CHEN_PWM0A_Pos) +#define PWMG_CHEN_PWM0B_Pos 1 +#define PWMG_CHEN_PWM0B_Msk (0x01 << PWMG_CHEN_PWM0B_Pos) +#define PWMG_CHEN_PWM1A_Pos 2 +#define PWMG_CHEN_PWM1A_Msk (0x01 << PWMG_CHEN_PWM1A_Pos) +#define PWMG_CHEN_PWM1B_Pos 3 +#define PWMG_CHEN_PWM1B_Msk (0x01 << PWMG_CHEN_PWM1B_Pos) +#define PWMG_CHEN_PWM2A_Pos 4 +#define PWMG_CHEN_PWM2A_Msk (0x01 << PWMG_CHEN_PWM2A_Pos) +#define PWMG_CHEN_PWM2B_Pos 5 +#define PWMG_CHEN_PWM2B_Msk (0x01 << PWMG_CHEN_PWM2B_Pos) +#define PWMG_CHEN_PWM3A_Pos 6 +#define PWMG_CHEN_PWM3A_Msk (0x01 << PWMG_CHEN_PWM3A_Pos) +#define PWMG_CHEN_PWM3B_Pos 7 +#define PWMG_CHEN_PWM3B_Msk (0x01 << PWMG_CHEN_PWM3B_Pos) +#define PWMG_CHEN_PWM4A_Pos 8 +#define PWMG_CHEN_PWM4A_Msk (0x01 << PWMG_CHEN_PWM4A_Pos) +#define PWMG_CHEN_PWM4B_Pos 9 +#define PWMG_CHEN_PWM4B_Msk (0x01 << PWMG_CHEN_PWM4B_Pos) +#define PWMG_CHEN_PWM5A_Pos 10 +#define PWMG_CHEN_PWM5A_Msk (0x01 << PWMG_CHEN_PWM5A_Pos) +#define PWMG_CHEN_PWM5B_Pos 11 +#define PWMG_CHEN_PWM5B_Msk (0x01 << PWMG_CHEN_PWM5B_Pos) + + +#define PWMG_IE_NEWP0A_Pos 0 +#define PWMG_IE_NEWP0A_Msk (0x01 << PWMG_IE_NEWP0A_Pos) +#define PWMG_IE_NEWP0B_Pos 1 +#define PWMG_IE_NEWP0B_Msk (0x01 << PWMG_IE_NEWP0B_Pos) +#define PWMG_IE_NEWP1A_Pos 2 +#define PWMG_IE_NEWP1A_Msk (0x01 << PWMG_IE_NEWP1A_Pos) +#define PWMG_IE_NEWP1B_Pos 3 +#define PWMG_IE_NEWP1B_Msk (0x01 << PWMG_IE_NEWP1B_Pos) +#define PWMG_IE_NEWP2A_Pos 4 +#define PWMG_IE_NEWP2A_Msk (0x01 << PWMG_IE_NEWP2A_Pos) +#define PWMG_IE_NEWP2B_Pos 5 +#define PWMG_IE_NEWP2B_Msk (0x01 << PWMG_IE_NEWP2B_Pos) +#define PWMG_IE_NEWP3A_Pos 6 +#define PWMG_IE_NEWP3A_Msk (0x01 << PWMG_IE_NEWP3A_Pos) +#define PWMG_IE_NEWP3B_Pos 7 +#define PWMG_IE_NEWP3B_Msk (0x01 << PWMG_IE_NEWP3B_Pos) +#define PWMG_IE_NEWP4A_Pos 8 +#define PWMG_IE_NEWP4A_Msk (0x01 << PWMG_IE_NEWP4A_Pos) +#define PWMG_IE_NEWP4B_Pos 9 +#define PWMG_IE_NEWP4B_Msk (0x01 << PWMG_IE_NEWP4B_Pos) +#define PWMG_IE_NEWP5A_Pos 10 +#define PWMG_IE_NEWP5A_Msk (0x01 << PWMG_IE_NEWP5A_Pos) +#define PWMG_IE_NEWP5B_Pos 11 +#define PWMG_IE_NEWP5B_Msk (0x01 << PWMG_IE_NEWP5B_Pos) +#define PWMG_IE_HEND0A_Pos 12 +#define PWMG_IE_HEND0A_Msk (0x01 << PWMG_IE_HEND0A_Pos) +#define PWMG_IE_HEND0B_Pos 13 +#define PWMG_IE_HEND0B_Msk (0x01 << PWMG_IE_HEND0B_Pos) +#define PWMG_IE_HEND1A_Pos 14 +#define PWMG_IE_HEND1A_Msk (0x01 << PWMG_IE_HEND1A_Pos) +#define PWMG_IE_HEND1B_Pos 15 +#define PWMG_IE_HEND1B_Msk (0x01 << PWMG_IE_HEND1B_Pos) +#define PWMG_IE_HEND2A_Pos 16 +#define PWMG_IE_HEND2A_Msk (0x01 << PWMG_IE_HEND2A_Pos) +#define PWMG_IE_HEND2B_Pos 17 +#define PWMG_IE_HEND2B_Msk (0x01 << PWMG_IE_HEND2B_Pos) +#define PWMG_IE_HEND3A_Pos 18 +#define PWMG_IE_HEND3A_Msk (0x01 << PWMG_IE_HEND3A_Pos) +#define PWMG_IE_HEND3B_Pos 19 +#define PWMG_IE_HEND3B_Msk (0x01 << PWMG_IE_HEND3B_Pos) +#define PWMG_IE_HEND4A_Pos 20 +#define PWMG_IE_HEND4A_Msk (0x01 << PWMG_IE_HEND4A_Pos) +#define PWMG_IE_HEND4B_Pos 21 +#define PWMG_IE_HEND4B_Msk (0x01 << PWMG_IE_HEND4B_Pos) +#define PWMG_IE_HEND5A_Pos 22 +#define PWMG_IE_HEND5A_Msk (0x01 << PWMG_IE_HEND5A_Pos) +#define PWMG_IE_HEND5B_Pos 23 +#define PWMG_IE_HEND5B_Msk (0x01 << PWMG_IE_HEND5B_Pos) +#define PWMG_IE_HALT_Pos 24 +#define PWMG_IE_HALT_Msk (0x01 << PWMG_IE_HALT_Pos) + +#define PWMG_IF_NEWP0A_Pos 0 +#define PWMG_IF_NEWP0A_Msk (0x01 << PWMG_IF_NEWP0A_Pos) +#define PWMG_IF_NEWP0B_Pos 1 +#define PWMG_IF_NEWP0B_Msk (0x01 << PWMG_IF_NEWP0B_Pos) +#define PWMG_IF_NEWP1A_Pos 2 +#define PWMG_IF_NEWP1A_Msk (0x01 << PWMG_IF_NEWP1A_Pos) +#define PWMG_IF_NEWP1B_Pos 3 +#define PWMG_IF_NEWP1B_Msk (0x01 << PWMG_IF_NEWP1B_Pos) +#define PWMG_IF_NEWP2A_Pos 4 +#define PWMG_IF_NEWP2A_Msk (0x01 << PWMG_IF_NEWP2A_Pos) +#define PWMG_IF_NEWP2B_Pos 5 +#define PWMG_IF_NEWP2B_Msk (0x01 << PWMG_IF_NEWP2B_Pos) +#define PWMG_IF_NEWP3A_Pos 6 +#define PWMG_IF_NEWP3A_Msk (0x01 << PWMG_IF_NEWP3A_Pos) +#define PWMG_IF_NEWP3B_Pos 7 +#define PWMG_IF_NEWP3B_Msk (0x01 << PWMG_IF_NEWP3B_Pos) +#define PWMG_IF_NEWP4A_Pos 8 +#define PWMG_IF_NEWP4A_Msk (0x01 << PWMG_IF_NEWP4A_Pos) +#define PWMG_IF_NEWP4B_Pos 9 +#define PWMG_IF_NEWP4B_Msk (0x01 << PWMG_IF_NEWP4B_Pos) +#define PWMG_IF_NEWP5A_Pos 10 +#define PWMG_IF_NEWP5A_Msk (0x01 << PWMG_IF_NEWP5A_Pos) +#define PWMG_IF_NEWP5B_Pos 11 +#define PWMG_IF_NEWP5B_Msk (0x01 << PWMG_IF_NEWP5B_Pos) +#define PWMG_IF_HEND0A_Pos 12 +#define PWMG_IF_HEND0A_Msk (0x01 << PWMG_IF_HEND0A_Pos) +#define PWMG_IF_HEND0B_Pos 13 +#define PWMG_IF_HEND0B_Msk (0x01 << PWMG_IF_HEND0B_Pos) +#define PWMG_IF_HEND1A_Pos 14 +#define PWMG_IF_HEND1A_Msk (0x01 << PWMG_IF_HEND1A_Pos) +#define PWMG_IF_HEND1B_Pos 15 +#define PWMG_IF_HEND1B_Msk (0x01 << PWMG_IF_HEND1B_Pos) +#define PWMG_IF_HEND2A_Pos 16 +#define PWMG_IF_HEND2A_Msk (0x01 << PWMG_IF_HEND2A_Pos) +#define PWMG_IF_HEND2B_Pos 17 +#define PWMG_IF_HEND2B_Msk (0x01 << PWMG_IF_HEND2B_Pos) +#define PWMG_IF_HEND3A_Pos 18 +#define PWMG_IF_HEND3A_Msk (0x01 << PWMG_IF_HEND3A_Pos) +#define PWMG_IF_HEND3B_Pos 19 +#define PWMG_IF_HEND3B_Msk (0x01 << PWMG_IF_HEND3B_Pos) +#define PWMG_IF_HEND4A_Pos 20 +#define PWMG_IF_HEND4A_Msk (0x01 << PWMG_IF_HEND4A_Pos) +#define PWMG_IF_HEND4B_Pos 21 +#define PWMG_IF_HEND4B_Msk (0x01 << PWMG_IF_HEND4B_Pos) +#define PWMG_IF_HEND5A_Pos 22 +#define PWMG_IF_HEND5A_Msk (0x01 << PWMG_IF_HEND5A_Pos) +#define PWMG_IF_HEND5B_Pos 23 +#define PWMG_IF_HEND5B_Msk (0x01 << PWMG_IF_HEND5B_Pos) +#define PWMG_IF_HALT_Pos 24 +#define PWMG_IF_HALT_Msk (0x01 << PWMG_IF_HALT_Pos) + +#define PWMG_IM_NEWP0A_Pos 0 //Interrupt Mask +#define PWMG_IM_NEWP0A_Msk (0x01 << PWMG_IM_NEWP0A_Pos) +#define PWMG_IM_NEWP0B_Pos 1 +#define PWMG_IM_NEWP0B_Msk (0x01 << PWMG_IM_NEWP0B_Pos) +#define PWMG_IM_NEWP1A_Pos 2 +#define PWMG_IM_NEWP1A_Msk (0x01 << PWMG_IM_NEWP1A_Pos) +#define PWMG_IM_NEWP1B_Pos 3 +#define PWMG_IM_NEWP1B_Msk (0x01 << PWMG_IM_NEWP1B_Pos) +#define PWMG_IM_NEWP2A_Pos 4 +#define PWMG_IM_NEWP2A_Msk (0x01 << PWMG_IM_NEWP2A_Pos) +#define PWMG_IM_NEWP2B_Pos 5 +#define PWMG_IM_NEWP2B_Msk (0x01 << PWMG_IM_NEWP2B_Pos) +#define PWMG_IM_NEWP3A_Pos 6 +#define PWMG_IM_NEWP3A_Msk (0x01 << PWMG_IM_NEWP3A_Pos) +#define PWMG_IM_NEWP3B_Pos 7 +#define PWMG_IM_NEWP3B_Msk (0x01 << PWMG_IM_NEWP3B_Pos) +#define PWMG_IM_NEWP4A_Pos 8 +#define PWMG_IM_NEWP4A_Msk (0x01 << PWMG_IM_NEWP4A_Pos) +#define PWMG_IM_NEWP4B_Pos 9 +#define PWMG_IM_NEWP4B_Msk (0x01 << PWMG_IM_NEWP4B_Pos) +#define PWMG_IM_NEWP5A_Pos 10 +#define PWMG_IM_NEWP5A_Msk (0x01 << PWMG_IM_NEWP5A_Pos) +#define PWMG_IM_NEWP5B_Pos 11 +#define PWMG_IM_NEWP5B_Msk (0x01 << PWMG_IM_NEWP5B_Pos) +#define PWMG_IM_HEND0A_Pos 12 +#define PWMG_IM_HEND0A_Msk (0x01 << PWMG_IM_HEND0A_Pos) +#define PWMG_IM_HEND0B_Pos 13 +#define PWMG_IM_HEND0B_Msk (0x01 << PWMG_IM_HEND0B_Pos) +#define PWMG_IM_HEND1A_Pos 14 +#define PWMG_IM_HEND1A_Msk (0x01 << PWMG_IM_HEND1A_Pos) +#define PWMG_IM_HEND1B_Pos 15 +#define PWMG_IM_HEND1B_Msk (0x01 << PWMG_IM_HEND1B_Pos) +#define PWMG_IM_HEND2A_Pos 16 +#define PWMG_IM_HEND2A_Msk (0x01 << PWMG_IM_HEND2A_Pos) +#define PWMG_IM_HEND2B_Pos 17 +#define PWMG_IM_HEND2B_Msk (0x01 << PWMG_IM_HEND2B_Pos) +#define PWMG_IM_HEND3A_Pos 18 +#define PWMG_IM_HEND3A_Msk (0x01 << PWMG_IM_HEND3A_Pos) +#define PWMG_IM_HEND3B_Pos 19 +#define PWMG_IM_HEND3B_Msk (0x01 << PWMG_IM_HEND3B_Pos) +#define PWMG_IM_HEND4A_Pos 20 +#define PWMG_IM_HEND4A_Msk (0x01 << PWMG_IM_HEND4A_Pos) +#define PWMG_IM_HEND4B_Pos 21 +#define PWMG_IM_HEND4B_Msk (0x01 << PWMG_IM_HEND4B_Pos) +#define PWMG_IM_HEND5A_Pos 22 +#define PWMG_IM_HEND5A_Msk (0x01 << PWMG_IM_HEND5A_Pos) +#define PWMG_IM_HEND5B_Pos 23 +#define PWMG_IM_HEND5B_Msk (0x01 << PWMG_IM_HEND5B_Pos) +#define PWMG_IM_HALT_Pos 24 +#define PWMG_IM_HALT_Msk (0x01 << PWMG_IM_HALT_Pos) + +#define PWMG_IRS_NEWP0A_Pos 0 //Interrupt Raw State +#define PWMG_IRS_NEWP0A_Msk (0x01 << PWMG_IRS_NEWP0A_Pos) +#define PWMG_IRS_NEWP0B_Pos 1 +#define PWMG_IRS_NEWP0B_Msk (0x01 << PWMG_IRS_NEWP0B_Pos) +#define PWMG_IRS_NEWP1A_Pos 2 +#define PWMG_IRS_NEWP1A_Msk (0x01 << PWMG_IRS_NEWP1A_Pos) +#define PWMG_IRS_NEWP1B_Pos 3 +#define PWMG_IRS_NEWP1B_Msk (0x01 << PWMG_IRS_NEWP1B_Pos) +#define PWMG_IRS_NEWP2A_Pos 4 +#define PWMG_IRS_NEWP2A_Msk (0x01 << PWMG_IRS_NEWP2A_Pos) +#define PWMG_IRS_NEWP2B_Pos 5 +#define PWMG_IRS_NEWP2B_Msk (0x01 << PWMG_IRS_NEWP2B_Pos) +#define PWMG_IRS_NEWP3A_Pos 6 +#define PWMG_IRS_NEWP3A_Msk (0x01 << PWMG_IRS_NEWP3A_Pos) +#define PWMG_IRS_NEWP3B_Pos 7 +#define PWMG_IRS_NEWP3B_Msk (0x01 << PWMG_IRS_NEWP3B_Pos) +#define PWMG_IRS_NEWP4A_Pos 8 +#define PWMG_IRS_NEWP4A_Msk (0x01 << PWMG_IRS_NEWP4A_Pos) +#define PWMG_IRS_NEWP4B_Pos 9 +#define PWMG_IRS_NEWP4B_Msk (0x01 << PWMG_IRS_NEWP4B_Pos) +#define PWMG_IRS_NEWP5A_Pos 10 +#define PWMG_IRS_NEWP5A_Msk (0x01 << PWMG_IRS_NEWP5A_Pos) +#define PWMG_IRS_NEWP5B_Pos 11 +#define PWMG_IRS_NEWP5B_Msk (0x01 << PWMG_IRS_NEWP5B_Pos) +#define PWMG_IRS_HEND0A_Pos 12 +#define PWMG_IRS_HEND0A_Msk (0x01 << PWMG_IRS_HEND0A_Pos) +#define PWMG_IRS_HEND0B_Pos 13 +#define PWMG_IRS_HEND0B_Msk (0x01 << PWMG_IRS_HEND0B_Pos) +#define PWMG_IRS_HEND1A_Pos 14 +#define PWMG_IRS_HEND1A_Msk (0x01 << PWMG_IRS_HEND1A_Pos) +#define PWMG_IRS_HEND1B_Pos 15 +#define PWMG_IRS_HEND1B_Msk (0x01 << PWMG_IRS_HEND1B_Pos) +#define PWMG_IRS_HEND2A_Pos 16 +#define PWMG_IRS_HEND2A_Msk (0x01 << PWMG_IRS_HEND2A_Pos) +#define PWMG_IRS_HEND2B_Pos 17 +#define PWMG_IRS_HEND2B_Msk (0x01 << PWMG_IRS_HEND2B_Pos) +#define PWMG_IRS_HEND3A_Pos 18 +#define PWMG_IRS_HEND3A_Msk (0x01 << PWMG_IRS_HEND3A_Pos) +#define PWMG_IRS_HEND3B_Pos 19 +#define PWMG_IRS_HEND3B_Msk (0x01 << PWMG_IRS_HEND3B_Pos) +#define PWMG_IRS_HEND4A_Pos 20 +#define PWMG_IRS_HEND4A_Msk (0x01 << PWMG_IRS_HEND4A_Pos) +#define PWMG_IRS_HEND4B_Pos 21 +#define PWMG_IRS_HEND4B_Msk (0x01 << PWMG_IRS_HEND4B_Pos) +#define PWMG_IRS_HEND5A_Pos 22 +#define PWMG_IRS_HEND5A_Msk (0x01 << PWMG_IRS_HEND5A_Pos) +#define PWMG_IRS_HEND5B_Pos 23 +#define PWMG_IRS_HEND5B_Msk (0x01 << PWMG_IRS_HEND5B_Pos) +#define PWMG_IRS_HALT_Pos 24 +#define PWMG_IRS_HALT_Msk (0x01 << PWMG_IRS_HALT_Pos) + + + + +typedef struct { + __IO uint32_t EN; //[0] ENABLE + + __IO uint32_t IE; //Ö»ÓÐΪ1ʱ£¬IF[CHx]ÔÚDMA´«Êä½áÊøÊ±²ÅÄܱäΪ1£¬·ñÔò½«Ò»Ö±±£³ÖÔÚ0 + + __IO uint32_t IM; //µ±Îª1ʱ£¬¼´Ê¹IF[CHx]Ϊ1£¬dma_intÒ²²»»áÒò´Ë±ä1 + + __IO uint32_t IF; //д1ÇåÁã + + uint32_t RESERVED[12]; + + struct { + __IO uint32_t CR; + + __IO uint32_t AM; //Adress Mode + + __IO uint32_t SRC; + + __IO uint32_t SRCSGADDR1; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t SRCSGADDR2; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t SRCSGADDR3; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t SRCSGLEN; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t DST; + + __IO uint32_t DSTSGADDR1; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t DSTSGADDR2; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t DSTSGADDR3; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + __IO uint32_t DSTSGLEN; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + + uint32_t RESERVED[4]; + } CH[3]; } DMA_TypeDef; -#define DMA_IE_CH0_Pos 0 -#define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos) -#define DMA_IE_CH1_Pos 1 -#define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos) -#define DMA_IE_CH2_Pos 2 -#define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos) -#define DMA_IE_CH3_Pos 3 -#define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos) -#define DMA_IE_CH4_Pos 4 -#define DMA_IE_CH4_Msk (0x01 << DMA_IE_CH4_Pos) -#define DMA_IE_CH5_Pos 5 -#define DMA_IE_CH5_Msk (0x01 << DMA_IE_CH5_Pos) -#define DMA_IE_CH6_Pos 6 -#define DMA_IE_CH6_Msk (0x01 << DMA_IE_CH6_Pos) -#define DMA_IE_CH7_Pos 7 -#define DMA_IE_CH7_Msk (0x01 << DMA_IE_CH7_Pos) - -#define DMA_IM_CH0_Pos 0 -#define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos) -#define DMA_IM_CH1_Pos 1 -#define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos) -#define DMA_IM_CH2_Pos 2 -#define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos) -#define DMA_IM_CH3_Pos 3 -#define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos) -#define DMA_IM_CH4_Pos 4 -#define DMA_IM_CH4_Msk (0x01 << DMA_IM_CH4_Pos) -#define DMA_IM_CH5_Pos 5 -#define DMA_IM_CH5_Msk (0x01 << DMA_IM_CH5_Pos) -#define DMA_IM_CH6_Pos 6 -#define DMA_IM_CH6_Msk (0x01 << DMA_IM_CH6_Pos) -#define DMA_IM_CH7_Pos 7 -#define DMA_IM_CH7_Msk (0x01 << DMA_IM_CH7_Pos) - -#define DMA_IF_CH0_Pos 0 -#define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos) -#define DMA_IF_CH1_Pos 1 -#define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos) -#define DMA_IF_CH2_Pos 2 -#define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos) -#define DMA_IF_CH3_Pos 3 -#define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos) -#define DMA_IF_CH4_Pos 4 -#define DMA_IF_CH4_Msk (0x01 << DMA_IF_CH4_Pos) -#define DMA_IF_CH5_Pos 5 -#define DMA_IF_CH5_Msk (0x01 << DMA_IF_CH5_Pos) -#define DMA_IF_CH6_Pos 6 -#define DMA_IF_CH6_Msk (0x01 << DMA_IF_CH6_Pos) -#define DMA_IF_CH7_Pos 7 -#define DMA_IF_CH7_Msk (0x01 << DMA_IF_CH7_Pos) - -#define DMA_CR_LEN_Pos 0 //此通é�“传输总长度,0对应1字节,最大4096字节 -#define DMA_CR_LEN_Msk (0xFFF << DMA_CR_LEN_Pos) -#define DMA_CR_RXEN_Pos 16 -#define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos) -#define DMA_CR_TXEN_Pos 17 -#define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos) -#define DMA_CR_AUTORE_Pos 18 //Auto Restart, 通é�“在传输完æˆ�å�Žï¼Œæ˜¯å�¦è‡ªåЍé‡�æ–°å�¯åЍ -#define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos) - -#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 地å�€å›ºå®š 1 地å�€é€’增 2 scatter gather模å¼� -#define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos) -#define DMA_AM_DSTAM_Pos 8 -#define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos) -#define DMA_AM_BURST_Pos 16 -#define DMA_AM_BURST_Msk (0x01 << DMA_AM_BURST_Pos) - -typedef struct -{ - __IO uint32_t CR; //Control Register - - __O uint32_t CMD; //Command Register - - __I uint32_t SR; //Status Register - - __I uint32_t IF; //Interrupt Flag - - __IO uint32_t IE; //Interrupt Enable - - uint32_t RESERVED; - - __IO uint32_t BT0; //Bit Time Register 0 - - __IO uint32_t BT1; //Bit Time Register 1 - - uint32_t RESERVED2[3]; - - __I uint32_t ALC; //Arbitration Lost Capture, 仲è£�丢失æ�•æ�‰ - - __I uint32_t ECC; //Error code capture, 错误代ç �æ�•æ�‰ - - __IO uint32_t EWLIM; //Error Warning Limit, 错误报警é™�制 - - __IO uint32_t RXERR; //RX错误计数 - - __IO uint32_t TXERR; //TX错误计数 - - union { - struct - { //在å¤�ä½�æ—¶å�¯è¯»å†™ï¼Œæ­£å¸¸å·¥ä½œæ¨¡å¼�下ä¸�å�¯è®¿é—® - __IO uint32_t ACR[4]; //Acceptance Check Register, 验收寄存器 - - __IO uint32_t AMR[4]; //Acceptance Mask Register, 验收å±�蔽寄存器;对应ä½�写0,ID必须和验收寄存器匹é…� - uint32_t RESERVED[5]; - } FILTER; - - union { //在正常工作模å¼�下å�¯è¯»å†™ï¼Œå¤�ä½�æ—¶ä¸�å�¯è®¿é—® - struct - { - __O uint32_t INFO; - - __O uint32_t DATA[12]; - } TXFRAME; - - struct - { - __I uint32_t INFO; - - __I uint32_t DATA[12]; - } RXFRAME; - }; - }; - - __I uint32_t RMCNT; //Receive Message Count - - uint32_t RESERVED3[66]; - - struct - { //TXFRAME的读接å�£ - __I uint32_t INFO; - - __I uint32_t DATA[12]; - } TXFRAME_R; +#define DMA_IE_CH0_Pos 0 +#define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos) +#define DMA_IE_CH1_Pos 1 +#define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos) +#define DMA_IE_CH2_Pos 2 +#define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos) +#define DMA_IE_CH3_Pos 3 +#define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos) +#define DMA_IE_CH4_Pos 4 +#define DMA_IE_CH4_Msk (0x01 << DMA_IE_CH4_Pos) +#define DMA_IE_CH5_Pos 5 +#define DMA_IE_CH5_Msk (0x01 << DMA_IE_CH5_Pos) +#define DMA_IE_CH6_Pos 6 +#define DMA_IE_CH6_Msk (0x01 << DMA_IE_CH6_Pos) +#define DMA_IE_CH7_Pos 7 +#define DMA_IE_CH7_Msk (0x01 << DMA_IE_CH7_Pos) + +#define DMA_IM_CH0_Pos 0 +#define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos) +#define DMA_IM_CH1_Pos 1 +#define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos) +#define DMA_IM_CH2_Pos 2 +#define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos) +#define DMA_IM_CH3_Pos 3 +#define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos) +#define DMA_IM_CH4_Pos 4 +#define DMA_IM_CH4_Msk (0x01 << DMA_IM_CH4_Pos) +#define DMA_IM_CH5_Pos 5 +#define DMA_IM_CH5_Msk (0x01 << DMA_IM_CH5_Pos) +#define DMA_IM_CH6_Pos 6 +#define DMA_IM_CH6_Msk (0x01 << DMA_IM_CH6_Pos) +#define DMA_IM_CH7_Pos 7 +#define DMA_IM_CH7_Msk (0x01 << DMA_IM_CH7_Pos) + +#define DMA_IF_CH0_Pos 0 +#define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos) +#define DMA_IF_CH1_Pos 1 +#define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos) +#define DMA_IF_CH2_Pos 2 +#define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos) +#define DMA_IF_CH3_Pos 3 +#define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos) +#define DMA_IF_CH4_Pos 4 +#define DMA_IF_CH4_Msk (0x01 << DMA_IF_CH4_Pos) +#define DMA_IF_CH5_Pos 5 +#define DMA_IF_CH5_Msk (0x01 << DMA_IF_CH5_Pos) +#define DMA_IF_CH6_Pos 6 +#define DMA_IF_CH6_Msk (0x01 << DMA_IF_CH6_Pos) +#define DMA_IF_CH7_Pos 7 +#define DMA_IF_CH7_Msk (0x01 << DMA_IF_CH7_Pos) + +#define DMA_CR_LEN_Pos 0 //´ËͨµÀ´«Êä×ܳ¤¶È£¬0¶ÔÓ¦1×Ö½Ú£¬×î´ó4096×Ö½Ú +#define DMA_CR_LEN_Msk (0xFFF << DMA_CR_LEN_Pos) +#define DMA_CR_RXEN_Pos 16 +#define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos) +#define DMA_CR_TXEN_Pos 17 +#define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos) +#define DMA_CR_AUTORE_Pos 18 //Auto Restart, ͨµÀÔÚ´«ÊäÍê³Éºó£¬ÊÇ·ñ×Ô¶¯ÖØÐÂÆô¶¯ +#define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos) + +#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 µØÖ·¹Ì¶¨ 1 µØÖ·µÝÔö 2 scatter gatherģʽ +#define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos) +#define DMA_AM_DSTAM_Pos 8 +#define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos) +#define DMA_AM_BURST_Pos 16 +#define DMA_AM_BURST_Msk (0x01 << DMA_AM_BURST_Pos) + + + + +typedef struct { + __IO uint32_t CR; //Control Register + + __O uint32_t CMD; //Command Register + + __I uint32_t SR; //Status Register + + __I uint32_t IF; //Interrupt Flag£¬¶ÁÈ¡ÇåÁã + + __IO uint32_t IE; //Interrupt Enable + + uint32_t RESERVED; + + __IO uint32_t BT0; //Bit Time Register 0 + + __IO uint32_t BT1; //Bit Time Register 1 + + uint32_t RESERVED2[3]; + + __I uint32_t ALC; //Arbitration Lost Capture, ÖٲöªÊ§²¶×½ + + __I uint32_t ECC; //Error code capture, ´íÎó´úÂë²¶×½ + + __IO uint32_t EWLIM; //Error Warning Limit, ´íÎ󱨾¯ÏÞÖÆ + + __IO uint32_t RXERR; //RX´íÎó¼ÆÊý + + __IO uint32_t TXERR; //TX´íÎó¼ÆÊý + + union { + struct { //ÔÚ¸´Î»Ê±¿É¶Áд£¬Õý³£¹¤×÷ģʽϲ»¿É·ÃÎÊ + __IO uint32_t ACR[4]; //Acceptance Check Register, ÑéÊռĴæÆ÷ + + __IO uint32_t AMR[4]; //Acceptance Mask Register, ÑéÊÕÆÁ±Î¼Ä´æÆ÷£»¶ÔӦλд0£¬ID±ØÐëºÍÑéÊռĴæÆ÷Æ¥Åä + + uint32_t RESERVED[5]; + } FILTER; + + union { //ÔÚÕý³£¹¤×÷ģʽÏ¿ɶÁд£¬¸´Î»Ê±²»¿É·ÃÎÊ + struct { + __O uint32_t INFO; + + __O uint32_t DATA[12]; + } TXFRAME; + + struct { + __I uint32_t INFO; + + __I uint32_t DATA[12]; + } RXFRAME; + }; + }; + + __I uint32_t RMCNT; //Receive Message Count + + uint32_t RESERVED3[66]; + + struct { //TXFRAMEµÄ¶Á½Ó¿Ú + __I uint32_t INFO; + + __I uint32_t DATA[12]; + } TXFRAME_R; } CAN_TypeDef; -#define CAN_CR_RST_Pos 0 -#define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos) -#define CAN_CR_LOM_Pos 1 //Listen Only Mode -#define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos) -#define CAN_CR_STM_Pos 2 //Self Test Mode, 此模å¼�下å�³ä½¿æ²¡æœ‰åº”答,CAN控制器也å�¯ä»¥æˆ�功å�‘é€� -#define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos) -#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 å�•个验收滤波器(32ä½�) 0 两个验收滤波器(16ä½�) -#define CAN_CR_AFM_Msk (0x01 << CAN_CR_AFM_Pos) -#define CAN_CR_SLEEP_Pos 4 //写1进入ç�¡çœ æ¨¡å¼�,有总线活动或中断时唤醒并自动清零此ä½� -#define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos) - -#define CAN_CMD_TXREQ_Pos 0 //Transmission Request -#define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos) -#define CAN_CMD_ABTTX_Pos 1 //Abort Transmission -#define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos) -#define CAN_CMD_RRB_Pos 2 //Release Receive Buffer -#define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos) -#define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun -#define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos) -#define CAN_CMD_SRR_Pos 4 //Self Reception Request -#define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos) - -#define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消æ�¯å�¯ä»¥è¯»å�– -#define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos) -#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信æ�¯ç”±äºŽæŽ¥æ”¶FIFO已满而丢掉 -#define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos) -#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处ç�†å‰�é�¢çš„å�‘é€�,现在ä¸�能写新的消æ�¯ 1 å�¯ä»¥å†™å…¥æ–°çš„æ¶ˆæ�¯å�‘é€� -#define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos) -#define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed -#define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos) -#define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收 -#define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos) -#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在å�‘é€� -#define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos) -#define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit -#define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos) -#define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状æ€�,没有å�‚与到总线活动 -#define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos) - -#define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA -#define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos) -#define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBRç”±0å�˜æˆ�1将置ä½�æ­¤ä½� -#define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos) -#define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置ä½�æ­¤ä½� -#define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos) -#define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV -#define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos) -#define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在ç�¡çœ æ¨¡å¼�下的CAN控制器检测到总线活动时硬件置ä½� -#define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos) -#define CAN_IF_ERRPASS_Pos 5 // -#define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos) -#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲è£�å�˜æˆ�接收方时硬件置ä½� -#define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos) -#define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置ä½� -#define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos) - -#define CAN_IE_RXDA_Pos 0 -#define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos) -#define CAN_IE_TXBR_Pos 1 -#define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos) -#define CAN_IE_ERRWARN_Pos 2 -#define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos) -#define CAN_IE_RXOV_Pos 3 -#define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos) -#define CAN_IE_WKUP_Pos 4 -#define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos) -#define CAN_IE_ERRPASS_Pos 5 -#define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos) -#define CAN_IE_ARBLOST_Pos 6 -#define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos) -#define CAN_IE_BUSERR_Pos 7 -#define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos) - -#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CANæ—¶é—´å�•ä½�=2*Tsysclk*(BRP+1) -#define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos) -#define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width -#define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos) - -#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANæ—¶é—´å�•ä½� * (TSEG1+1) -#define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos) -#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANæ—¶é—´å�•ä½� * (TSEG2+1) -#define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos) -#define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times -#define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos) - -#define CAN_ECC_SEGCODE_Pos 0 //Segment Code -#define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos) -#define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception -#define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos) -#define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error -#define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos) - -#define CAN_INFO_DLC_Pos 0 //Data Length Control -#define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos) -#define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 æ•°æ�®å¸§ -#define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos) -#define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格å¼� 1 扩展帧格å¼� -#define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos) - -typedef struct -{ - __IO uint32_t IE; //[0] 为0的时候,IF[0]ç»´æŒ�为0 - - __IO uint32_t IF; //[0] 当完æˆ�指定长度的数æ�®ä¼ è¾“æ—¶ç½®1,写1清零 - - __IO uint32_t IM; //[0] 当该寄存器为1时,LCDC的中断ä¸�会输出给系统的中断控制寄存器 +#define CAN_CR_RST_Pos 0 +#define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos) +#define CAN_CR_LOM_Pos 1 //Listen Only Mode +#define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos) +#define CAN_CR_STM_Pos 2 //Self Test Mode, ´Ëģʽϼ´Ê¹Ã»ÓÐÓ¦´ð£¬CAN¿ØÖÆÆ÷Ò²¿ÉÒԳɹ¦·¢ËÍ +#define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos) +#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 µ¥¸öÑéÊÕÂ˲¨Æ÷£¨32룩 0 Á½¸öÑéÊÕÂ˲¨Æ÷£¨16룩 +#define CAN_CR_AFM_Msk (0x01 << CAN_CR_AFM_Pos) +#define CAN_CR_SLEEP_Pos 4 //д1½øÈë˯Ãßģʽ£¬ÓÐ×ÜÏ߻»òÖжÏʱ»½ÐѲ¢×Ô¶¯ÇåÁã´Ëλ +#define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos) + +#define CAN_CMD_TXREQ_Pos 0 //Transmission Request +#define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos) +#define CAN_CMD_ABTTX_Pos 1 //Abort Transmission +#define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos) +#define CAN_CMD_RRB_Pos 2 //Release Receive Buffer +#define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos) +#define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun +#define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos) +#define CAN_CMD_SRR_Pos 4 //Self Reception Request +#define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos) + +#define CAN_SR_RXDA_Pos 0 //Receive Data Available£¬½ÓÊÕFIFOÖÐÓÐÍêÕûÏûÏ¢¿ÉÒÔ¶ÁÈ¡ +#define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos) +#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun£¬Ð½ÓÊÕµÄÐÅÏ¢ÓÉÓÚ½ÓÊÕFIFOÒÑÂú¶ø¶ªµô +#define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos) +#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release£¬0 ÕýÔÚ´¦ÀíÇ°ÃæµÄ·¢ËÍ£¬ÏÖÔÚ²»ÄÜдеÄÏûÏ¢ 1 ¿ÉÒÔдÈëеÄÏûÏ¢·¢ËÍ +#define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos) +#define CAN_SR_TXOK_Pos 3 //Transmit OK£¬successfully completed +#define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos) +#define CAN_SR_RXBUSY_Pos 4 //Receive Busy£¬ÕýÔÚ½ÓÊÕ +#define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos) +#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy£¬ÕýÔÚ·¢ËÍ +#define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos) +#define CAN_SR_ERRWARN_Pos 6 //1 ÖÁÉÙÒ»¸ö´íÎó¼ÆÊýÆ÷´ïµ½ Warning Limit +#define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos) +#define CAN_SR_BUSOFF_Pos 7 //1 CAN ¿ØÖÆÆ÷´¦ÓÚ×ÜÏ߹رÕ״̬£¬Ã»ÓвÎÓëµ½×ÜÏ߻ +#define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos) + +#define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA +#define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos) +#define CAN_IF_TXBR_Pos 1 //µ±IE.TXBR=1ʱ£¬SR.TXBRÓÉ0±ä³É1½«ÖÃλ´Ëλ +#define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos) +#define CAN_IF_ERRWARN_Pos 2 //µ±IE.ERRWARN=1ʱ£¬SR.ERRWARN»òSR.BUSOFF 0-to-1 »ò 1-to-0½«ÖÃλ´Ëλ +#define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos) +#define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV +#define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos) +#define CAN_IF_WKUP_Pos 4 //µ±IE.WKUP=1ʱ£¬ÔÚ˯ÃßģʽϵÄCAN¿ØÖÆÆ÷¼ì²âµ½×ÜÏ߻ʱӲ¼þÖÃλ +#define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos) +#define CAN_IF_ERRPASS_Pos 5 // +#define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos) +#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost£¬µ±IE.ARBLOST=1ʱ£¬CAN¿ØÖÆÆ÷¶ªÊ§Öٲñä³É½ÓÊÕ·½Ê±Ó²¼þÖÃλ +#define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos) +#define CAN_IF_BUSERR_Pos 7 //µ±IE.BUSERR=1ʱ£¬CAN¿ØÖÆÆ÷¼ì²âµ½×ÜÏß´íÎóʱӲ¼þÖÃλ +#define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos) + +#define CAN_IE_RXDA_Pos 0 +#define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos) +#define CAN_IE_TXBR_Pos 1 +#define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos) +#define CAN_IE_ERRWARN_Pos 2 +#define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos) +#define CAN_IE_RXOV_Pos 3 +#define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos) +#define CAN_IE_WKUP_Pos 4 +#define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos) +#define CAN_IE_ERRPASS_Pos 5 +#define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos) +#define CAN_IE_ARBLOST_Pos 6 +#define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos) +#define CAN_IE_BUSERR_Pos 7 +#define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos) + +#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler£¬CANʱ¼äµ¥Î»=2*Tsysclk*(BRP+1) +#define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos) +#define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width +#define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos) + +#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANʱ¼äµ¥Î» * (TSEG1+1) +#define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos) +#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANʱ¼äµ¥Î» * (TSEG2+1) +#define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos) +#define CAN_BT1_SAM_Pos 7 //²ÉÑù´ÎÊý 0: sampled once 1: sampled three times +#define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos) + +#define CAN_ECC_SEGCODE_Pos 0 //Segment Code +#define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos) +#define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception +#define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos) +#define CAN_ECC_ERRCODE_Pos 6 //Error Code£º0 Bit error 1 Form error 2 Stuff error 3 other error +#define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos) + +#define CAN_INFO_DLC_Pos 0 //Data Length Control +#define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos) +#define CAN_INFO_RTR_Pos 6 //Remote Frame£¬1 Ô¶³ÌÖ¡ 0 Êý¾ÝÖ¡ +#define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos) +#define CAN_INFO_FF_Pos 7 //Frame Format£¬0 ±ê×¼Ö¡¸ñʽ 1 À©Õ¹Ö¡¸ñʽ +#define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos) + + + + +typedef struct { + __IO uint32_t IE; //[0] Ϊ0µÄʱºò£¬IF[0]ά³ÖΪ0 + + __IO uint32_t IF; //[0] µ±Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«ÊäʱÖÃ1£¬Ð´1ÇåÁã + + __IO uint32_t IM; //[0] µ±¸Ã¼Ä´æÆ÷Ϊ1ʱ£¬LCDCµÄÖжϲ»»áÊä³ö¸øÏµÍ³µÄÖжϿØÖƼĴæÆ÷ + __IO uint32_t START; - - __IO uint32_t SRCADDR; //æ•°æ�®æº�地å�€å¯„存器,必须字对é½�(å�³åœ°å�€çš„低2ä½�必须是0) - + + __IO uint32_t SRCADDR; //Êý¾ÝÔ´µØÖ·¼Ä´æÆ÷£¬±ØÐë×Ö¶ÔÆë£¨¼´µØÖ·µÄµÍ2λ±ØÐëÊÇ0£© + __IO uint32_t CR0; - + __IO uint32_t CR1; - - __IO uint32_t PRECMDV; //在MPU接å�£ä¸­ï¼Œå�‘é€�æ•°æ�®å‰�,RS拉低的那一æ‹�,数æ�®æ€»çº¿ä¸Šçš„值 + + __IO uint32_t PRECMDV; //ÔÚMPU½Ó¿ÚÖУ¬·¢ËÍÊý¾Ýǰ£¬RSÀ­µÍµÄÄÇÒ»ÅÄ£¬Êý¾Ý×ÜÏßÉϵÄÖµ } LCD_TypeDef; -#define LCD_START_MPUEN_Pos 0 //0 RGB接å�£ 1 MPU接å�£ -#define LCD_START_MPUEN_Msk (0x01 << LCD_START_MPUEN_Pos) -#define LCD_START_GO_Pos 1 //写1开始传输数æ�®ï¼Œæ•°æ�®ä¼ è¾“结æ�Ÿå�Žè‡ªåŠ¨æ¸…é›¶ -#define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos) -#define LCD_START_BURST_Pos 2 -#define LCD_START_BURST_Msk (0x01 << LCD_START_BURST_Pos) - -#define LCD_CR0_VPIX_Pos 0 //当portrait为0时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为767 \ - //当portrait为1时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为767 -#define LCD_CR0_VPIX_Msk (0x3FF << LCD_CR0_VPIX_Pos) -#define LCD_CR0_HPIX_Pos 10 //当portrait为0时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为1023 \ - //当portrait为1时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为1023 -#define LCD_CR0_HPIX_Msk (0x3FF << LCD_CR0_HPIX_Pos) -#define LCD_CR0_DCLK_Pos 20 //0 DOTCLK一直翻转 1 DOTCLK在空闲时å�œåœ¨1 -#define LCD_CR0_DCLK_Msk (0x01 << LCD_CR0_DCLK_Pos) -#define LCD_CR0_HLOW_Pos 21 //输出HSYNC低电平æŒ�续多少个DOTCLK周期,0表示1个周期 -#define LCD_CR0_HLOW_Msk (0x03 << LCD_CR0_HLOW_Pos) - -#define LCD_CR1_VFP_Pos 1 -#define LCD_CR1_VFP_Msk (0x07 << LCD_CR1_VFP_Pos) -#define LCD_CR1_VBP_Pos 4 -#define LCD_CR1_VBP_Msk (0x1F << LCD_CR1_VBP_Pos) -#define LCD_CR1_HFP_Pos 9 -#define LCD_CR1_HFP_Msk (0x1F << LCD_CR1_HFP_Pos) -#define LCD_CR1_HBP_Pos 14 -#define LCD_CR1_HBP_Msk (0x7F << LCD_CR1_HBP_Pos) -#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLK相对于模å�—时钟的分频比,0表示2分频,1表示4分频 ... -#define LCD_CR1_DCLKDIV_Msk (0x1F << LCD_CR1_DCLKDIV_Pos) -#define LCD_CR1_DCLKINV_Pos 26 //1 输出DOTCLKå��å�‘,应用于用DOTCLK下é™�沿采样数æ�®çš„å±� -#define LCD_CR1_DCLKINV_Msk (0x01 << LCD_CR1_DCLKINV_Pos) - -typedef struct -{ - __IO uint32_t DMA_MEM_ADDR; - __IO uint32_t BLK; //Block Size and Count +#define LCD_START_GO_Pos 1 //д1¿ªÊ¼´«ÊäÊý¾Ý£¬Êý¾Ý´«Êä½áÊøºó×Ô¶¯ÇåÁã +#define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos) +#define LCD_START_BURST_Pos 2 +#define LCD_START_BURST_Msk (0x01 << LCD_START_BURST_Pos) - __IO uint32_t ARG; //Argument +#define LCD_CR0_VPIX_Pos 0 //µ±portraitΪ0ʱ£¬±íʾ´¹Ö±·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ767 + //µ±portraitΪ1ʱ£¬±íʾˮƽ·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ767 +#define LCD_CR0_VPIX_Msk (0x3FF << LCD_CR0_VPIX_Pos) +#define LCD_CR0_HPIX_Pos 10 //µ±portraitΪ0ʱ£¬±íʾˮƽ·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ1023 + //µ±portraitΪ1ʱ£¬±íʾ´¹Ö±·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ1023 +#define LCD_CR0_HPIX_Msk (0x3FF << LCD_CR0_HPIX_Pos) +#define LCD_CR0_DCLK_Pos 20 //0 DOTCLKÒ»Ö±·­×ª 1 DOTCLKÔÚ¿ÕÏÐʱͣÔÚ1 +#define LCD_CR0_DCLK_Msk (0x01 << LCD_CR0_DCLK_Pos) +#define LCD_CR0_HLOW_Pos 21 //Êä³öHSYNCµÍµçƽ³ÖÐø¶àÉÙ¸öDOTCLKÖÜÆÚ£¬0±íʾ1¸öÖÜÆÚ +#define LCD_CR0_HLOW_Msk (0x03 << LCD_CR0_HLOW_Pos) - __IO uint32_t CMD; //Command +#define LCD_CR1_VFP_Pos 1 +#define LCD_CR1_VFP_Msk (0x07 << LCD_CR1_VFP_Pos) +#define LCD_CR1_VBP_Pos 4 +#define LCD_CR1_VBP_Msk (0x1F << LCD_CR1_VBP_Pos) +#define LCD_CR1_HFP_Pos 9 +#define LCD_CR1_HFP_Msk (0x1F << LCD_CR1_HFP_Pos) +#define LCD_CR1_HBP_Pos 14 +#define LCD_CR1_HBP_Msk (0x7F << LCD_CR1_HBP_Pos) +#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLKÏà¶ÔÓÚÄ£¿éʱÖӵķ֯µ±È£¬0±íʾ2·ÖƵ£¬1±íʾ4·ÖƵ ... +#define LCD_CR1_DCLKDIV_Msk (0x1F << LCD_CR1_DCLKDIV_Pos) +#define LCD_CR1_DCLKINV_Pos 26 //1 Êä³öDOTCLK·´Ïò£¬Ó¦ÓÃÓÚÓÃDOTCLKϽµÑزÉÑùÊý¾ÝµÄÆÁ +#define LCD_CR1_DCLKINV_Msk (0x01 << LCD_CR1_DCLKINV_Pos) - __IO uint32_t RESP[4]; //Response - __IO uint32_t DATA; - __IO uint32_t STAT; +typedef struct { + __IO uint32_t DMA_MEM_ADDR; + + __IO uint32_t BLK; //Block Size and Count + + __IO uint32_t ARG; //Argument + + __IO uint32_t CMD; //Command + + __IO uint32_t RESP[4]; //Response + + __IO uint32_t DATA; + + __IO uint32_t STAT; + __IO uint32_t CR1; - + __IO uint32_t CR2; - + __IO uint32_t IF; - - __IO uint32_t IFE; //Interrupt Flag Enable - - __IO uint32_t IE; //Interrupt Enalbe - + + __IO uint32_t IFE; //Interrupt Flag Enable + + __IO uint32_t IE; //Interrupt Enalbe + __IO uint32_t CMD12ERR; - + __IO uint32_t INFO; - + __IO uint32_t MAXCURR; } SDIO_TypeDef; -#define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节 -#define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos) -#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1å�— 2 2å�— ... ... -#define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos) - -#define SDIO_CMD_DMAEN_Pos 0 -#define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos) -#define SDIO_CMD_BLKCNTEN_Pos 1 -#define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos) -#define SDIO_CMD_AUTOCMD12_Pos 2 -#define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos) -#define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host -#define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos) -#define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block -#define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos) -#define SDIO_CMD_RESPTYPE_Pos 16 //å“�应类型,0 æ— å“�应 1 136ä½�å“�应 2 48ä½�å“�应 3 48ä½�å“�应,Busy after response -#define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos) -#define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable -#define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos) -#define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable -#define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos) -#define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present -#define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos) -#define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT -#define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos) -#define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63ã€�ACMD0-63 -#define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos) - -#define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode -#define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos) -#define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected -#define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos) -#define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted -#define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos) -#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITä½� 0 SD_Detect引脚 -#define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos) -#define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off -#define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos) -#define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V -#define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos) - -#define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable -#define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos) -#define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready -#define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos) -#define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable -#define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos) -#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ä¸�分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频 -#define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos) -#define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27 -#define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos) -#define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All -#define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos) -#define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line -#define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos) -#define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line -#define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos) - -#define SDIO_IF_CMDDONE_Pos 0 -#define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos) -#define SDIO_IF_TRXDONE_Pos 1 -#define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos) -#define SDIO_IF_BLKGAP_Pos 2 -#define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos) -#define SDIO_IF_DMADONE_Pos 3 -#define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos) -#define SDIO_IF_BUFWRRDY_Pos 4 -#define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos) -#define SDIO_IF_BUFRDRDY_Pos 5 -#define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos) -#define SDIO_IF_CARDINSR_Pos 6 -#define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos) -#define SDIO_IF_CARDRMOV_Pos 7 -#define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos) -#define SDIO_IF_CARD_Pos 8 -#define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos) -#define SDIO_IF_ERROR_Pos 15 -#define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos) -#define SDIO_IF_CMDTIMEOUT_Pos 16 -#define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos) -#define SDIO_IF_CMDCRCERR_Pos 17 -#define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos) -#define SDIO_IF_CMDENDERR_Pos 18 -#define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos) -#define SDIO_IF_CMDIDXERR_Pos 19 -#define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos) -#define SDIO_IF_DATTIMEOUT_Pos 20 -#define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos) -#define SDIO_IF_DATCRCERR_Pos 21 -#define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos) -#define SDIO_IF_DATENDERR_Pos 22 -#define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos) -#define SDIO_IF_CURLIMERR_Pos 23 -#define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos) -#define SDIO_IF_CMD12ERR_Pos 24 -#define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos) -#define SDIO_IF_DMAERR_Pos 25 -#define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos) -#define SDIO_IF_RESPERR_Pos 28 -#define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos) - -#define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable -#define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos) -#define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable -#define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos) -#define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable -#define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos) -#define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable -#define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos) -#define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable -#define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos) -#define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable -#define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos) -#define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable -#define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos) -#define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable -#define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos) -#define SDIO_IE_CARD_Pos 8 -#define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos) -#define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable -#define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos) -#define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable -#define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos) -#define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable -#define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos) -#define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable -#define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos) -#define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable -#define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos) -#define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable -#define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos) -#define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable -#define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos) -#define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable -#define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos) -#define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable -#define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos) -#define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable -#define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos) -#define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable -#define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos) - -#define SDIO_IM_CMDDONE_Pos 0 -#define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos) -#define SDIO_IM_TRXDONE_Pos 1 -#define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos) -#define SDIO_IM_BLKGAP_Pos 2 -#define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos) -#define SDIO_IM_DMADONE_Pos 3 -#define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos) -#define SDIO_IM_BUFWRRDY_Pos 4 -#define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos) -#define SDIO_IM_BUFRDRDY_Pos 5 -#define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos) -#define SDIO_IM_CARDINSR_Pos 6 -#define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos) -#define SDIO_IM_CARDRMOV_Pos 7 -#define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos) -#define SDIO_IM_CARD_Pos 8 -#define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos) -#define SDIO_IM_CMDTIMEOUT_Pos 16 -#define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos) -#define SDIO_IM_CMDCRCERR_Pos 17 -#define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos) -#define SDIO_IM_CMDENDERR_Pos 18 -#define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos) -#define SDIO_IM_CMDIDXERR_Pos 19 -#define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos) -#define SDIO_IM_DATTIMEOUT_Pos 20 -#define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos) -#define SDIO_IM_DATCRCERR_Pos 21 -#define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos) -#define SDIO_IM_DATENDERR_Pos 22 -#define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos) -#define SDIO_IM_CURLIMERR_Pos 23 -#define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos) -#define SDIO_IM_CMD12ERR_Pos 24 -#define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos) -#define SDIO_IM_DMAERR_Pos 25 -#define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos) -#define SDIO_IM_RESPERR_Pos 28 -#define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos) - -typedef struct -{ - __IO uint32_t DATA; - __IO uint32_t ADDR; - __IO uint32_t _ERASE; //å’Œmmcsd_cmd.h(59)å��字冲çª�,这里修改为_ERASE - __IO uint32_t CACHE; - __IO uint32_t CFG0; - __IO uint32_t CFG1; - __IO uint32_t CFG2; - __IO uint32_t CFG3; - __IO uint32_t STAT; + +#define SDIO_BLK_SIZE_Pos 0 //0x200 512×Ö½Ú 0x400 1024×Ö½Ú 0x800 2048×Ö½Ú +#define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos) +#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1¿é 2 2¿é ... ... +#define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos) + +#define SDIO_CMD_DMAEN_Pos 0 +#define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos) +#define SDIO_CMD_BLKCNTEN_Pos 1 +#define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos) +#define SDIO_CMD_AUTOCMD12_Pos 2 +#define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos) +#define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host +#define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos) +#define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block +#define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos) +#define SDIO_CMD_RESPTYPE_Pos 16 //ÏìÓ¦ÀàÐÍ£¬0 ÎÞÏìÓ¦ 1 136λÏìÓ¦ 2 48λÏìÓ¦ 3 48λÏìÓ¦£¬Busy after response +#define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos) +#define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable +#define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos) +#define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable +#define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos) +#define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present +#define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos) +#define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT +#define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos) +#define SDIO_CMD_CMDINDX_Pos 24 //Command Index£¬CMD0-63¡¢ACMD0-63 +#define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos) + +#define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode +#define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos) +#define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected +#define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos) +#define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted +#define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos) +#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITλ 0 SD_DetectÒý½Å +#define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos) +#define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off +#define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos) +#define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V +#define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos) + +#define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable +#define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos) +#define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready +#define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos) +#define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable +#define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos) +#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ²»·ÖƵ 0x01 2·ÖƵ 0x02 4·ÖƵ 0x04 8·ÖƵ 0x08 16·ÖƵ ... 0x80 256·ÖƵ +#define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos) +#define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27 +#define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos) +#define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All +#define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos) +#define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line +#define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos) +#define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line +#define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos) + +#define SDIO_IF_CMDDONE_Pos 0 +#define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos) +#define SDIO_IF_TRXDONE_Pos 1 +#define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos) +#define SDIO_IF_BLKGAP_Pos 2 +#define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos) +#define SDIO_IF_DMADONE_Pos 3 +#define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos) +#define SDIO_IF_BUFWRRDY_Pos 4 +#define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos) +#define SDIO_IF_BUFRDRDY_Pos 5 +#define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos) +#define SDIO_IF_CARDINSR_Pos 6 +#define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos) +#define SDIO_IF_CARDRMOV_Pos 7 +#define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos) +#define SDIO_IF_CARD_Pos 8 +#define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos) +#define SDIO_IF_ERROR_Pos 15 +#define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos) +#define SDIO_IF_CMDTIMEOUT_Pos 16 +#define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos) +#define SDIO_IF_CMDCRCERR_Pos 17 +#define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos) +#define SDIO_IF_CMDENDERR_Pos 18 +#define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos) +#define SDIO_IF_CMDIDXERR_Pos 19 +#define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos) +#define SDIO_IF_DATTIMEOUT_Pos 20 +#define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos) +#define SDIO_IF_DATCRCERR_Pos 21 +#define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos) +#define SDIO_IF_DATENDERR_Pos 22 +#define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos) +#define SDIO_IF_CURLIMERR_Pos 23 +#define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos) +#define SDIO_IF_CMD12ERR_Pos 24 +#define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos) +#define SDIO_IF_DMAERR_Pos 25 +#define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos) +#define SDIO_IF_RESPERR_Pos 28 +#define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos) + +#define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable +#define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos) +#define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable +#define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos) +#define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable +#define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos) +#define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable +#define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos) +#define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable +#define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos) +#define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable +#define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos) +#define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable +#define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos) +#define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable +#define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos) +#define SDIO_IE_CARD_Pos 8 +#define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos) +#define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable +#define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos) +#define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable +#define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos) +#define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable +#define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos) +#define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable +#define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos) +#define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable +#define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos) +#define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable +#define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos) +#define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable +#define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos) +#define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable +#define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos) +#define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable +#define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos) +#define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable +#define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos) +#define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable +#define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos) + +#define SDIO_IM_CMDDONE_Pos 0 +#define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos) +#define SDIO_IM_TRXDONE_Pos 1 +#define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos) +#define SDIO_IM_BLKGAP_Pos 2 +#define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos) +#define SDIO_IM_DMADONE_Pos 3 +#define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos) +#define SDIO_IM_BUFWRRDY_Pos 4 +#define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos) +#define SDIO_IM_BUFRDRDY_Pos 5 +#define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos) +#define SDIO_IM_CARDINSR_Pos 6 +#define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos) +#define SDIO_IM_CARDRMOV_Pos 7 +#define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos) +#define SDIO_IM_CARD_Pos 8 +#define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos) +#define SDIO_IM_CMDTIMEOUT_Pos 16 +#define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos) +#define SDIO_IM_CMDCRCERR_Pos 17 +#define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos) +#define SDIO_IM_CMDENDERR_Pos 18 +#define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos) +#define SDIO_IM_CMDIDXERR_Pos 19 +#define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos) +#define SDIO_IM_DATTIMEOUT_Pos 20 +#define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos) +#define SDIO_IM_DATCRCERR_Pos 21 +#define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos) +#define SDIO_IM_DATENDERR_Pos 22 +#define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos) +#define SDIO_IM_CURLIMERR_Pos 23 +#define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos) +#define SDIO_IM_CMD12ERR_Pos 24 +#define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos) +#define SDIO_IM_DMAERR_Pos 25 +#define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos) +#define SDIO_IM_RESPERR_Pos 28 +#define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos) + + + + +typedef struct { + __IO uint32_t DATA; + __IO uint32_t ADDR; + __IO uint32_t ERASE; + __IO uint32_t CACHE; + __IO uint32_t CFG0; + __IO uint32_t CFG1; + __IO uint32_t CFG2; + __IO uint32_t CFG3; + __IO uint32_t STAT; } FLASH_Typedef; -#define FLASH_ERASE_REQ_Pos 31 -#define FLASH_ERASE_REQ_Msk (0x01u << FLASH_ERASE_REQ_Pos) -#define FLASH_CACHE_PROG_Pos 2 -#define FLASH_CACHE_PROG_Msk (0x01 << FLASH_CACHE_PROG_Pos) -#define FLASH_CACHE_CLEAR_Pos 3 -#define FLASH_CACHE_CLEAR_Msk (0x01 << FLASH_CACHE_CLEAR_Pos) +#define FLASH_ERASE_REQ_Pos 31 +#define FLASH_ERASE_REQ_Msk (0x01u<< FLASH_ERASE_REQ_Pos) -#define FLASH_STAT_ERASE_GOING_Pos 0 -#define FLASH_STAT_ERASE_GOING_Msk (0X01 << FLASH_STAT_ERASE_GOING_Pos) -#define FLASH_STAT_PROG_GOING_Pos 1 -#define FLASH_STAT_PROG_GOING_Msk (0x01 << FLASH_STAT_PROG_GOING_Pos) -#define FALSH_STAT_FIFO_EMPTY_Pos 3 -#define FLASH_STAT_FIFO_EMPTY_Msk (0x01 << FALSH_STAT_FIFO_EMPTY_Pos) -#define FALSH_STAT_FIFO_FULL_Pos 4 -#define FLASH_STAT_FIFO_FULL_Msk (0x01 << FALSH_STAT_FIFO_FULL_Pos) +#define FLASH_CACHE_PROG_Pos 2 +#define FLASH_CACHE_PROG_Msk (0x01 << FLASH_CACHE_PROG_Pos) +#define FLASH_CACHE_CLEAR_Pos 3 +#define FLASH_CACHE_CLEAR_Msk (0x01 << FLASH_CACHE_CLEAR_Pos) -typedef struct -{ +#define FLASH_STAT_ERASE_GOING_Pos 0 +#define FLASH_STAT_ERASE_GOING_Msk (0X01 << FLASH_STAT_ERASE_GOING_Pos) +#define FLASH_STAT_PROG_GOING_Pos 1 +#define FLASH_STAT_PROG_GOING_Msk (0x01 << FLASH_STAT_PROG_GOING_Pos) +#define FALSH_STAT_FIFO_EMPTY_Pos 3 +#define FLASH_STAT_FIFO_EMPTY_Msk (0x01 << FALSH_STAT_FIFO_EMPTY_Pos) +#define FALSH_STAT_FIFO_FULL_Pos 4 +#define FLASH_STAT_FIFO_FULL_Msk (0x01 << FALSH_STAT_FIFO_FULL_Pos) + + + + +typedef struct { __IO uint32_t CR; } SRAMC_TypeDef; -#define SRAMC_CR_RWTIME_Pos 0 //读写æ“�作æŒ�续多少个时钟周期。0表示1个时钟周期。最å°�设置为4 -#define SRAMC_CR_RWTIME_Msk (0x0F << SRAMC_CR_RWTIME_Pos) -#define SRAMC_CR_BYTEIF_Pos 4 //外部SRAMæ•°æ�®å®½åº¦ï¼Œ0 16ä½� 1 8ä½� -#define SRAMC_CR_BYTEIF_Msk (0x01 << SRAMC_CR_BYTEIF_Pos) -#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]为地å�€çº¿ 0 ADDR[23]为高字节使能,ADDR[22]为低字节使能 -#define SRAMC_CR_HBLBDIS_Msk (0x01 << SRAMC_CR_HBLBDIS_Pos) -typedef struct -{ - __IO uint32_t CR0; - - __IO uint32_t CR1; +#define SRAMC_CR_RWTIME_Pos 0 //¶Áд²Ù×÷³ÖÐø¶àÉÙ¸öʱÖÓÖÜÆÚ¡£0±íʾ1¸öʱÖÓÖÜÆÚ¡£×îСÉèÖÃΪ4 +#define SRAMC_CR_RWTIME_Msk (0x0F << SRAMC_CR_RWTIME_Pos) +#define SRAMC_CR_BYTEIF_Pos 4 //ÍⲿSRAMÊý¾Ý¿í¶È£¬0 16λ 1 8λ +#define SRAMC_CR_BYTEIF_Msk (0x01 << SRAMC_CR_BYTEIF_Pos) +#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]ΪµØÖ·Ïß 0 ADDR[23]Ϊ¸ß×Ö½ÚʹÄÜ£¬ADDR[22]ΪµÍ×Ö½ÚʹÄÜ +#define SRAMC_CR_HBLBDIS_Msk (0x01 << SRAMC_CR_HBLBDIS_Pos) - __IO uint32_t REFRESH; - __IO uint32_t NOPNUM; //[15:0] åˆ�始化完æˆ�å�Žï¼Œåœ¨æ­£å¸¸æ“�作之å‰�,å�‘é€�多少个NOP命令 +typedef struct { + __IO uint32_t CR0; + + __IO uint32_t CR1; + + __IO uint32_t REFRESH; + + __IO uint32_t NOPNUM; //[15:0] ³õʼ»¯Íê³Éºó£¬ÔÚÕý³£²Ù×÷֮ǰ£¬·¢ËͶàÉÙ¸öNOPÃüÁî + __IO uint32_t LATCH; - - __IO uint32_t REFDONE; //[0] Frefresh Done,上电åˆ�始化完æˆ� + + __IO uint32_t REFDONE; //[0] Frefresh Done£¬Éϵç³õʼ»¯Íê³É } SDRAMC_TypeDef; -#define SDRAMC_CR0_BURSTLEN_Pos 0 //å¿…é¡»å�–2,表示Burst Length为4 -#define SDRAMC_CR0_BURSTLEN_Msk (0x07 << SDRAMC_CR0_BURSTLEN_Pos) -#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency, 2 2 3 3 -#define SDRAMC_CR0_CASDELAY_Msk (0x07 << SDRAMC_CR0_CASDELAY_Pos) - -#define SDRAMC_CR1_TRP_Pos 0 -#define SDRAMC_CR1_TRP_Msk (0x07 << SDRAMC_CR1_TRP_Pos) -#define SDRAMC_CR1_TRCD_Pos 3 -#define SDRAMC_CR1_TRCD_Msk (0x07 << SDRAMC_CR1_TRCD_Pos) -#define SDRAMC_CR1_TRC_Pos 6 -#define SDRAMC_CR1_TRC_Msk (0x0F << SDRAMC_CR1_TRC_Pos) -#define SDRAMC_CR1_TRAS_Pos 10 -#define SDRAMC_CR1_TRAS_Msk (0x07 << SDRAMC_CR1_TRAS_Pos) -#define SDRAMC_CR1_TRRD_Pos 13 -#define SDRAMC_CR1_TRRD_Msk (0x03 << SDRAMC_CR1_TRRD_Pos) -#define SDRAMC_CR1_TMRD_Pos 15 -#define SDRAMC_CR1_TMRD_Msk (0x07 << SDRAMC_CR1_TMRD_Pos) -#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMC的接å�£æ•°æ�®ä½�宽,1 32bit 0 16bit -#define SDRAMC_CR1_32BIT_Msk (0x01 << SDRAMC_CR1_32BIT_Pos) -#define SDRAMC_CR1_BANK_Pos 19 //SDRAMæ¯�个颗粒有几个bank,0 2 banks 1 4 banks -#define SDRAMC_CR1_BANK_Msk (0x01 << SDRAMC_CR1_BANK_Pos) -#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM颗粒的ä½�宽,1 32bit 0 16bit -#define SDRAMC_CR1_CELL32BIT_Msk (0x01 << SDRAMC_CR1_CELL32BIT_Pos) -#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM颗粒的容é‡�,0 64Mb 1 128Mb 2 256Mb 3 16Mb -#define SDRAMC_CR1_CELLSIZE_Msk (0x03 << SDRAMC_CR1_CELLSIZE_Pos) -#define SDRAMC_CR1_HIGHSPEED_Pos 23 //当hclk大于100MHz时,这一ä½�å¿…é¡»é…�置为1,å�¦åˆ™ä¸º0 -#define SDRAMC_CR1_HIGHSPEED_Msk (0x01 << SDRAMC_CR1_HIGHSPEED_Pos) - -#define SDRAMC_REFRESH_RATE_Pos 0 -#define SDRAMC_REFRESH_RATE_Msk (0xFFF << SDRAMC_REFRESH_RATE_Pos) -#define SDRAMC_REFRESH_EN_Pos 12 -#define SDRAMC_REFRESH_EN_Msk (0x01 << SDRAMC_REFRESH_EN_Pos) - -#define SDRAMC_LATCH_INEDGE_Pos 0 //哪个沿æ�¥é”�存从SDRAM中读回的数æ�®ï¼Œ0 上å�‡æ²¿ 1 下é™�沿 -#define SDRAMC_LATCH_INEDGE_Msk (0x01 << SDRAMC_LATCH_INEDGE_Pos) -#define SDRAMC_LATCH_OUTEDGE_Pos 1 //哪个沿去é”�å­˜é€�ç»™SDRAM的数æ�®ï¼Œ1 上å�‡æ²¿ 0 下é™�沿 -#define SDRAMC_LATCH_OUTEDGE_Msk (0x01 << SDRAMC_LATCH_OUTEDGE_Pos) -#define SDRAMC_LATCH_WAITST_Pos 2 -#define SDRAMC_LATCH_WAITST_Msk (0x01 << SDRAMC_LATCH_WAITST_Pos) - -typedef struct -{ - __IO uint32_t IE; - - __IO uint32_t IF; //写1清零 +#define SDRAMC_CR0_BURSTLEN_Pos 0 //±ØÐëÈ¡2£¬±íʾBurst LengthΪ4 +#define SDRAMC_CR0_BURSTLEN_Msk (0x07 << SDRAMC_CR0_BURSTLEN_Pos) +#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency£¬ 2 2 3 3 +#define SDRAMC_CR0_CASDELAY_Msk (0x07 << SDRAMC_CR0_CASDELAY_Pos) + +#define SDRAMC_CR1_TRP_Pos 0 +#define SDRAMC_CR1_TRP_Msk (0x07 << SDRAMC_CR1_TRP_Pos) +#define SDRAMC_CR1_TRCD_Pos 3 +#define SDRAMC_CR1_TRCD_Msk (0x07 << SDRAMC_CR1_TRCD_Pos) +#define SDRAMC_CR1_TRC_Pos 6 +#define SDRAMC_CR1_TRC_Msk (0x0F << SDRAMC_CR1_TRC_Pos) +#define SDRAMC_CR1_TRAS_Pos 10 +#define SDRAMC_CR1_TRAS_Msk (0x07 << SDRAMC_CR1_TRAS_Pos) +#define SDRAMC_CR1_TRRD_Pos 13 +#define SDRAMC_CR1_TRRD_Msk (0x03 << SDRAMC_CR1_TRRD_Pos) +#define SDRAMC_CR1_TMRD_Pos 15 +#define SDRAMC_CR1_TMRD_Msk (0x07 << SDRAMC_CR1_TMRD_Pos) +#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMCµÄ½Ó¿ÚÊý¾Ýλ¿í£¬1 32bit 0 16bit +#define SDRAMC_CR1_32BIT_Msk (0x01 << SDRAMC_CR1_32BIT_Pos) +#define SDRAMC_CR1_BANK_Pos 19 //SDRAMÿ¸ö¿ÅÁ£Óм¸¸öbank£¬0 2 banks 1 4 banks +#define SDRAMC_CR1_BANK_Msk (0x01 << SDRAMC_CR1_BANK_Pos) +#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM¿ÅÁ£µÄλ¿í£¬1 32bit 0 16bit +#define SDRAMC_CR1_CELL32BIT_Msk (0x01 << SDRAMC_CR1_CELL32BIT_Pos) +#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM¿ÅÁ£µÄÈÝÁ¿£¬0 64Mb 1 128Mb 2 256Mb 3 16Mb +#define SDRAMC_CR1_CELLSIZE_Msk (0x03 << SDRAMC_CR1_CELLSIZE_Pos) +#define SDRAMC_CR1_HIGHSPEED_Pos 23 //µ±hclk´óÓÚ100MHzʱ£¬Õâһλ±ØÐëÅäÖÃΪ1£¬·ñÔòΪ0 +#define SDRAMC_CR1_HIGHSPEED_Msk (0x01 << SDRAMC_CR1_HIGHSPEED_Pos) + +#define SDRAMC_REFRESH_RATE_Pos 0 +#define SDRAMC_REFRESH_RATE_Msk (0xFFF << SDRAMC_REFRESH_RATE_Pos) +#define SDRAMC_REFRESH_EN_Pos 12 +#define SDRAMC_REFRESH_EN_Msk (0x01 << SDRAMC_REFRESH_EN_Pos) + +#define SDRAMC_LATCH_INEDGE_Pos 0 //ÄĸöÑØÀ´Ëø´æ´ÓSDRAMÖжÁ»ØµÄÊý¾Ý£¬0 ÉÏÉýÑØ 1 ϽµÑØ +#define SDRAMC_LATCH_INEDGE_Msk (0x01 << SDRAMC_LATCH_INEDGE_Pos) +#define SDRAMC_LATCH_OUTEDGE_Pos 1 //ÄĸöÑØÈ¥Ëø´æË͸øSDRAMµÄÊý¾Ý£¬1 ÉÏÉýÑØ 0 ϽµÑØ +#define SDRAMC_LATCH_OUTEDGE_Msk (0x01 << SDRAMC_LATCH_OUTEDGE_Pos) +#define SDRAMC_LATCH_WAITST_Pos 2 +#define SDRAMC_LATCH_WAITST_Msk (0x01 << SDRAMC_LATCH_WAITST_Pos) + + + + +typedef struct { + __IO uint32_t IE; + + __IO uint32_t IF; //д1ÇåÁã + __IO uint32_t IM; - + __IO uint32_t CR; - + __IO uint32_t ADDR; - + __IO uint32_t CMD; } NORFLC_TypeDef; -#define NORFLC_IE_FINISH_Pos 0 -#define NORFLC_IE_FINISH_Msk (0x01 << NORFLC_IE_FINISH_Pos) -#define NORFLC_IE_TIMEOUT_Pos 1 -#define NORFLC_IE_TIMEOUT_Msk (0x01 << NORFLC_IE_TIMEOUT_Pos) - -#define NORFLC_IF_FINISH_Pos 0 -#define NORFLC_IF_FINISH_Msk (0x01 << NORFLC_IF_FINISH_Pos) -#define NORFLC_IF_TIMEOUT_Pos 1 -#define NORFLC_IF_TIMEOUT_Msk (0x01 << NORFLC_IF_TIMEOUT_Pos) - -#define NORFLC_IM_FINISH_Pos 0 -#define NORFLC_IM_FINISH_Msk (0x01 << NORFLC_IM_FINISH_Pos) -#define NORFLC_IM_TIMEOUT_Pos 1 -#define NORFLC_IM_TIMEOUT_Msk (0x01 << NORFLC_IM_TIMEOUT_Pos) - -#define NORFLC_CR_RDTIME_Pos 0 //Oen下é™�沿å�Žå¤šå°‘个时钟周期å�Žé‡‡æ ·è¯»å›žçš„æ•°æ�®ã€‚0表示1个时钟周期 -#define NORFLC_CR_RDTIME_Msk (0x1F << NORFLC_CR_RDTIME_Pos) -#define NORFLC_CR_WRTIME_Pos 5 //输出Wen的低电平宽度。0表示1个时钟周期 -#define NORFLC_CR_WRTIME_Msk (0x07 << NORFLC_CR_WRTIME_Pos) -#define NORFLC_CR_BYTEIF_Pos 8 //外部NOR FLASHæ•°æ�®å®½åº¦ï¼Œ1 8ä½� 0 16ä½� -#define NORFLC_CR_BYTEIF_Msk (0x01 << NORFLC_CR_BYTEIF_Pos) - -#define NORFLC_CMD_DATA_Pos 0 //在PROGRAM命令中,DATA是è¦�写入NOR FLASH的数æ�®ï¼›åœ¨READ命令中,DATA是从NOR FLASH读回的数æ�® -#define NORFLC_CMD_DATA_Msk (0xFFFF << NORFLC_CMD_DATA_Pos) -#define NORFLC_CMD_CMD_Pos 16 //需è¦�执行的命令,0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE -#define NORFLC_CMD_CMD_Msk (0x07 << NORFLC_CMD_CMD_Pos) - -typedef struct -{ - __IO uint32_t CR; - __O uint32_t DATAIN; +#define NORFLC_IE_FINISH_Pos 0 +#define NORFLC_IE_FINISH_Msk (0x01 << NORFLC_IE_FINISH_Pos) +#define NORFLC_IE_TIMEOUT_Pos 1 +#define NORFLC_IE_TIMEOUT_Msk (0x01 << NORFLC_IE_TIMEOUT_Pos) - __IO uint32_t INIVAL; +#define NORFLC_IF_FINISH_Pos 0 +#define NORFLC_IF_FINISH_Msk (0x01 << NORFLC_IF_FINISH_Pos) +#define NORFLC_IF_TIMEOUT_Pos 1 +#define NORFLC_IF_TIMEOUT_Msk (0x01 << NORFLC_IF_TIMEOUT_Pos) - __I uint32_t RESULT; -} CRC_TypeDef; +#define NORFLC_IM_FINISH_Pos 0 +#define NORFLC_IM_FINISH_Msk (0x01 << NORFLC_IM_FINISH_Pos) +#define NORFLC_IM_TIMEOUT_Pos 1 +#define NORFLC_IM_TIMEOUT_Msk (0x01 << NORFLC_IM_TIMEOUT_Pos) -#define CRC_CR_EN_Pos 0 -#define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos) -#define CRC_CR_OREV_Pos 1 //输出结果是å�¦ç¿»è½¬ -#define CRC_CR_OREV_Msk (0x01 << CRC_CR_OREV_Pos) -#define CRC_CR_ONOT_Pos 2 //输出结果是å�¦å�–å�� -#define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos) -#define CRC_CR_CRC16_Pos 3 //1 CRC16 0 CRC32 -#define CRC_CR_CRC16_Msk (0x01 << CRC_CR_CRC16_Pos) -#define CRC_CR_IBITS_Pos 4 //输入数æ�®æœ‰æ•ˆä½�æ•° 0 32ä½� 1 16ä½� 2 8ä½� -#define CRC_CR_IBITS_Msk (0x03 << CRC_CR_IBITS_Pos) - -typedef struct -{ - __IO uint32_t MINSEC; //分秒计数 +#define NORFLC_CR_RDTIME_Pos 0 //OenϽµÑغó¶àÉÙ¸öʱÖÓÖÜÆÚºó²ÉÑù¶Á»ØµÄÊý¾Ý¡£0±íʾ1¸öʱÖÓÖÜÆÚ +#define NORFLC_CR_RDTIME_Msk (0x1F << NORFLC_CR_RDTIME_Pos) +#define NORFLC_CR_WRTIME_Pos 5 //Êä³öWenµÄµÍµçƽ¿í¶È¡£0±íʾ1¸öʱÖÓÖÜÆÚ +#define NORFLC_CR_WRTIME_Msk (0x07 << NORFLC_CR_WRTIME_Pos) +#define NORFLC_CR_BYTEIF_Pos 8 //ÍⲿNOR FLASHÊý¾Ý¿í¶È£¬1 8λ 0 16λ +#define NORFLC_CR_BYTEIF_Msk (0x01 << NORFLC_CR_BYTEIF_Pos) - __IO uint32_t DATHUR; //日时计数 +#define NORFLC_CMD_DATA_Pos 0 //ÔÚPROGRAMÃüÁîÖУ¬DATAÊÇҪдÈëNOR FLASHµÄÊý¾Ý£»ÔÚREADÃüÁîÖУ¬DATAÊÇ´ÓNOR FLASH¶Á»ØµÄÊý¾Ý +#define NORFLC_CMD_DATA_Msk (0xFFFF << NORFLC_CMD_DATA_Pos) +#define NORFLC_CMD_CMD_Pos 16 //ÐèÒªÖ´ÐеÄÃüÁ0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE +#define NORFLC_CMD_CMD_Msk (0x07 << NORFLC_CMD_CMD_Pos) - __IO uint32_t MONDAY; //月周计数 - __IO uint32_t YEAR; //[11:0] 年计数,支æŒ�1901-2199 - __IO uint32_t MINSECAL; //分秒闹铃设置 - __IO uint32_t DAYHURAL; //周时闹铃设置 +typedef struct { + __IO uint32_t CR; + + __O uint32_t DATAIN; + + __IO uint32_t INIVAL; + + __I uint32_t RESULT; +} CRC_TypeDef; - __IO uint32_t LOAD; //将设置寄存器中的值å�Œæ­¥åˆ°RTC中,å�Œæ­¥å®Œæˆ�自动清零 +#define CRC_CR_EN_Pos 0 +#define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos) +#define CRC_CR_OREV_Pos 1 //Êä³ö½á¹ûÊÇ·ñ·­×ª +#define CRC_CR_OREV_Msk (0x01 << CRC_CR_OREV_Pos) +#define CRC_CR_ONOT_Pos 2 //Êä³ö½á¹ûÊÇ·ñÈ¡·´ +#define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos) +#define CRC_CR_CRC16_Pos 3 //1 CRC16 0 CRC32 +#define CRC_CR_CRC16_Msk (0x01 << CRC_CR_CRC16_Pos) +#define CRC_CR_IBITS_Pos 4 //ÊäÈëÊý¾ÝÓÐЧλÊý 0 32λ 1 16λ 2 8λ +#define CRC_CR_IBITS_Msk (0x03 << CRC_CR_IBITS_Pos) + + + + +typedef struct { + __IO uint32_t MINSEC; //·ÖÃë¼ÆÊý + + __IO uint32_t DATHUR; //ÈÕʱ¼ÆÊý + + __IO uint32_t MONDAY; //ÔÂÖܼÆÊý + + __IO uint32_t YEAR; //[11:0] Äê¼ÆÊý£¬Ö§³Ö1901-2199 + + __IO uint32_t MINSECAL; //·ÖÃëÄÖÁåÉèÖà + + __IO uint32_t DAYHURAL; //ÖÜʱÄÖÁåÉèÖà + + __IO uint32_t LOAD; //½«ÉèÖüĴæÆ÷ÖеÄֵͬ²½µ½RTCÖУ¬Í¬²½Íê³É×Ô¶¯ÇåÁã + __IO uint32_t IE; - - __IO uint32_t IF; //写1清零 - - __IO uint32_t EN; //[0] 1 RTC使能 - - __IO uint32_t CFGABLE; //[0] 1 RTCå�¯é…�ç½® - - __IO uint32_t TRIM; //时钟调整 - - __IO uint32_t TRIMM; //时钟微调整 + + __IO uint32_t IF; //д1ÇåÁã + + __IO uint32_t EN; //[0] 1 RTCʹÄÜ + + __IO uint32_t CFGABLE; //[0] 1 RTC¿ÉÅäÖà + + __IO uint32_t TRIM; //ʱÖÓµ÷Õû + + __IO uint32_t TRIMM; //ʱÖÓ΢µ÷Õû } RTC_TypeDef; -#define RTC_LOAD_TIME_Pos 0 -#define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos) -#define RTC_LOAD_ALARM_Pos 1 -#define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos) - -#define RTC_MINSEC_SEC_Pos 0 //秒计数,å�–值0--59 -#define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos) -#define RTC_MINSEC_MIN_Pos 6 //分钟计数,å�–值0--59 -#define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos) - -#define RTC_DATHUR_HOUR_Pos 0 //å°�时计数,å�–值0--23 -#define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos) -#define RTC_DATHUR_DATE_Pos 5 //date of month,å�–值1--31 -#define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos) - -#define RTC_MONDAY_DAY_Pos 0 //day of week,å�–值0--6 -#define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos) -#define RTC_MONDAY_MON_Pos 3 //月份计数,å�–值1--12 -#define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos) - -#define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置 -#define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos) -#define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置 -#define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos) - -#define RTC_DAYHURAL_HOUR_Pos 0 //闹钟å°�时设置 -#define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos) -#define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效 -#define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos) -#define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效 -#define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos) -#define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效 -#define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos) -#define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效 -#define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos) -#define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效 -#define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos) -#define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效 -#define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos) -#define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效 -#define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos) - -#define RTC_IE_SEC_Pos 0 //秒中断使能 -#define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos) -#define RTC_IE_MIN_Pos 1 -#define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos) -#define RTC_IE_HOUR_Pos 2 -#define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos) -#define RTC_IE_DATE_Pos 3 -#define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos) -#define RTC_IE_ALARM_Pos 4 -#define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos) - -#define RTC_IF_SEC_Pos 0 //写1清零 -#define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos) -#define RTC_IF_MIN_Pos 1 -#define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos) -#define RTC_IF_HOUR_Pos 2 -#define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos) -#define RTC_IF_DATE_Pos 3 -#define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos) -#define RTC_IF_ALARM_Pos 4 -#define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos) - -#define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,å�¦åˆ™è°ƒæ•´ä¸º32768+ADJ -#define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos) -#define RTC_TRIM_DEC_Pos 8 -#define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos) - -#define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,å�¦åˆ™è°ƒæ•´ä¸º(32768±ADJ)-1 \ - //cycles=0时,ä¸�进行微调整;cycles=1,则n为2ï¼›cycles=7,则n为8;以此类推 -#define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos) -#define RTC_TRIMM_INC_Pos 3 -#define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos) - -typedef struct -{ - __IO uint32_t LOAD; //喂狗使计数器装载LOAD值 - - __I uint32_t VALUE; - __IO uint32_t CR; +#define RTC_LOAD_TIME_Pos 0 +#define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos) +#define RTC_LOAD_ALARM_Pos 1 +#define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos) + +#define RTC_MINSEC_SEC_Pos 0 //Ãë¼ÆÊý£¬È¡Öµ0--59 +#define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos) +#define RTC_MINSEC_MIN_Pos 6 //·ÖÖÓ¼ÆÊý£¬È¡Öµ0--59 +#define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos) + +#define RTC_DATHUR_HOUR_Pos 0 //Сʱ¼ÆÊý£¬È¡Öµ0--23 +#define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos) +#define RTC_DATHUR_DATE_Pos 5 //date of month£¬È¡Öµ1--31 +#define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos) + +#define RTC_MONDAY_DAY_Pos 0 //day of week£¬È¡Öµ0--6 +#define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos) +#define RTC_MONDAY_MON_Pos 3 //Ô·ݼÆÊý£¬È¡Öµ1--12 +#define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos) + +#define RTC_MINSECAL_SEC_Pos 0 //ÄÖÖÓÃëÉèÖà +#define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos) +#define RTC_MINSECAL_MIN_Pos 6 //ÄÖÖÓ·ÖÖÓÉèÖà +#define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos) + +#define RTC_DAYHURAL_HOUR_Pos 0 //ÄÖÖÓСʱÉèÖà +#define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos) +#define RTC_DAYHURAL_SUN_Pos 5 //ÖÜÈÕÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos) +#define RTC_DAYHURAL_MON_Pos 6 //ÖÜÒ»ÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos) +#define RTC_DAYHURAL_TUE_Pos 7 //ÖܶþÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos) +#define RTC_DAYHURAL_WED_Pos 8 //ÖÜÈýÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos) +#define RTC_DAYHURAL_THU_Pos 9 //ÖÜËÄÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos) +#define RTC_DAYHURAL_FRI_Pos 10 //ÖÜÎåÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos) +#define RTC_DAYHURAL_SAT_Pos 11 //ÖÜÁùÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos) + +#define RTC_IE_SEC_Pos 0 //ÃëÖжÏʹÄÜ +#define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos) +#define RTC_IE_MIN_Pos 1 +#define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos) +#define RTC_IE_HOUR_Pos 2 +#define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos) +#define RTC_IE_DATE_Pos 3 +#define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos) +#define RTC_IE_ALARM_Pos 4 +#define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos) + +#define RTC_IF_SEC_Pos 0 //д1ÇåÁã +#define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos) +#define RTC_IF_MIN_Pos 1 +#define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos) +#define RTC_IF_HOUR_Pos 2 +#define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos) +#define RTC_IF_DATE_Pos 3 +#define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos) +#define RTC_IF_ALARM_Pos 4 +#define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos) + +#define RTC_TRIM_ADJ_Pos 0 //ÓÃÓÚµ÷ÕûBASECNTµÄ¼ÆÊýÖÜÆÚ£¬Ä¬ÈÏΪ32768£¬Èç¹ûDECΪ1£¬Ôò¼ÆÊýÖÜÆÚµ÷ÕûΪ32768-ADJ£¬·ñÔòµ÷ÕûΪ32768+ADJ +#define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos) +#define RTC_TRIM_DEC_Pos 8 +#define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos) + +#define RTC_TRIMM_CYCLE_Pos 0 //ÓÃÓÚ¼ÆÊýÖÜÆÚ΢µ÷£¬Èç¹ûINCΪ1£¬ÔòµÚn¸ö¼ÆÊýÖÜÆÚµ÷ÕûΪ(32768¡ÀADJ)+1,·ñÔòµ÷ÕûΪ(32768¡ÀADJ)-1 + //cycles=0ʱ£¬²»½øÐÐ΢µ÷Õû£»cycles=1£¬ÔònΪ2£»cycles=7£¬ÔònΪ8£»ÒÔ´ËÀàÍÆ +#define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos) +#define RTC_TRIMM_INC_Pos 3 +#define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos) + + + + +typedef struct { + __IO uint32_t LOAD; //ι¹·Ê¹¼ÆÊýÆ÷×°ÔØLOADÖµ + + __I uint32_t VALUE; + + __IO uint32_t CR; + + __IO uint32_t IF; //¼ÆÊýµ½0ʱӲ¼þÖÃ룬Èí¼þд1Çå³ý±êÖ¾ + + __IO uint32_t FEED; //д0x55ι¹· +} WDT_TypeDef; - __IO uint32_t IF; //计数到0时硬件置ä½�,软件写1清除标志 - __IO uint32_t FEED; //写0x55å–‚ç‹— -} WDT_TypeDef; +#define WDT_CR_EN_Pos 0 +#define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos) +#define WDT_CR_RSTEN_Pos 1 +#define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos) -#define WDT_CR_EN_Pos 0 -#define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos) -#define WDT_CR_RSTEN_Pos 1 -#define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos) /******************************************************************************/ /* Peripheral memory map */ /******************************************************************************/ -#define RAM_BASE 0x20000000 -#define AHB_BASE 0x40000000 -#define APB_BASE 0x40010000 +#define RAM_BASE 0x20000000 +#define AHB_BASE 0x40000000 +#define APB_BASE 0x40010000 -#define NORFLC_BASE 0x60000000 -#define NORFLM_BASE 0x61000000 +#define NORFLC_BASE 0x60000000 +#define NORFLM_BASE 0x61000000 -#define SRAMC_BASE 0x68000000 -#define SRAMM_BASE 0x69000000 +#define SRAMC_BASE 0x68000000 +#define SRAMM_BASE 0x69000000 -#define SDRAMC_BASE 0x78000000 -#define SDRAMM_BASE 0x70000000 +#define SDRAMC_BASE 0x78000000 +#define SDRAMM_BASE 0x70000000 /* AHB Peripheral memory map */ -#define SYS_BASE (AHB_BASE + 0x00000) +#define SYS_BASE (AHB_BASE + 0x00000) -#define DMA_BASE (AHB_BASE + 0x01000) +#define DMA_BASE (AHB_BASE + 0x01000) -#define LCD_BASE (AHB_BASE + 0x02000) +#define LCD_BASE (AHB_BASE + 0x02000) -#define CRC_BASE (AHB_BASE + 0x03000) +#define CRC_BASE (AHB_BASE + 0x03000) -#define SDIO_BASE (AHB_BASE + 0x04000) +#define SDIO_BASE (AHB_BASE + 0x04000) /* APB Peripheral memory map */ -#define PORT_BASE (APB_BASE + 0x00000) +#define PORT_BASE (APB_BASE + 0x00000) -#define GPIOA_BASE (APB_BASE + 0x01000) -#define GPIOB_BASE (APB_BASE + 0x02000) -#define GPIOC_BASE (APB_BASE + 0x03000) -#define GPIOD_BASE (APB_BASE + 0x04000) -#define GPIOM_BASE (APB_BASE + 0x05000) -#define GPION_BASE (APB_BASE + 0x06000) -#define GPIOP_BASE (APB_BASE + 0x08000) +#define GPIOA_BASE (APB_BASE + 0x01000) +#define GPIOB_BASE (APB_BASE + 0x02000) +#define GPIOC_BASE (APB_BASE + 0x03000) +#define GPIOD_BASE (APB_BASE + 0x04000) +#define GPIOM_BASE (APB_BASE + 0x05000) +#define GPION_BASE (APB_BASE + 0x06000) +#define GPIOP_BASE (APB_BASE + 0x08000) -#define TIMR0_BASE (APB_BASE + 0x07000) -#define TIMR1_BASE (APB_BASE + 0x0700C) -#define TIMR2_BASE (APB_BASE + 0x07018) -#define TIMR3_BASE (APB_BASE + 0x07024) -#define TIMR4_BASE (APB_BASE + 0x07030) -#define TIMR5_BASE (APB_BASE + 0x0703C) -#define TIMRG_BASE (APB_BASE + 0x07060) +#define TIMR0_BASE (APB_BASE + 0x07000) +#define TIMR1_BASE (APB_BASE + 0x0700C) +#define TIMR2_BASE (APB_BASE + 0x07018) +#define TIMR3_BASE (APB_BASE + 0x07024) +#define TIMR4_BASE (APB_BASE + 0x07030) +#define TIMR5_BASE (APB_BASE + 0x0703C) +#define TIMRG_BASE (APB_BASE + 0x07060) -#define WDT_BASE (APB_BASE + 0x09000) +#define WDT_BASE (APB_BASE + 0x09000) -#define PWM0_BASE (APB_BASE + 0x0A000) -#define PWM1_BASE (APB_BASE + 0x0A020) -#define PWM2_BASE (APB_BASE + 0x0A040) -#define PWM3_BASE (APB_BASE + 0x0A060) -#define PWM4_BASE (APB_BASE + 0x0A080) -#define PWM5_BASE (APB_BASE + 0x0A0A0) -#define PWMG_BASE (APB_BASE + 0x0A180) +#define PWM0_BASE (APB_BASE + 0x0A000) +#define PWM1_BASE (APB_BASE + 0x0A020) +#define PWM2_BASE (APB_BASE + 0x0A040) +#define PWM3_BASE (APB_BASE + 0x0A060) +#define PWM4_BASE (APB_BASE + 0x0A080) +#define PWM5_BASE (APB_BASE + 0x0A0A0) +#define PWMG_BASE (APB_BASE + 0x0A180) -#define RTC_BASE (APB_BASE + 0x0B000) +#define RTC_BASE (APB_BASE + 0x0B000) -#define ADC0_BASE (APB_BASE + 0x0C000) -#define ADC1_BASE (APB_BASE + 0x0D000) +#define ADC0_BASE (APB_BASE + 0x0C000) +#define ADC1_BASE (APB_BASE + 0x0D000) -#define FLASH_BASE (APB_BASE + 0x0F000) +#define FLASH_BASE (APB_BASE + 0x0F000) -#define UART0_BASE (APB_BASE + 0x10000) -#define UART1_BASE (APB_BASE + 0x11000) -#define UART2_BASE (APB_BASE + 0x12000) -#define UART3_BASE (APB_BASE + 0x13000) +#define UART0_BASE (APB_BASE + 0x10000) +#define UART1_BASE (APB_BASE + 0x11000) +#define UART2_BASE (APB_BASE + 0x12000) +#define UART3_BASE (APB_BASE + 0x13000) -#define I2C0_BASE (APB_BASE + 0x18000) -#define I2C1_BASE (APB_BASE + 0x19000) +#define I2C0_BASE (APB_BASE + 0x18000) +#define I2C1_BASE (APB_BASE + 0x19000) -#define SPI0_BASE (APB_BASE + 0x1C000) -#define SPI1_BASE (APB_BASE + 0x1D000) +#define SPI0_BASE (APB_BASE + 0x1C000) +#define SPI1_BASE (APB_BASE + 0x1D000) + +#define CAN_BASE (APB_BASE + 0x20000) -#define CAN_BASE (APB_BASE + 0x20000) /******************************************************************************/ /* Peripheral declaration */ /******************************************************************************/ -#define SYS ((SYS_TypeDef *)SYS_BASE) +#define SYS ((SYS_TypeDef *) SYS_BASE) + +#define PORT ((PORT_TypeDef *) PORT_BASE) -#define PORT ((PORT_TypeDef *)PORT_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOM ((GPIO_TypeDef *) GPIOM_BASE) +#define GPION ((GPIO_TypeDef *) GPION_BASE) +#define GPIOP ((GPIO_TypeDef *) GPIOP_BASE) -#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE) -#define GPIOB ((GPIO_TypeDef *)GPIOB_BASE) -#define GPIOC ((GPIO_TypeDef *)GPIOC_BASE) -#define GPIOM ((GPIO_TypeDef *)GPIOM_BASE) -#define GPION ((GPIO_TypeDef *)GPION_BASE) -#define GPIOP ((GPIO_TypeDef *)GPIOP_BASE) +#define TIMR0 ((TIMR_TypeDef *) TIMR0_BASE) +#define TIMR1 ((TIMR_TypeDef *) TIMR1_BASE) +#define TIMR2 ((TIMR_TypeDef *) TIMR2_BASE) +#define TIMR3 ((TIMR_TypeDef *) TIMR3_BASE) +#define TIMR4 ((TIMR_TypeDef *) TIMR4_BASE) +#define TIMR5 ((TIMR_TypeDef *) TIMR5_BASE) +#define TIMRG ((TIMRG_TypeDef*) TIMRG_BASE) -#define TIMR0 ((TIMR_TypeDef *)TIMR0_BASE) -#define TIMR1 ((TIMR_TypeDef *)TIMR1_BASE) -#define TIMR2 ((TIMR_TypeDef *)TIMR2_BASE) -#define TIMR3 ((TIMR_TypeDef *)TIMR3_BASE) -#define TIMR4 ((TIMR_TypeDef *)TIMR4_BASE) -#define TIMR5 ((TIMR_TypeDef *)TIMR5_BASE) -#define TIMRG ((TIMRG_TypeDef *)TIMRG_BASE) +#define UART0 ((UART_TypeDef *) UART0_BASE) +#define UART1 ((UART_TypeDef *) UART1_BASE) +#define UART2 ((UART_TypeDef *) UART2_BASE) +#define UART3 ((UART_TypeDef *) UART3_BASE) -#define UART0 ((UART_TypeDef *)UART0_BASE) -#define UART1 ((UART_TypeDef *)UART1_BASE) -#define UART2 ((UART_TypeDef *)UART2_BASE) -#define UART3 ((UART_TypeDef *)UART3_BASE) +#define SPI0 ((SPI_TypeDef *) SPI0_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) -#define SPI0 ((SPI_TypeDef *)SPI0_BASE) -#define SPI1 ((SPI_TypeDef *)SPI1_BASE) +#define I2C0 ((I2C_TypeDef *) I2C0_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) -#define I2C0 ((I2C_TypeDef *)I2C0_BASE) -#define I2C1 ((I2C_TypeDef *)I2C1_BASE) +#define ADC0 ((ADC_TypeDef *) ADC0_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) -#define ADC0 ((ADC_TypeDef *)ADC0_BASE) -#define ADC1 ((ADC_TypeDef *)ADC1_BASE) +#define PWM0 ((PWM_TypeDef *) PWM0_BASE) +#define PWM1 ((PWM_TypeDef *) PWM1_BASE) +#define PWM2 ((PWM_TypeDef *) PWM2_BASE) +#define PWM3 ((PWM_TypeDef *) PWM3_BASE) +#define PWM4 ((PWM_TypeDef *) PWM4_BASE) +#define PWM5 ((PWM_TypeDef *) PWM5_BASE) +#define PWMG ((PWMG_TypeDef *) PWMG_BASE) -#define PWM0 ((PWM_TypeDef *)PWM0_BASE) -#define PWM1 ((PWM_TypeDef *)PWM1_BASE) -#define PWM2 ((PWM_TypeDef *)PWM2_BASE) -#define PWM3 ((PWM_TypeDef *)PWM3_BASE) -#define PWM4 ((PWM_TypeDef *)PWM4_BASE) -#define PWM5 ((PWM_TypeDef *)PWM5_BASE) -#define PWMG ((PWMG_TypeDef *)PWMG_BASE) +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) -#define SDIO ((SDIO_TypeDef *)SDIO_BASE) +#define DMA ((DMA_TypeDef *) DMA_BASE) -#define DMA ((DMA_TypeDef *)DMA_BASE) +#define CAN ((CAN_TypeDef *) CAN_BASE) -#define CAN ((CAN_TypeDef *)CAN_BASE) +#define LCD ((LCD_TypeDef *) LCD_BASE) -#define LCD ((LCD_TypeDef *)LCD_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) -#define CRC ((CRC_TypeDef *)CRC_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) -#define RTC ((RTC_TypeDef *)RTC_BASE) +#define WDT ((WDT_TypeDef *) WDT_BASE) -#define WDT ((WDT_TypeDef *)WDT_BASE) +#define FLASH ((FLASH_Typedef*) FLASH_BASE) -#define FLASH ((FLASH_Typedef *)FLASH_BASE) +#define SRAMC ((SRAMC_TypeDef*) SRAMC_BASE) -#define SRAMC ((SRAMC_TypeDef *)SRAMC_BASE) +#define NORFLC ((NORFLC_TypeDef*) NORFLC_BASE) -#define NORFLC ((NORFLC_TypeDef *)NORFLC_BASE) +#define SDRAMC ((SDRAMC_TypeDef*) SDRAMC_BASE) -#define SDRAMC ((SDRAMC_TypeDef *)SDRAMC_BASE) -typedef void (*Func_void_void)(void); + +typedef void (* Func_void_void) (void); + #include "SWM320_port.h" #include "SWM320_gpio.h" @@ -3564,4 +3622,5 @@ typedef void (*Func_void_void)(void); #include "SWM320_rtc.h" #include "SWM320_wdt.h" + #endif //__SWM320_H__ diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c index c367b17d11..a99fa78fc9 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c @@ -1,262 +1,280 @@ -/****************************************************************************************************************************************** -* 文件å��ç§°: system_SWM320.c -* 功能说明: SWM320å�•片机的时钟设置 -* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* 注æ„�事项: -* 版本日期: V1.1.0 2017å¹´10月25æ—¥ -* å�‡çº§è®°å½•: +/****************************************************************************************************************************************** +* ÎļþÃû³Æ: system_SWM320.c +* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄʱÖÓÉèÖà +* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* ×¢ÒâÊÂÏî: +* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ +* Éý¼¶¼Ç¼: * * ******************************************************************************************************************************************* * @attention * -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION -* REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE -* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION +* REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE +* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN- * -ECTION WITH THEIR PRODUCTS. * * COPYRIGHT 2012 Synwit Technology -*******************************************************************************************************************************************/ +*******************************************************************************************************************************************/ #include #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_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 SYS_CLK_PLL -#define SYS_CLK_DIV_1 0 -#define SYS_CLK_DIV_2 1 -#define SYS_CLK_DIV SYS_CLK_DIV_1 +#define SYS_CLK_DIV_1 0 +#define SYS_CLK_DIV_2 1 -#define __HSI (20000000UL) //高速内部时钟 -#define __LSI (32000UL) //低速内部时钟 -#define __HSE (20000000UL) //高速外部时钟 +#define SYS_CLK_DIV SYS_CLK_DIV_1 -/********************************** 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 __HSI (20000000UL) //¸ßËÙÄÚ²¿Ê±ÖÓ +#define __LSI ( 32000UL) //µÍËÙÄÚ²¿Ê±ÖÓ +#define __HSE (20000000UL) //¸ßËÙÍⲿʱÖÓ -#define PLL_FB_DIV 60 -#define PLL_OUT_DIV8 0 -#define PLL_OUT_DIV4 1 -#define PLL_OUT_DIV2 2 +/********************************** 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_OUT_DIV PLL_OUT_DIV8 +#define PLL_IN_DIV 5 -uint32_t SystemCoreClock = __HSI; //System Clock Frequency (Core Clock) -uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second +#define PLL_FB_DIV 60 -/****************************************************************************************************************************************** -* 函数å��ç§°: -* 功能说明: This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed -* 输 å…¥: -* 输 出: -* 注æ„�事项: -******************************************************************************************************************************************/ -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; - } - } +#define PLL_OUT_DIV8 0 +#define PLL_OUT_DIV4 1 +#define PLL_OUT_DIV2 2 - if (SYS->CLKDIV & SYS_CLKDIV_SYS_Msk) - SystemCoreClock /= 2; +#define PLL_OUT_DIV PLL_OUT_DIV8 - CyclesPerUs = SystemCoreClock / 1000000; -} - -/****************************************************************************************************************************************** -* 函数å��ç§°: -* 功能说明: The necessary initializaiton of systerm -* 输 å…¥: -* 输 出: -* 注æ„�事项: -******************************************************************************************************************************************/ -void SystemInit(void) -{ - SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos); - switch (SYS_CLK) - { - case SYS_CLK_20MHz: //0 内部高频20MHz RC振è�¡å™¨ - switchCLK_20MHz(); - break; - case SYS_CLK_40MHz: //1 内部高频40MHz RC振è�¡å™¨ - switchCLK_40MHz(); - break; +uint32_t SystemCoreClock = __HSI; //System Clock Frequency (Core Clock) +uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second - 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); +/****************************************************************************************************************************************** +* º¯ÊýÃû³Æ: +* ¹¦ÄÜ˵Ã÷: This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed +* Êä Èë: +* Êä ³ö: +* ×¢ÒâÊÂÏî: +******************************************************************************************************************************************/ +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; +} - SystemCoreClockUpdate(); +/****************************************************************************************************************************************** +* º¯ÊýÃû³Æ: +* ¹¦ÄÜ˵Ã÷: The necessary initializaiton of systerm +* Êä Èë: +* Êä ³ö: +* ×¢ÒâÊÂÏî: +******************************************************************************************************************************************/ +void SystemInit(void) +{ + SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos); + + Flash_Param_at_xMHz(120); + + switch(SYS_CLK) + { + case SYS_CLK_20MHz: //0 ÄÚ²¿¸ßƵ20MHz RCÕñµ´Æ÷ + 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Ëø¶¨ } diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h index 4db7f29433..3967e4059c 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h @@ -2,24 +2,28 @@ #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 void SystemInit(void); +extern uint32_t SystemCoreClock; // System Clock Frequency (Core Clock) +extern uint32_t CyclesPerUs; // Cycles per micro second - 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 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 PLLInit(void); #ifdef __cplusplus } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c index 7f5f64e84e..8f73ec62c9 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_adc.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄADCÊýģת»»Æ÷¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_adc.c +* 功能说明: SWM320å�•片机的ADC数模转æ�¢å™¨åŠŸèƒ½é©±åŠ¨åº“ +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: ******************************************************************************************************************************************* * @attention * @@ -21,12 +21,12 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Init() -* ¹¦ÄÜ˵Ã÷: ADCÄ£Êýת»»Æ÷³õʼ»¯ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬ÓÐЧֵ°üÀ¨ADC0¡¢ADC1 -* ADC_InitStructure * initStruct °üº¬ADC¸÷Ïà¹Ø¶¨ÖµµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Init() +* 功能说明: ADC模数转æ�¢å™¨åˆ�始化 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,有效值包括ADC0ã€�ADC1 +* ADC_InitStructure * initStruct 包å�«ADCå�„相关定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct) { @@ -41,7 +41,7 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct) break; } - ADC_Close(ADCx); //һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚADC¹Ø±ÕʱÉèÖà + ADC_Close(ADCx); //一些关键寄存器å�ªèƒ½åœ¨ADC关闭时设置 if(initStruct->clk_src == ADC_CLKSRC_HRC) { @@ -80,7 +80,7 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct) (initStruct->trig_src << ADC_CTRL_TRIG_Pos) | (initStruct->Continue << ADC_CTRL_CONT_Pos); - ADCx->IF = 0xFFFFFFFF; //Çå³ýÖжϱêÖ¾ + 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); @@ -153,11 +153,11 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Open() -* ¹¦ÄÜ˵Ã÷: ADC¿ªÆô£¬¿ÉÒÔÈí¼þÆô¶¯¡¢»òÓ²¼þ´¥·¢ADCת»» -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Open() +* 功能说明: ADCå¼€å�¯ï¼Œå�¯ä»¥è½¯ä»¶å�¯åЍã€�或硬件触å�‘ADC转æ�¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_Open(ADC_TypeDef * ADCx) { @@ -165,11 +165,11 @@ void ADC_Open(ADC_TypeDef * ADCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Close() -* ¹¦ÄÜ˵Ã÷: ADC¹Ø±Õ£¬ÎÞ·¨Èí¼þÆô¶¯¡¢»òÓ²¼þ´¥·¢ADCת»» -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Close() +* 功能说明: ADC关闭,无法软件å�¯åЍã€�或硬件触å�‘ADC转æ�¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_Close(ADC_TypeDef * ADCx) { @@ -177,11 +177,11 @@ void ADC_Close(ADC_TypeDef * ADCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Start() -* ¹¦ÄÜ˵Ã÷: Èí¼þ´¥·¢Ä£Ê½ÏÂÆô¶¯ADCת»» -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Start() +* 功能说明: 软件触å�‘模å¼�下å�¯åЍADC转æ�¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_Start(ADC_TypeDef * ADCx) { @@ -189,11 +189,11 @@ void ADC_Start(ADC_TypeDef * ADCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Stop() -* ¹¦ÄÜ˵Ã÷: Èí¼þ´¥·¢Ä£Ê½ÏÂÍ£Ö¹ADCת»» -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Stop() +* 功能说明: 软件触å�‘模å¼�下å�œæ­¢ADC转æ�¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_Stop(ADC_TypeDef * ADCx) { @@ -220,12 +220,12 @@ static uint32_t chn2idx(uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_Read() -* ¹¦ÄÜ˵Ã÷: ´ÓÖ¸¶¨Í¨µÀ¶Áȡת»»½á¹û -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª¶Áȡת»»½á¹ûµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t ¶ÁÈ¡µ½µÄת»»½á¹û -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_Read() +* 功能说明: 从指定通é�“读å�–转æ�¢ç»“æžœ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�读å�–转æ�¢ç»“果的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 读å�–到的转æ�¢ç»“æžœ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn) { @@ -234,18 +234,18 @@ uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn) dat = ADCx->CH[idx].DATA; - ADCx->CH[idx].STAT = 0x01; //Çå³ýEOC±êÖ¾ + ADCx->CH[idx].STAT = 0x01; //清除EOC标志 return dat; } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IsEOC() -* ¹¦ÄÜ˵Ã÷: Ö¸¶¨Í¨µÀÊÇ·ñEnd Of Conversion -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª²éѯ״̬µÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t 1 ¸ÃͨµÀÍê³ÉÁËת»» 0 ¸ÃͨµÀδÍê³Éת»» -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IsEOC() +* 功能说明: 指定通é�“是å�¦End Of Conversion +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�查询状æ€�的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 1 该通é�“完æˆ�了转æ�¢ 0 该通é�“未完æˆ�转æ�¢ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn) { @@ -255,12 +255,12 @@ uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_ChnSelect() -* ¹¦ÄÜ˵Ã÷: ADCͨµÀѡͨ£¬Ä£Êýת»»»áÔÚѡͨµÄͨµÀÉÏÒÀ´Î²ÉÑùת»» -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chns ҪѡͨµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7¼°Æä×éºÏ£¨¼´¡°°´Î»»ò¡±ÔËË㣩 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_ChnSelect() +* 功能说明: ADC通é�“选通,模数转æ�¢ä¼šåœ¨é€‰é€šçš„通é�“上ä¾�次采样转æ�¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chns è¦�选通的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7å�Šå…¶ç»„å�ˆï¼ˆå�³â€œæŒ‰ä½�或â€�è¿�算) +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns) { @@ -270,12 +270,12 @@ void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns) /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntEOCEn() -* ¹¦ÄÜ˵Ã÷: ת»»Íê³ÉÖжÏʹÄÜ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntEOCEn() +* 功能说明: 转æ�¢å®Œæˆ�中断使能 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn) { @@ -285,12 +285,12 @@ void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntEOCDis() -* ¹¦ÄÜ˵Ã÷: ת»»Íê³ÉÖжϽûÖ¹ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntEOCDis() +* 功能说明: 转æ�¢å®Œæˆ�中断ç¦�æ­¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn) { @@ -300,12 +300,12 @@ void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntEOCClr() -* ¹¦ÄÜ˵Ã÷: ת»»Íê³ÉÖжϱêÖ¾Çå³ý -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntEOCClr() +* 功能说明: 转æ�¢å®Œæˆ�中断标志清除 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn) { @@ -315,12 +315,12 @@ void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntEOCStat() -* ¹¦ÄÜ˵Ã÷: ת»»Íê³ÉÖжÏ״̬ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª²éѯµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t 1 ¸ÃͨµÀÍê³ÉÁËת»» 0 ¸ÃͨµÀδÍê³Éת»» -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntEOCStat() +* 功能说明: 转æ�¢å®Œæˆ�中断状æ€� +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�查询的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 1 该通é�“完æˆ�了转æ�¢ 0 该通é�“未完æˆ�转æ�¢ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn) { @@ -330,12 +330,12 @@ uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntOVFEn() -* ¹¦ÄÜ˵Ã÷: Êý¾ÝÒç³öÖжÏʹÄÜ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntOVFEn() +* 功能说明: æ•°æ�®æº¢å‡ºä¸­æ–­ä½¿èƒ½ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn) { @@ -345,12 +345,12 @@ void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntOVFDis() -* ¹¦ÄÜ˵Ã÷: Êý¾ÝÒç³öÖжϽûÖ¹ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntOVFDis() +* 功能说明: æ•°æ�®æº¢å‡ºä¸­æ–­ç¦�æ­¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn) { @@ -360,12 +360,12 @@ void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntOVFClr() -* ¹¦ÄÜ˵Ã÷: Êý¾ÝÒç³öÖжϱêÖ¾Çå³ý -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntOVFClr() +* 功能说明: æ•°æ�®æº¢å‡ºä¸­æ–­æ ‡å¿—清除 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn) { @@ -375,12 +375,12 @@ void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntOVFStat() -* ¹¦ÄÜ˵Ã÷: Êý¾ÝÒç³öÖжÏ״̬ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª²éѯµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t 1 ¸ÃͨµÀÍê³ÉÁËת»» 0 ¸ÃͨµÀδÍê³Éת»» -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntOVFStat() +* 功能说明: æ•°æ�®æº¢å‡ºä¸­æ–­çжæ€� +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�查询的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 1 该通é�“完æˆ�了转æ�¢ 0 该通é�“未完æˆ�转æ�¢ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn) { @@ -390,12 +390,12 @@ uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntHFULLEn() -* ¹¦ÄÜ˵Ã÷: FIFO°ëÂúÖжÏʹÄÜ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntHFULLEn() +* 功能说明: FIFOå�Šæ»¡ä¸­æ–­ä½¿èƒ½ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn) { @@ -405,12 +405,12 @@ void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntHFULLDis() -* ¹¦ÄÜ˵Ã÷: FIFO°ëÂúÖжϽûÖ¹ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntHFULLDis() +* 功能说明: FIFOå�Šæ»¡ä¸­æ–­ç¦�æ­¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn) { @@ -420,12 +420,12 @@ void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntHFULLClr() -* ¹¦ÄÜ˵Ã÷: FIFO°ëÂúÖжϱêÖ¾Çå³ý -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntHFULLClr() +* 功能说明: FIFOå�Šæ»¡ä¸­æ–­æ ‡å¿—清除 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn) { @@ -435,12 +435,12 @@ void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntHFULLStat() -* ¹¦ÄÜ˵Ã÷: FIFO°ëÂúÖжÏ״̬ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª²éѯµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t 1 ¸ÃͨµÀÍê³ÉÁËת»» 0 ¸ÃͨµÀδÍê³Éת»» -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntHFULLStat() +* 功能说明: FIFOå�Šæ»¡ä¸­æ–­çжæ€� +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�查询的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 1 该通é�“完æˆ�了转æ�¢ 0 该通é�“未完æˆ�转æ�¢ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn) { @@ -450,12 +450,12 @@ uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntFULLEn() -* ¹¦ÄÜ˵Ã÷: FIFOÂúÖжÏʹÄÜ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntFULLEn() +* 功能说明: FIFO满中断使能 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn) { @@ -465,12 +465,12 @@ void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntFULLDis() -* ¹¦ÄÜ˵Ã÷: FIFOÂúÖжϽûÖ¹ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntFULLDis() +* 功能说明: FIFO满中断ç¦�æ­¢ +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn) { @@ -480,12 +480,12 @@ void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntFULLClr() -* ¹¦ÄÜ˵Ã÷: FIFOÂúÖжϱêÖ¾Çå³ý -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn ÒªÉèÖõÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntFULLClr() +* 功能说明: FIFO满中断标志清除 +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�设置的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn) { @@ -495,12 +495,12 @@ void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: ADC_IntFULLStat() -* ¹¦ÄÜ˵Ã÷: FIFOÂúÖжÏ״̬ -* Êä Èë: ADC_TypeDef * ADCx Ö¸¶¨Òª±»ÉèÖõÄADC£¬¿Éȡֵ°üÀ¨ADC -* uint32_t chn Òª²éѯµÄͨµÀ£¬ÓÐЧֵADC_CH0¡¢ADC_CH1¡¢... ... ¡¢ADC_CH7 -* Êä ³ö: uint32_t 1 ¸ÃͨµÀÍê³ÉÁËת»» 0 ¸ÃͨµÀδÍê³Éת»» -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: ADC_IntFULLStat() +* 功能说明: FIFO满中断状æ€� +* 输 å…¥: ADC_TypeDef * ADCx 指定è¦�被设置的ADC,å�¯å�–值包括ADC +* uint32_t chn è¦�查询的通é�“,有效值ADC_CH0ã€�ADC_CH1ã€�... ... ã€�ADC_CH7 +* 输 出: uint32_t 1 该通é�“完æˆ�了转æ�¢ 0 该通é�“未完æˆ�转æ�¢ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h index 56f93c66d8..96e10972e3 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h @@ -2,18 +2,18 @@ #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¼°Æä×éºÏ£¨¼´¡°°´Î»»ò¡±ÔËË㣩 + 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 @@ -31,49 +31,49 @@ typedef struct { #define ADC_CLKSRC_VCO_DIV64 4 #define ADC_AVG_SAMPLE1 0 -#define ADC_AVG_SAMPLE2 1 //Ò»´ÎÆô¶¯Á¬Ðø²ÉÑù¡¢×ª»»2´Î£¬²¢¼ÆËãÁ½´Î½á¹ûµÄƽ¾ùÖµ×÷Ϊת»»½á¹û +#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_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) µçƽֵÐëÓëÁ¿³ÌÏàͬ +#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£¬Í£Ö¹Ä£Êýת»» +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 +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_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_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_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ÂúÖжÏ״̬ +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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c index c5c5f34a45..e7b30e3cb2 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c @@ -411,18 +411,6 @@ void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_RXDA_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTRXNotEmptyStat() -* ¹¦ÄÜ˵Ã÷: RX FIFO·Ç¿ÕÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_RXDA_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTTXBufEmptyEn() * ¹¦ÄÜ˵Ã÷: µ±TX Buffer¿Õʱ´¥·¢ÖжÏʹÄÜ @@ -447,18 +435,6 @@ void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_TXBR_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTTXBufEmptyStat() -* ¹¦ÄÜ˵Ã÷: TX Buffer¿ÕÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_TXBR_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTErrWarningEn() * ¹¦ÄÜ˵Ã÷: TXERR/RXERR¼ÆÊýÖµ´ïµ½Error Warning Limitʱ´¥·¢ÖжÏʹÄÜ @@ -483,18 +459,6 @@ void CAN_INTErrWarningDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTErrWarningStat() -* ¹¦ÄÜ˵Ã÷: TXERR/RXERR¼ÆÊýÖµ´ïµ½Error Warning LimitÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_ERRWARN_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTRXOverflowEn() * ¹¦ÄÜ˵Ã÷: RX FIFO Òç³öʱ´¥·¢ÖжÏʹÄÜ @@ -519,18 +483,6 @@ void CAN_INTRXOverflowDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_RXOV_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTRXOverflowStat() -* ¹¦ÄÜ˵Ã÷: RX FIFO Òç³öÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_RXOV_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTRXOverflowClear() * ¹¦ÄÜ˵Ã÷: RX FIFO Òç³öÖжÏÇå³ý @@ -567,18 +519,6 @@ void CAN_INTWakeupDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_WKUP_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTWakeupStat() -* ¹¦ÄÜ˵Ã÷: »½ÐÑʼþÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_WKUP_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTErrPassiveEn() * ¹¦ÄÜ˵Ã÷: TXERR/RXERR¼ÆÊýÖµ´ïµ½127ʱÖжÏʹÄÜ @@ -603,18 +543,6 @@ void CAN_INTErrPassiveDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTErrPassiveStat() -* ¹¦ÄÜ˵Ã÷: TXERR/RXERR¼ÆÊýÖµ´ïµ½127ÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_ERRPASS_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTArbitrLostEn() * ¹¦ÄÜ˵Ã÷: ÖÙ²Ãʧ°ÜÖжÏʹÄÜ @@ -639,18 +567,6 @@ void CAN_INTArbitrLostDis(CAN_TypeDef * CANx) CANx->IE &= ~(1 << CAN_IE_ARBLOST_Pos); } -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTArbitrLostStat() -* ¹¦ÄÜ˵Ã÷: ÖÙ²Ãʧ°ÜÖжÏÊÇ·ñ´¥·¢ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ -******************************************************************************************************************************************/ -uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx) -{ - return (CANx->IF & CAN_IF_ARBLOST_Msk) ? 1 : 0; -} - /****************************************************************************************************************************************** * º¯ÊýÃû³Æ: CAN_INTBusErrorEn() * ¹¦ÄÜ˵Ã÷: ×ÜÏß´íÎóÖжÏʹÄÜ @@ -676,13 +592,13 @@ void CAN_INTBusErrorDis(CAN_TypeDef * CANx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_INTBusErrorStat() -* ¹¦ÄÜ˵Ã÷: ×ÜÏß´íÎóÖжÏÊÇ·ñ´¥·¢ +* º¯ÊýÃû³Æ: CAN_INTStat() +* ¹¦ÄÜ˵Ã÷: ²éѯÖжÏ״̬ * Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: uint32_t 1 ÒÑ´¥·¢ 0 δ´¥·¢ -* ×¢ÒâÊÂÏî: ÎÞ +* Êä ³ö: uint32_t µ±Ç°ÖжÏ״̬ +* ×¢ÒâÊÂÏî: CANx->IF¶ÁÈ¡ÇåÁ㣬Òò´ËÔÚÖжÏISRÖÐÖ»ÄܶÁȡһ´Î£¬²»Äܶà´Î¶ÁÈ¡ ******************************************************************************************************************************************/ -uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx) +uint32_t CAN_INTStat(CAN_TypeDef * CANx) { - return (CANx->IF & CAN_IF_BUSERR_Msk) ? 1 : 0; + return CANx->IF; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h index 7b66ee4d5c..7cdd751ca5 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h @@ -5,14 +5,14 @@ #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 + 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ͨ¹ý¹ýÂË + uint32_t FilterMask32b; //FilterCheck & (~FilterMask) == ID & (~FilterMask)çš„Message通过过滤 struct { // 0 must match 1 don't care uint16_t FilterMask16b1; uint16_t FilterMask16b2; @@ -25,15 +25,15 @@ typedef struct { uint16_t FilterCheck16b2; }; }; - uint8_t RXNotEmptyIEn; //½ÓÊÕFIFO·Ç¿Õ£¬ÓÐÊý¾Ý¿É¶Á - uint8_t RXOverflowIEn; //½ÓÊÕFIFOÒç³ö£¬ÓÐÊý¾Ý¶ªÊ§ - uint8_t ArbitrLostIEn; //¿ØÖÆÆ÷¶ªÊ§Öٲñä³É½ÓÊÕ·½ - uint8_t ErrPassiveIEn; //½ÓÊÕ/·¢ËÍ´íÎó¼ÆÊýÖµ´ïµ½127 + 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_MODE_NORMAL 0 //常规模å¼� +#define CAN_MODE_LISTEN 1 //监å�¬æ¨¡å¼� +#define CAN_MODE_SELFTEST 2 //自测模å¼� #define CAN_BS1_1tq 0 #define CAN_BS1_2tq 1 @@ -66,15 +66,15 @@ typedef struct { #define CAN_SJW_3tq 2 #define CAN_SJW_4tq 3 -#define CAN_FILTER_16b 0 //Á½¸ö16λ¹ýÂËÆ÷ -#define CAN_FILTER_32b 1 //Ò»¸ö32λ¹ýÂËÆ÷ +#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]; //½ÓÊÕµ½µÄÊý¾Ý + 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; @@ -102,35 +102,29 @@ void CAN_SetFilter16b(CAN_TypeDef * CANx, uint16_t check1, uint16_t mask1, uint1 void CAN_INTRXNotEmptyEn(CAN_TypeDef * CANx); void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx); -uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx); void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx); void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx); -uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx); void CAN_INTErrWarningEn(CAN_TypeDef * CANx); void CAN_INTErrWarningDis(CAN_TypeDef * CANx); -uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx); void CAN_INTRXOverflowEn(CAN_TypeDef * CANx); void CAN_INTRXOverflowDis(CAN_TypeDef * CANx); -uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx); void CAN_INTRXOverflowClear(CAN_TypeDef * CANx); void CAN_INTWakeupEn(CAN_TypeDef * CANx); void CAN_INTWakeupDis(CAN_TypeDef * CANx); -uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx); void CAN_INTErrPassiveEn(CAN_TypeDef * CANx); void CAN_INTErrPassiveDis(CAN_TypeDef * CANx); -uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx); void CAN_INTArbitrLostEn(CAN_TypeDef * CANx); void CAN_INTArbitrLostDis(CAN_TypeDef * CANx); -uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx); void CAN_INTBusErrorEn(CAN_TypeDef * CANx); void CAN_INTBusErrorDis(CAN_TypeDef * CANx); -uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx); + +uint32_t CAN_INTStat(CAN_TypeDef * CANx); #endif //__SWM320_CAN_H__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h index ce9f1f3731..6a5dd2f781 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h @@ -2,22 +2,22 @@ #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); /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CRC_Write() -* ¹¦ÄÜ˵Ã÷: CRCдÈëÊý¾Ý -* Êä Èë: uint32_t data ҪдÈëµÄÊý¾Ý -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: CRC_Write() +* 功能说明: CRC写入数æ�® +* 输 å…¥: uint32_t data è¦�写入的数æ�® +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ static __INLINE void CRC_Write(uint32_t data) { @@ -25,11 +25,11 @@ static __INLINE void CRC_Write(uint32_t data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CRC_Result() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡CRC¼ÆËã½á¹û -* Êä Èë: ÎÞ -* Êä ³ö: uint32_t CRC ¼ÆËã½á¹û -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: CRC_Result() +* 功能说明: 获å�–CRC计算结果 +* 输 å…¥: æ—  +* 输 出: uint32_t CRC 计算结果 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ static __INLINE uint32_t CRC_Result(void) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h index 817162cd65..0857f7d023 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h @@ -7,14 +7,14 @@ #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_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_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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h index 088cd9a619..529770e6a6 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h @@ -1,20 +1,20 @@ #ifndef __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); //Ö¸¶¨Òý½ÅÍⲿÖжÏÇå³ý£¨¼´Çå³ýÖжϱêÖ¾£¬ÒÔÃâÔٴνøÈë´ËÖжϣ© +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 //¸ßµçƽ´¥·¢ÖÐ¶Ï +#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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c index dbd0eca4bf..d384125db3 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_flash.c -* ¹¦ÄÜ˵Ã÷: ʹÓÃоƬµÄIAP¹¦Äܽ«Æ¬ÉÏFlashÄ£Äâ³ÉEEPROMÀ´±£´æÊý¾Ý£¬µôµçºó²»¶ªÊ§ -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_flash.c +* 功能说明: 使用芯片的IAP功能将片上Flash模拟æˆ�EEPROMæ�¥ä¿�存数æ�®ï¼ŒæŽ‰ç”µå�Žä¸�丢失 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: ******************************************************************************************************************************************* * @attention * @@ -27,11 +27,11 @@ IAP_Flash_Write_t IAP_Flash_Write = (IAP_Flash_Write_t)0x11000801; /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: FLASH_Erase() -* ¹¦ÄÜ˵Ã÷: ƬÄÚFlash²Á³ý -* Êä Èë: uint32_t addr ²Á³ýµØÖ·£¬ÉÈÇø´óСΪ4K Byte -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: FLASH_Erase() +* 功能说明: 片内Flash擦除 +* 输 å…¥: uint32_t addr 擦除地å�€ï¼Œæ‰‡åŒºå¤§å°�为4K Byte +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void FLASH_Erase(uint32_t addr) { @@ -45,13 +45,13 @@ void FLASH_Erase(uint32_t addr) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: FLASH_Write() -* ¹¦ÄÜ˵Ã÷: ƬÄÚFlashдÈë -* Êä Èë: uint32_t addr дÈëµØÖ· -* uint32_t buff[] ҪдÈëµÄÊý¾Ý -* uint32_t count ҪдÈëÊý¾ÝµÄ¸öÊý£¬ÒÔ×ÖΪµ¥Î»£¬ÇÒ±ØÐëÊÇ4µÄÕûÊý±¶£¬¼´×îÉÙдÈë4¸ö×Ö -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: дÈëÊý¾Ý¸öÊý±ØÐëÊÇ4µÄÕûÊý±¶£¬¼´×îÉÙдÈë4¸ö×Ö +* 函数å��ç§°: FLASH_Write() +* 功能说明: 片内Flash写入 +* 输 å…¥: uint32_t addr 写入地å�€ +* uint32_t buff[] è¦�写入的数æ�® +* uint32_t count è¦�写入数æ�®çš„个数,以字为å�•ä½�,且必须是4的整数å€�,å�³æœ€å°‘写入4个字 +* 输 出: æ—  +* 注æ„�事项: 写入数æ�®ä¸ªæ•°å¿…须是4的整数å€�,å�³æœ€å°‘写入4个字 ******************************************************************************************************************************************/ void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count) { @@ -65,17 +65,33 @@ void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: Flash_Param_at_120MHz() -* ¹¦ÄÜ˵Ã÷: ½«Flash²ÎÊýÉèÖóÉ120MHzÖ÷ƵÏÂÔËÐÐʱËùÐèµÄ²ÎÊý -* Êä Èë: ÎÞ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: Flash_Param_at_xMHz() +* 功能说明: å°†Flashå�‚数设置æˆ�xMHz主频下è¿�行时所需的å�‚æ•° +* 输 å…¥: uint32_t x å�¯å�–值 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void Flash_Param_at_120MHz(void) +void Flash_Param_at_xMHz(uint32_t x) { __disable_irq(); + switch(x) + { + case 30: + IAP_Flash_Param(0x489, 0xabf41f25); + break; - IAP_Flash_Param(0x48a, 0xabfc7a6e); + 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(); } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h index 113e2a2e07..40f64fac42 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h @@ -5,7 +5,7 @@ void FLASH_Erase(uint32_t addr); void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count); -void Flash_Param_at_120MHz(void); +void Flash_Param_at_xMHz(uint32_t x); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c index 1d2aa3a2ab..932608a9e9 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c @@ -31,7 +31,7 @@ * uint32_t pull_up ÉÏÀ­µç×裬0 ¹Ø±ÕÉÏÀ­ 1 ¿ªÆôÉÏÀ­ * uint32_t pull_down ÏÂÀ­µç×裬0 ¹Ø±ÕÏÂÀ­ 1 ¿ªÆôÏÂÀ­ * Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: GPIOA¡¢GPIOC¡¢GPIOM¡¢GPIOPÖ»ÓÐÉÏÀ­£¬GPIOB¡¢GPIONÖ»ÓÐÏÂÀ­ +* ×¢ÒâÊÂÏî: GPIOA¡¢GPIOC¡¢GPIOM¡¢GPIOPÖ»ÓÐÉÏÀ­£¬GPIOB¡¢GPIONÖ»ÓÐÏÂÀ­£¨PN0¡¢PN1¡¢PN2Èý¸öÒý½ÅÓÐÉÏÀ­Ã»ÏÂÀ­£© ******************************************************************************************************************************************/ void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h index bcb59b0bee..3ced2d736e 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h @@ -2,16 +2,16 @@ #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_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); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h index fc52e9265e..02f1292a28 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h @@ -2,19 +2,19 @@ #define __SWM320_I2C_H__ typedef struct { - uint8_t Master; //1 Ö÷»úģʽ - uint8_t Addr7b; //1 7λµØÖ· 0 10λµØÖ· + uint8_t Master; //1 主机模å¼� + uint8_t Addr7b; //1 7ä½�地å�€ 0 10ä½�地å�€ - uint32_t MstClk; //Ö÷»ú´«ÊäʱÖÓÆµÂÊ - uint8_t MstIEn; //Ö÷»úģʽÖжÏʹÄÜ + 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; //´Ó»ú½ÓÊÕµ½Ð´ÇëÇóÖжÏʹÄÜ + uint16_t SlvAddr; //从机地å�€ + uint8_t SlvRxEndIEn; //从机接收完æˆ�中断使能 + uint8_t SlvTxEndIEn; //从机å�‘é€�完æˆ�中断使能 + uint8_t SlvSTADetIEn; //从机检测到起始中断使能 + uint8_t SlvSTODetIEn; //从机检测到终止中断使能 + uint8_t SlvRdReqIEn; //从机接收到读请求中断使能 + uint8_t SlvWrReqIEn; //从机接收到写请求中断使能 } I2C_InitStructure; diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c index 5220cb8046..c26ea71f9d 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_lcd.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄLCD¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_lcd.c +* 功能说明: SWM320å�•片机的LCD功能驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -24,12 +24,12 @@ #include /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_Init() -* ¹¦ÄÜ˵Ã÷: LCD³õʼ»¯ -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* LCD_InitStructure * initStruct °üº¬LCDÏà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_Init() +* 功能说明: LCDåˆ�始化 +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* LCD_InitStructure * initStruct 包å�«LCD相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct) { @@ -39,30 +39,21 @@ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct) SYS->CLKEN |= (0x01 << SYS_CLKEN_LCD_Pos); break; } - - if(initStruct->Interface == LCD_INTERFACE_RGB) - { - LCDx->START = (0 << LCD_START_MPUEN_Pos); - - LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) | - ((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) | - (initStruct->ClkAlways << LCD_CR0_DCLK_Pos) | - (initStruct->HsyncWidth << LCD_CR0_HLOW_Pos); - - LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos) | - ((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos) | - ((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos) | - ((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos) | - (initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) | - (initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos); - } - else if(initStruct->Interface == LCD_INTERFACE_I80) - { - // - } + + LCDx->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; //Çå³ý±êÖ¾ + LCDx->IF = 1; //清除标志 if(initStruct->IntEOTEn) LCD_INTEn(LCDx); else LCD_INTDis(LCDx); @@ -82,11 +73,11 @@ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_Start() -* ¹¦ÄÜ˵Ã÷: Æô¶¯Ò»´ÎÊý¾Ý´«Êä -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_Start() +* 功能说明: å�¯åŠ¨ä¸€æ¬¡æ•°æ�®ä¼ è¾“ +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void LCD_Start(LCD_TypeDef * LCDx) { @@ -94,11 +85,11 @@ void LCD_Start(LCD_TypeDef * LCDx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_IsBusy() -* ¹¦ÄÜ˵Ã÷: ÊÇ·ñÕýÔÚ½øÐÐÊý¾Ý´«Êä -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: uint32_t 1 ÕýÔÚ´«ÊäÊý¾Ý 0 Êý¾Ý´«ÊäÒÑÍê³É -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_IsBusy() +* 功能说明: 是å�¦æ­£åœ¨è¿›è¡Œæ•°æ�®ä¼ è¾“ +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: uint32_t 1 正在传输数æ�® 0 æ•°æ�®ä¼ è¾“已完æˆ� +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t LCD_IsBusy(LCD_TypeDef * LCDx) { @@ -106,11 +97,11 @@ uint32_t LCD_IsBusy(LCD_TypeDef * LCDx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_INTEn() -* ¹¦ÄÜ˵Ã÷: LCDÖжÏʹÄÜ£¬Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êäʱ´¥·¢ÖÐ¶Ï -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_INTEn() +* 功能说明: LCD中断使能,完æˆ�指定长度的数æ�®ä¼ è¾“时触å�‘中断 +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void LCD_INTEn(LCD_TypeDef * LCDx) { @@ -118,11 +109,11 @@ void LCD_INTEn(LCD_TypeDef * LCDx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_INTDis() -* ¹¦ÄÜ˵Ã÷: LCDÖжϽûÖ¹£¬Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êäʱ²»´¥·¢ÖÐ¶Ï -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_INTDis() +* 功能说明: LCD中断ç¦�止,完æˆ�指定长度的数æ�®ä¼ è¾“æ—¶ä¸�触å�‘中断 +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void LCD_INTDis(LCD_TypeDef * LCDx) { @@ -130,11 +121,11 @@ void LCD_INTDis(LCD_TypeDef * LCDx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_INTClr() -* ¹¦ÄÜ˵Ã÷: LCDÖжϱêÖ¾Çå³ý -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_INTClr() +* 功能说明: LCD中断标志清除 +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void LCD_INTClr(LCD_TypeDef * LCDx) { @@ -142,11 +133,11 @@ void LCD_INTClr(LCD_TypeDef * LCDx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: LCD_INTStat() -* ¹¦ÄÜ˵Ã÷: LCDÖжÏ״̬²éѯ -* Êä Èë: LCD_TypeDef * LCDx Ö¸¶¨Òª±»ÉèÖõÄLCD£¬ÓÐЧֵ°üÀ¨LCD -* Êä ³ö: uint32_t 1 Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êä 0 δÍê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«Êä -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: LCD_INTStat() +* 功能说明: LCD中断状æ€�查询 +* 输 å…¥: LCD_TypeDef * LCDx 指定è¦�被设置的LCD,有效值包括LCD +* 输 出: uint32_t 1 完æˆ�指定长度的数æ�®ä¼ è¾“ 0 未完æˆ�指定长度的数æ�®ä¼ è¾“ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t LCD_INTStat(LCD_TypeDef * LCDx) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h index 490af3162f..8091a88f03 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h @@ -2,10 +2,7 @@ #define __SWM320_LCD_H__ -typedef struct { - uint8_t Interface; //LCDÆÁ½Ó¿Ú£ºLCD_INTERFACE_RGB¡¢LCD_INTERFACE_I80¡¢LCD_INTERFACE_M68 - - /* RGBͬ²½½Ó¿Ú²ÎÊý */ +typedef struct { uint16_t HnPixel; //ˮƽ·½ÏòÏñËØ¸öÊý£¬×î´óȡֵ1024 uint16_t VnPixel; //´¹Ö±·½ÏòÏñËØ¸öÊý£¬×î´óȡֵ 768 uint8_t Hfp; //horizonal front porch£¬×î´óȡֵ32 @@ -21,10 +18,6 @@ typedef struct { } LCD_InitStructure; -#define LCD_INTERFACE_RGB 0 -#define LCD_INTERFACE_I80 1 -#define LCD_INTERFACE_M68 2 - #define LCD_SAMPLEDGE_RISE 0 //ÆÁÄ»ÔÚDOTCLKµÄÉÏÉýÑØ²ÉÑùÊý¾Ý #define LCD_SAMPLEDGE_FALL 1 //ÆÁÄ»ÔÚDOTCLKµÄϽµÑزÉÑùÊý¾Ý diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h index 23f7e5f902..1714454dd7 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h @@ -2,12 +2,12 @@ #define __SWM320_NORFLASH_H__ typedef struct { - uint8_t DataWidth; // 8¡¢16 + uint8_t DataWidth; // 8ã€�16 - uint8_t WELowPulseTime; // WE# pulse width£¬µ¥Î»ÎªÏµÍ³Ê±ÖÓÖÜÆÚ£¬×î´óֵΪ7 - uint8_t OEPreValidTime; // Valid data output after OE# low£¬µ¥Î»ÎªÏµÍ³Ê±ÖÓÖÜÆÚ£¬×î´óֵΪ15 + uint8_t WELowPulseTime; // WE# pulse width,å�•ä½�为系统时钟周期,最大值为7 + uint8_t OEPreValidTime; // Valid data output after OE# low,å�•ä½�为系统时钟周期,最大值为15 - uint8_t OperFinishIEn; // ²Ù×÷(дÈë¡¢²Á³ý)Íê³ÉÖжÏʹÄÜ + uint8_t OperFinishIEn; // æ“�作(写入ã€�擦除)完æˆ�中断使能 uint8_t OperTimeoutIEn; } NORFL_InitStructure; @@ -21,7 +21,7 @@ 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)) diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c index af21c1ffeb..55967f7cac 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_port.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄ¶Ë¿ÚÒý½Å¹¦ÄÜÑ¡Ôñ¿âº¯Êý -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_port.c +* 功能说明: SWM320å�•片机的端å�£å¼•脚功能选择库函数 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,15 +23,15 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PORT_Init() -* ¹¦ÄÜ˵Ã÷: ¶Ë¿ÚÒý½Å¹¦ÄÜÑ¡Ôñ£¬¿ÉÓõŦÄܼû"SWM320_port.h"Îļþ -* Êä Èë: uint32_t PORTx Ö¸¶¨PORT¶Ë¿Ú£¬ÓÐЧֵ°üÀ¨PORTA¡¢PORTB¡¢PORTC¡¢PORTM¡¢PORTN¡¢PORTP -* uint32_t n Ö¸¶¨PORTÒý½Å£¬ÓÐЧֵ°üÀ¨PIN0¡¢PIN1¡¢PIN2¡¢... ... PIN22¡¢PIN23 -* uint32_t func Ö¸¶¨¶Ë¿ÚÒý½ÅÒªÉ趨µÄ¹¦ÄÜ£¬Æä¿Éȡֵ¼û"SWM320_port.h"Îļþ -* uint32_t digit_in_en Êý×ÖÊäÈëʹÄÜ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: µ±Òý½Å±êºÅnΪżÊýʱ£¬funcȡֵֻÄÜÊÇFUNMUX0¿ªÍ·µÄ£¬ÈçFUNMUX0_UART0_RXD -* µ±Òý½Å±êºÅnÎªÆæÊýʱ£¬funcȡֵֻÄÜÊÇFUNMUX1¿ªÍ·µÄ£¬ÈçFUNMUX1_UART0_TXD +* 函数å��ç§°: PORT_Init() +* 功能说明: 端å�£å¼•脚功能选择,å�¯ç”¨çš„功能è§�"SWM320_port.h"文件 +* 输 å…¥: uint32_t PORTx 指定PORT端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括PORTAã€�PORTBã€�PORTCã€�PORTMã€�PORTNã€�PORTP +* uint32_t n 指定PORT引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* uint32_t func 指定端å�£å¼•脚è¦�设定的功能,其å�¯å�–值è§�"SWM320_port.h"文件 +* uint32_t digit_in_en 数字输入使能 +* 输 出: æ—  +* 注æ„�事项: 当引脚标å�·n为å�¶æ•°æ—¶ï¼Œfuncå�–值å�ªèƒ½æ˜¯FUNMUX0开头的,如FUNMUX0_UART0_RXD +* 当引脚标å�·n为奇数时,funcå�–值å�ªèƒ½æ˜¯FUNMUX1开头的,如FUNMUX1_UART0_TXD ******************************************************************************************************************************************/ void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h index 1e2f4f2244..9fa2a24b12 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h @@ -1,7 +1,7 @@ #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 @@ -425,8 +425,8 @@ void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en); -/* ÏÂÃæºê¶¨ÒåµÄȡֵȫ²¿ÔÚÕýÈ·ÖµµÄ»ù´¡ÉÏ¡°¼Ó100¡±£¬ÒÔÇø·ÖÉÏÃæºê¶¨ÒåµÄÖµ£¬´Ó¶ø·½±ã¿âº¯ÊýµÄ±àд*/ -/* ÏÂÃæÕâЩֵÊÇżÊý±àºÅÒý½ÅµÄ¹¦ÄÜȡֵ£¬ÈçPIN0¡¢PIN2¡¢... */ +/* 下é�¢å®�定义的å�–值全部在正确值的基础上“加100â€�,以区分上é�¢å®�定义的值,从而方便库函数的编写*/ +/* 下é�¢è¿™äº›å€¼æ˜¯å�¶æ•°ç¼–å�·å¼•脚的功能å�–值,如PIN0ã€�PIN2ã€�... */ #define FUNMUX0_UART0_RXD 100 #define FUNMUX0_UART1_RXD 101 #define FUNMUX0_UART2_RXD 102 @@ -452,7 +452,7 @@ void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en); #define FUNMUX0_UART2_CTS 123 #define FUNMUX0_UART3_CTS 124 -/* ÏÂÃæÕâЩֵÊÇÆæÊý±àºÅÒý½ÅµÄ¹¦ÄÜȡֵ£¬ÈçPIN1¡¢PIN3¡¢... */ +/* 下é�¢è¿™äº›å€¼æ˜¯å¥‡æ•°ç¼–å�·å¼•脚的功能å�–值,如PIN1ã€�PIN3ã€�... */ #define FUNMUX1_UART0_TXD 100 #define FUNMUX1_UART1_TXD 101 #define FUNMUX1_UART2_TXD 102 diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c index e74334fc93..2c8e87cd9b 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_pwm.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄPWM¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_pwm.c +* 功能说明: SWM320å�•片机的PWM功能驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,12 +23,12 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_Init() -* ¹¦ÄÜ˵Ã÷: PWM³õʼ»¯ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* PWM_InitStructure * initStruct °üº¬PWMÏà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_Init() +* 功能说明: PWMåˆ�始化 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* PWM_InitStructure * initStruct 包å�«PWM相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) { @@ -39,7 +39,7 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk; SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos); - PWM_Stop(PWMx, 1, 1); //һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚPWMֹͣʱÉèÖà + PWM_Stop(PWMx, 1, 1); //一些关键寄存器å�ªèƒ½åœ¨PWMå�œæ­¢æ—¶è®¾ç½® PWMx->MODE = initStruct->mode; @@ -84,7 +84,7 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) break; } - PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); //Çå³ýÖжϱêÖ¾ + PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); //清除中断标志 PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset+1)) | (initStruct->HEndAIEn << (bit_offset+12)) | (initStruct->HEndBIEn << (bit_offset+13)); @@ -100,13 +100,13 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_Start() -* ¹¦ÄÜ˵Ã÷: Æô¶¯PWM£¬¿ªÊ¼PWMÊä³ö -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chA 0 ͨµÀA²»Æô¶¯ 1 ͨµÀAÆô¶¯ -* uint32_t chB 0 ͨµÀB²»Æô¶¯ 1 ͨµÀBÆô¶¯ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_Start() +* 功能说明: å�¯åЍPWM,开始PWM输出 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chA 0 通é�“Aä¸�å�¯åЍ 1 通é�“Aå�¯åЍ +* uint32_t chB 0 通é�“Bä¸�å�¯åЍ 1 通é�“Bå�¯åЍ +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) { @@ -139,13 +139,13 @@ void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_Stop() -* ¹¦ÄÜ˵Ã÷: ¹Ø±ÕPWM£¬Í£Ö¹PWMÊä³ö -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chA 0 ͨµÀA²»¹Ø±Õ 1 ͨµÀA¹Ø±Õ -* uint32_t chB 0 ͨµÀB²»¹Ø±Õ 1 ͨµÀB¹Ø±Õ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_Stop() +* 功能说明: 关闭PWM,å�œæ­¢PWM输出 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chA 0 通é�“Aä¸�关闭 1 通é�“A关闭 +* uint32_t chB 0 通é�“Bä¸�关闭 1 通é�“B关闭 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) { @@ -178,13 +178,13 @@ void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_SetCycle() -* ¹¦ÄÜ˵Ã÷: ÉèÖÃÖÜÆÚ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* uint16_t cycle ÒªÉ趨µÄÖÜÆÚÖµ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_SetCycle() +* 功能说明: 设置周期 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* uint16_t cycle è¦�设定的周期值 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle) { @@ -195,12 +195,12 @@ void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_GetCycle() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡ÖÜÆÚ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒª²éѯÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: uint16_t »ñÈ¡µ½µÄÖÜÆÚÖµ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_GetCycle() +* 功能说明: 获å�–周期 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�查询哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: uint16_t 获å�–到的周期值 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn) { @@ -215,13 +215,13 @@ uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_SetHDuty() -* ¹¦ÄÜ˵Ã÷: ÉèÖÃ¸ßµçÆ½Ê±³¤ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* uint16_t hduty ÒªÉ趨µÄ¸ßµçƽʱ³¤ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_SetHDuty() +* 功能说明: 设置高电平时长 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* uint16_t hduty è¦�设定的高电平时长 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty) { @@ -232,12 +232,12 @@ void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_GetHDuty() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡¸ßµçƽʱ³¤ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒª²éѯÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: uint16_t »ñÈ¡µ½µÄ¸ßµçƽʱ³¤ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_GetHDuty() +* 功能说明: 获å�–高电平时长 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�查询哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: uint16_t 获å�–到的高电平时长 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn) { @@ -252,13 +252,13 @@ uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_SetDeadzone() -* ¹¦ÄÜ˵Ã÷: ÉèÖÃËÀÇøÊ±³¤ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* uint8_t deadzone ÒªÉ趨µÄËÀÇøÊ±³¤ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_SetDeadzone() +* 功能说明: 设置死区时长 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* uint8_t deadzone è¦�设定的死区时长 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone) { @@ -269,12 +269,12 @@ void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_GetDeadzone() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡ËÀÇøÊ±³¤ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒª²éѯÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: uint8_t »ñÈ¡µ½µÄËÀÇøÊ±³¤ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_GetDeadzone() +* 功能说明: 获å�–死区时长 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�查询哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: uint8_t 获å�–到的死区时长 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn) { @@ -290,12 +290,12 @@ uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn) /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntNCycleEn() -* ¹¦ÄÜ˵Ã÷: ÐÂÖÜÆÚ¿ªÊ¼ÖжÏʹÄÜ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntNCycleEn() +* 功能说明: 新周期开始中断使能 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn) { @@ -334,12 +334,12 @@ void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntNCycleDis() -* ¹¦ÄÜ˵Ã÷: ÐÂÖÜÆÚ¿ªÊ¼ÖжϽûÄÜ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntNCycleDis() +* 功能说明: 新周期开始中断ç¦�能 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn) { @@ -378,12 +378,12 @@ void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntNCycleClr() -* ¹¦ÄÜ˵Ã÷: ÐÂÖÜÆÚ¿ªÊ¼ÖжϱêÖ¾Çå³ý -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntNCycleClr() +* 功能说明: 新周期开始中断标志清除 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn) { @@ -422,12 +422,12 @@ void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntNCycleStat() -* ¹¦ÄÜ˵Ã÷: ÐÂÖÜÆÚ¿ªÊ¼ÖжÏÊÇ·ñ·¢Éú -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: uint32_t 1 ÐÂÖÜÆÚ¿ªÊ¼ÖжÏÒÑ·¢Éú 0 ÐÂÖÜÆÚ¿ªÊ¼ÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntNCycleStat() +* 功能说明: 新周期开始中断是å�¦å�‘生 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: uint32_t 1 新周期开始中断已å�‘生 0 新周期开始中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn) { @@ -471,12 +471,12 @@ uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn) /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntHEndEn() -* ¹¦ÄÜ˵Ã÷: ¸ßµçƽ½áÊøÖжÏʹÄÜ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntHEndEn() +* 功能说明: 高电平结æ�Ÿä¸­æ–­ä½¿èƒ½ +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn) { @@ -515,12 +515,12 @@ void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntHEndDis() -* ¹¦ÄÜ˵Ã÷: ¸ßµçƽ½áÊøÖжϽûÄÜ -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntHEndDis() +* 功能说明: 高电平结æ�Ÿä¸­æ–­ç¦�能 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn) { @@ -559,12 +559,12 @@ void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntHEndClr() -* ¹¦ÄÜ˵Ã÷: ¸ßµçƽ½áÊøÖжϱêÖ¾Çå³ý -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntHEndClr() +* 功能说明: 高电平结æ�Ÿä¸­æ–­æ ‡å¿—清除 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn) { @@ -603,12 +603,12 @@ void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: PWM_IntHEndStat() -* ¹¦ÄÜ˵Ã÷: ¸ßµçƽ½áÊøÖжÏÊÇ·ñ·¢Éú -* Êä Èë: PWM_TypeDef * PWMx Ö¸¶¨Òª±»ÉèÖõÄPWM£¬ÓÐЧֵ°üÀ¨PWM0¡¢PWM1¡¢PWM2¡¢PWM3¡¢PWM4¡¢PWM5 -* uint32_t chn Ñ¡ÔñÒªÉèÖÃÄĸöͨµÀ£¬ÓÐЧֵ£ºPWM_CH_A¡¢PWM_CH_B -* Êä ³ö: uint32_t 1 ¸ßµçƽ½áÊøÖжÏÒÑ·¢Éú 0 ¸ßµçƽ½áÊøÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: PWM_IntHEndStat() +* 功能说明: 高电平结æ�Ÿä¸­æ–­æ˜¯å�¦å�‘生 +* 输 å…¥: PWM_TypeDef * PWMx 指定è¦�被设置的PWM,有效值包括PWM0ã€�PWM1ã€�PWM2ã€�PWM3ã€�PWM4ã€�PWM5 +* uint32_t chn 选择è¦�设置哪个通é�“,有效值:PWM_CH_Aã€�PWM_CH_B +* 输 出: uint32_t 1 高电平结æ�Ÿä¸­æ–­å·²å�‘生 0 高电平结æ�Ÿä¸­æ–­æœªå�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h index 4565a05a94..6f857fae37 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h @@ -2,57 +2,57 @@ #define __SWM320_PWM_H__ typedef struct { - uint8_t clk_div; //PWM_CLKDIV_1¡¢PWM_CLKDIV_8 + 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 + 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 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 ¸ßµçƽ + 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·ÐÂÖÜÆÚ¿ªÊ¼ÖжÏʹÄÜ + 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_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); //¸ßµçƽ½áÊøÖжÏÊÇ·ñ·¢Éú +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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c index 2ce0f390b7..d43ee91f15 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_rtc.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄRTCÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_rtc.c +* 功能说明: SWM320å�•片机的RTC驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -24,18 +24,18 @@ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date); /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_Init() -* ¹¦ÄÜ˵Ã÷: RTC³õʼ»¯ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC -* RTC_InitStructure * initStruct °üº¬RTCÏà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_Init() +* 功能说明: RTCåˆ�始化 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,有效值包括RTC +* RTC_InitStructure * initStruct 包å�«RTC相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct) { SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos); - SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos); //RTCʹÓÃ32KHz RCʱÖÓ + SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos); //RTC使用32KHz RCæ—¶é’Ÿ SYS->CLKEN |= (1 << SYS_CLKEN_RTC_Pos) | ((uint32_t)1 << SYS_CLKEN_ALIVE_Pos); @@ -72,11 +72,11 @@ void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_Start() -* ¹¦ÄÜ˵Ã÷: Æô¶¯RTC -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_Start() +* 功能说明: å�¯åЍRTC +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_Start(RTC_TypeDef * RTCx) { @@ -84,11 +84,11 @@ void RTC_Start(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_Stop() -* ¹¦ÄÜ˵Ã÷: Í£Ö¹RTC -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_Stop() +* 功能说明: å�œæ­¢RTC +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_Stop(RTC_TypeDef * RTCx) { @@ -96,12 +96,12 @@ void RTC_Stop(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_GetDateTime() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡µ±Ç°µÄʱ¼äºÍÈÕÆÚ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC -* RTC_DateTime * dateTime »ñÈ¡µ½µÄʱ¼ä¡¢ÈÕÆÚÖµ´æÈë´ËÖ¸ÕëÖ¸ÏòµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_GetDateTime() +* 功能说明: 获å�–当å‰�的时间和日期 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,有效值包括RTC +* RTC_DateTime * dateTime 获å�–到的时间ã€�日期值存入此指针指å�‘的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime) { @@ -115,12 +115,12 @@ void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_AlarmSetup() -* ¹¦ÄÜ˵Ã÷: RTCÄÖÖÓÉ趨 -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬ÓÐЧֵ°üÀ¨RTC -* RTC_AlarmStructure * alarmStruct °üº¬RTCÄÖÖÓÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_AlarmSetup() +* 功能说明: RTC闹钟设定 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,有效值包括RTC +* RTC_AlarmStructure * alarmStruct 包å�«RTC闹钟设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct) { @@ -143,13 +143,13 @@ void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: calcWeekDay() -* ¹¦ÄÜ˵Ã÷: ¼ÆËãÖ¸¶¨Äê¡¢Ô¡¢ÈÕÊÇÐÇÆÚ¼¸ -* Êä Èë: uint32_t year Äê -* uint32_t month Ô -* uint32_t date ÈÕ -* Êä ³ö: uint32_t 0 ÐÇÆÚÈÕ 1 ÐÇÆÚÒ» ... ... 6 ÐÇÆÚÁù -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: calcWeekDay() +* 功能说明: 计算指定年ã€�月ã€�日是星期几 +* 输 å…¥: uint32_t year å¹´ +* uint32_t month 月 +* uint32_t date æ—¥ +* 输 出: uint32_t 0 星期日 1 星期一 ... ... 6 星期六 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date) { @@ -173,11 +173,11 @@ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntSecondEn() -* ¹¦ÄÜ˵Ã÷: ÃëÖжÏʹÄÜ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntSecondEn() +* 功能说明: 秒中断使能 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntSecondEn(RTC_TypeDef * RTCx) { @@ -185,11 +185,11 @@ void RTC_IntSecondEn(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntSecondDis() -* ¹¦ÄÜ˵Ã÷: ÃëÖжϽûÖ¹ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntSecondDis() +* 功能说明: 秒中断ç¦�æ­¢ +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntSecondDis(RTC_TypeDef * RTCx) { @@ -197,11 +197,11 @@ void RTC_IntSecondDis(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntSecondClr() -* ¹¦ÄÜ˵Ã÷: ÃëÖжϱêÖ¾Çå³ý -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntSecondClr() +* 功能说明: 秒中断标志清除 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntSecondClr(RTC_TypeDef * RTCx) { @@ -209,11 +209,11 @@ void RTC_IntSecondClr(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntSecondStat() -* ¹¦ÄÜ˵Ã÷: ÃëÖжÏ״̬ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: uint32_t 1 ÃëÖжϷ¢Éú 0 ÃëÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntSecondStat() +* 功能说明: 秒中断状æ€� +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: uint32_t 1 秒中断å�‘生 0 秒中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx) { @@ -221,11 +221,11 @@ uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntMinuteEn() -* ¹¦ÄÜ˵Ã÷: ·ÖÖжÏʹÄÜ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntMinuteEn() +* 功能说明: 分中断使能 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntMinuteEn(RTC_TypeDef * RTCx) { @@ -233,11 +233,11 @@ void RTC_IntMinuteEn(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntMinuteDis() -* ¹¦ÄÜ˵Ã÷: ·ÖÖжϽûÖ¹ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntMinuteDis() +* 功能说明: 分中断ç¦�æ­¢ +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntMinuteDis(RTC_TypeDef * RTCx) { @@ -245,11 +245,11 @@ void RTC_IntMinuteDis(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntMinuteClr() -* ¹¦ÄÜ˵Ã÷: ·ÖÖжϱêÖ¾Çå³ý -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntMinuteClr() +* 功能说明: 分中断标志清除 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntMinuteClr(RTC_TypeDef * RTCx) { @@ -257,11 +257,11 @@ void RTC_IntMinuteClr(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntMinuteStat() -* ¹¦ÄÜ˵Ã÷: ·ÖÖжÏ״̬ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: uint32_t 1 ·ÖÖжϷ¢Éú 0 ·ÖÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntMinuteStat() +* 功能说明: 分中断状æ€� +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: uint32_t 1 分中断å�‘生 0 分中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx) { @@ -269,11 +269,11 @@ uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntHourEn() -* ¹¦ÄÜ˵Ã÷: ʱÖжÏʹÄÜ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntHourEn() +* 功能说明: 时中断使能 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntHourEn(RTC_TypeDef * RTCx) { @@ -281,11 +281,11 @@ void RTC_IntHourEn(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntHourDis() -* ¹¦ÄÜ˵Ã÷: ʱÖжϽûÖ¹ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntHourDis() +* 功能说明: 时中断ç¦�æ­¢ +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntHourDis(RTC_TypeDef * RTCx) { @@ -293,11 +293,11 @@ void RTC_IntHourDis(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntHourClr() -* ¹¦ÄÜ˵Ã÷: ʱÖжϱêÖ¾Çå³ý -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntHourClr() +* 功能说明: 时中断标志清除 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntHourClr(RTC_TypeDef * RTCx) { @@ -305,11 +305,11 @@ void RTC_IntHourClr(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntHourStat() -* ¹¦ÄÜ˵Ã÷: ʱÖжÏ״̬ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: uint32_t 1 ʱÖжϷ¢Éú 0 ʱÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntHourStat() +* 功能说明: 时中断状æ€� +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: uint32_t 1 时中断å�‘生 0 时中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx) { @@ -317,11 +317,11 @@ uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntDateEn() -* ¹¦ÄÜ˵Ã÷: ÈÕÖжÏʹÄÜ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntDateEn() +* 功能说明: 日中断使能 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntDateEn(RTC_TypeDef * RTCx) { @@ -329,11 +329,11 @@ void RTC_IntDateEn(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntDateDis() -* ¹¦ÄÜ˵Ã÷: ÈÕÖжϽûÖ¹ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntDateDis() +* 功能说明: 日中断ç¦�æ­¢ +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntDateDis(RTC_TypeDef * RTCx) { @@ -341,11 +341,11 @@ void RTC_IntDateDis(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntDateClr() -* ¹¦ÄÜ˵Ã÷: ÈÕÖжϱêÖ¾Çå³ý -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntDateClr() +* 功能说明: 日中断标志清除 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntDateClr(RTC_TypeDef * RTCx) { @@ -353,11 +353,11 @@ void RTC_IntDateClr(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntDateStat() -* ¹¦ÄÜ˵Ã÷: ÈÕÖжÏ״̬ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: uint32_t 1 ÈÕÖжϷ¢Éú 0 ÈÕÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntDateStat() +* 功能说明: 日中断状æ€� +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: uint32_t 1 日中断å�‘生 0 日中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx) { @@ -365,11 +365,11 @@ uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntAlarmEn() -* ¹¦ÄÜ˵Ã÷: ÄÖÖÓÖжÏʹÄÜ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntAlarmEn() +* 功能说明: 闹钟中断使能 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntAlarmEn(RTC_TypeDef * RTCx) { @@ -377,11 +377,11 @@ void RTC_IntAlarmEn(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntAlarmDis() -* ¹¦ÄÜ˵Ã÷: ÄÖÖÓÖжϽûÖ¹ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntAlarmDis() +* 功能说明: 闹钟中断ç¦�æ­¢ +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntAlarmDis(RTC_TypeDef * RTCx) { @@ -389,11 +389,11 @@ void RTC_IntAlarmDis(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntAlarmClr() -* ¹¦ÄÜ˵Ã÷: ÄÖÖÓÖжϱêÖ¾Çå³ý -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntAlarmClr() +* 功能说明: 闹钟中断标志清除 +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void RTC_IntAlarmClr(RTC_TypeDef * RTCx) { @@ -401,11 +401,11 @@ void RTC_IntAlarmClr(RTC_TypeDef * RTCx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: RTC_IntAlarmStat() -* ¹¦ÄÜ˵Ã÷: ÄÖÖÓÖжÏ״̬ -* Êä Èë: RTC_TypeDef * RTCx Ö¸¶¨Òª±»ÉèÖõÄRTC£¬¿Éȡֵ°üÀ¨RTC -* Êä ³ö: uint32_t 1 ÄÖÖÓÖжϷ¢Éú 0 ÄÖÖÓÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: RTC_IntAlarmStat() +* 功能说明: 闹钟中断状æ€� +* 输 å…¥: RTC_TypeDef * RTCx 指定è¦�被设置的RTC,å�¯å�–值包括RTC +* 输 出: uint32_t 1 闹钟中断å�‘生 0 闹钟中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t RTC_IntAlarmStat(RTC_TypeDef * RTCx) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h index 513f885cf6..13cd0e6785 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h @@ -13,17 +13,17 @@ 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 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 Days; //RTC_SUNã€�RTC_MONã€�RTC_TUEã€�RTC_WEDã€�RTC_THUã€�RTC_FRIã€�RTC_SATå�Šå…¶æˆ–è¿�算组å�ˆ uint8_t Hour; uint8_t Minute; uint8_t Second; @@ -34,7 +34,7 @@ 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 Day; //RTC_SUNã€�RTC_MONã€�RTC_TUEã€�RTC_WEDã€�RTC_THUã€�RTC_FRIã€�RTC_SAT uint8_t Hour; uint8_t Minute; uint8_t Second; diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c index 2cb8b9e3e8..9175cce387 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_sdio.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄSDIO½Ó¿ÚÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: ΪÁËͨÓÃÐÔ¡¢¼æÈÝÐÔ¡¢Ò×ÓÃÐÔ£¬Ö»Ö§³ÖÒÔ512×Ö½ÚΪµ¥Î»µÄ¶Áд -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_sdio.c +* 功能说明: SWM320å�•片机的SDIO接å�£é©±åŠ¨åº“ +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: 为了通用性ã€�兼容性ã€�易用性,å�ªæ”¯æŒ�以512字节为å�•ä½�的读写 +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -25,11 +25,11 @@ SD_CardInfo SD_cardInfo; /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_Init() -* ¹¦ÄÜ˵Ã÷: SDIO¶ÁдSD¿¨³õʼ»¯£¬³õʼ»¯³É¸ßËÙ4Ïßģʽ¡¢¶ÁдÒÔ512×Ö½Ú´óС½øÐÐ -* Êä Èë: uint32_t freq SDIO_CLKʱÖÓÆµÂÊ -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_Init() +* 功能说明: SDIO读写SDå�¡åˆ�始化,åˆ�始化æˆ�高速4线模å¼�ã€�读写以512字节大å°�进行 +* 输 å…¥: uint32_t freq SDIO_CLK时钟频率 +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_Init(uint32_t freq) { @@ -37,7 +37,7 @@ uint32_t SDIO_Init(uint32_t freq) uint32_t resp, resps[4]; SYS->CLKDIV &= ~SYS_CLKDIV_SDIO_Msk; - if(SystemCoreClock > 80000000) //SDIOʱÖÓÐèҪСÓÚ52MHz + 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 @@ -64,7 +64,7 @@ uint32_t SDIO_Init(uint32_t freq) 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 + 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; @@ -77,50 +77,50 @@ uint32_t SDIO_Init(uint32_t freq) if(res != SD_RES_OK) return res; - if(resp != 0x120) return SD_RES_ERR; //²»ÊÇSD¿¨£¬¿ÉÄÜÊÇMMC¿¨ + 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 + } 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 + 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 + 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 + 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 + 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Çл»µ½¸ßËÙ + (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_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_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_SendCmd(SD_CMD_SET_BLOCKLEN, 512, SD_RESP_32b, &resp); //固定å�—大å°�ä½�512字节 SDIO->BLK = 512; @@ -128,12 +128,12 @@ uint32_t SDIO_Init(uint32_t freq) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_BlockWrite() -* ¹¦ÄÜ˵Ã÷: ÏòSD¿¨Ð´ÈëÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint32_t buff[] ҪдÈëµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_BlockWrite() +* 功能说明: å�‘SDå�¡å†™å…¥æ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint32_t buff[] è¦�写入的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[]) { @@ -159,13 +159,13 @@ uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[]) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_MultiBlockWrite() -* ¹¦ÄÜ˵Ã÷: ÏòSD¿¨Ð´Èë¶à¿éÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint16_t block_cnt ҪдÈëµÄ¿éÊý -* uint32_t buff[] ҪдÈëµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_MultiBlockWrite() +* 功能说明: å�‘SDå�¡å†™å…¥å¤šå�—æ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint16_t block_cnt è¦�写入的å�—æ•° +* uint32_t buff[] è¦�写入的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]) { @@ -194,13 +194,13 @@ uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_DMABlockWrite() -* ¹¦ÄÜ˵Ã÷: ͨ¹ýDMAÏòSD¿¨Ð´Èë¶à¿éÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint16_t block_cnt ҪдÈëµÄ¿éÊý -* uint32_t buff[] ҪдÈëµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_DMABlockWrite() +* 功能说明: 通过DMAå�‘SDå�¡å†™å…¥å¤šå�—æ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint16_t block_cnt è¦�写入的å�—æ•° +* uint32_t buff[] è¦�写入的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]) { @@ -223,12 +223,12 @@ uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t bu } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_BlockRead() -* ¹¦ÄÜ˵Ã÷: ´ÓSD¿¨¶Á³öÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint32_t buff[] ¶Á³öµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_BlockRead() +* 功能说明: 从SDå�¡è¯»å‡ºæ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint32_t buff[] 读出的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[]) { @@ -254,13 +254,13 @@ uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[]) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_MultiBlockRead() -* ¹¦ÄÜ˵Ã÷: ´ÓSD¿¨¶Á³ö¶à¿éÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint16_t block_cnt Òª¶Á³öµÄ¿éÊý -* uint32_t buff[] ¶Á³öµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_MultiBlockRead() +* 功能说明: 从SDå�¡è¯»å‡ºå¤šå�—æ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint16_t block_cnt è¦�读出的å�—æ•° +* uint32_t buff[] 读出的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]) { @@ -289,13 +289,13 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDIO_DMABlockRead() -* ¹¦ÄÜ˵Ã÷: ͨ¹ýDMA´ÓSD¿¨¶Á³ö¶à¿éÊý¾Ý -* Êä Èë: uint32_t block_addr SD¿¨¿éµØÖ·£¬Ã¿¿é512×Ö½Ú -* uint16_t block_cnt Òª¶Á³öµÄ¿éÊý -* uint32_t buff[] ¶Á³öµÄÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDIO_DMABlockRead() +* 功能说明: 通过DMA从SDå�¡è¯»å‡ºå¤šå�—æ•°æ�® +* 输 å…¥: uint32_t block_addr SDå�¡å�—地å�€ï¼Œæ¯�å�—512字节 +* uint16_t block_cnt è¦�读出的å�—æ•° +* uint32_t buff[] 读出的数æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]) { @@ -318,20 +318,20 @@ uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buf } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: _SDIO_SendCmd() -* ¹¦ÄÜ˵Ã÷: SDIOÏòSD¿¨·¢ËÍÃüÁî -* Êä Èë: uint32_t cmd ÃüÁîË÷Òý -* uint32_t arg ÃüÁî²ÎÊý -* uint32_t _resp_type ÏìÓ¦ÀàÐÍ£¬È¡ÖµSD_RESP_NO¡¢SD_RESP_32b¡¢SD_RESP_128b¡¢SD_RESP_32b_busy -* uint32_t *resp_data ÏìÓ¦ÄÚÈÝ -* uint32_t have_data ÊÇ·ñÓÐÊý¾Ý´«Êä -* uint32_t data_read 1 ¶ÁSD¿¨ 0 дSD¿¨ -* uint16_t block_cnt ¶Áд¿é¸öÊý -* uint32_t use_dma 1 ʹÓÃDMA°áÔËÊý¾Ý -* Êä ³ö: uint32_t SD_RES_OK ²Ù×÷³É¹¦ SD_RES_ERR ²Ù×÷ʧ°Ü SD_RES_TIMEOUT ²Ù×÷³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: _SDIO_SendCmd() +* 功能说明: SDIOå�‘SDå�¡å�‘é€�命令 +* 输 å…¥: uint32_t cmd 命令索引 +* uint32_t arg 命令å�‚æ•° +* uint32_t resp_type å“�应类型,å�–值SD_RESP_NOã€�SD_RESP_32bã€�SD_RESP_128bã€�SD_RESP_32b_busy +* uint32_t *resp_data å“�应内容 +* uint32_t have_data 是å�¦æœ‰æ•°æ�®ä¼ è¾“ +* uint32_t data_read 1 读SDå�¡ 0 写SDå�¡ +* uint16_t block_cnt 读写å�—个数 +* uint32_t use_dma 1 使用DMAæ�¬è¿�æ•°æ�® +* 输 出: uint32_t SD_RES_OK æ“�作æˆ�功 SD_RES_ERR æ“�作失败 SD_RES_TIMEOUT æ“�作超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma) +uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma) { SDIO->BLK &= ~SDIO_BLK_COUNT_Msk; SDIO->BLK |= (block_cnt << SDIO_BLK_COUNT_Pos); @@ -341,7 +341,7 @@ uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t (0 << SDIO_CMD_CMDTYPE_Pos) | (0 << SDIO_CMD_IDXCHECK_Pos) | (0 << SDIO_CMD_CRCCHECK_Pos) | - (_resp_type << SDIO_CMD_RESPTYPE_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) | @@ -366,14 +366,14 @@ uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t } SDIO->IF = SDIO_IF_CMDDONE_Msk; - if(_resp_type == SD_RESP_32b) + if(resp_type == SD_RESP_32b) { resp_data[0] = SDIO->RESP[0]; } - else if(_resp_type == SD_RESP_128b) + 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 + //寄存器中将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); @@ -538,7 +538,7 @@ void parseCSD(uint32_t CSD_Tab[4]) /*!< Byte 10 */ tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8); - SD_cardInfo.CardCapacity = (SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024; + SD_cardInfo.CardCapacity = (uint64_t)(SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024; SD_cardInfo.CardBlockSize = 512; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h index ece2711ce4..52552eed99 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h @@ -35,10 +35,10 @@ #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_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 @@ -133,11 +133,11 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]); uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]); -uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma); +uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma); -#define SDIO_SendCmd(cmd, arg, _resp_type, resp_data) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 0, 0, 0, 0) -#define SDIO_SendCmdWithData(cmd, arg, _resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 0) -#define SDIO_SendCmdWithDataByDMA(cmd, arg, _resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 1) +#define SDIO_SendCmd(cmd, arg, resp_type, resp_data) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 0, 0, 0, 0) +#define SDIO_SendCmdWithData(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 0) +#define SDIO_SendCmdWithDataByDMA(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 1) void parseCID(uint32_t CID_Tab[4]); void parseCSD(uint32_t CID_Tab[4]); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c index 246f572eeb..e1075564cb 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_sdram.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄSDRAMÇý¶¯³ÌÐò -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_sdram.c +* 功能说明: SWM320å�•片机的SDRAM驱动程åº� +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -22,11 +22,11 @@ #include "SWM320_sdram.h" /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDRAM_Init() -* ¹¦ÄÜ˵Ã÷: SDRAM¿ØÖÆÆ÷³õʼ»¯ -* Êä Èë: SDRAM_InitStructure * initStruct °üº¬ SDRAM ¿ØÖÆÆ÷Ïà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDRAM_Init() +* 功能说明: SDRAM控制器åˆ�始化 +* 输 å…¥: SDRAM_InitStructure * initStruct 包å�« SDRAM 控制器相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SDRAM_Init(SDRAM_InitStructure * initStruct) { @@ -35,9 +35,9 @@ void SDRAM_Init(SDRAM_InitStructure * initStruct) SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos); SYS->CLKDIV &= ~SYS_CLKDIV_SDRAM_Msk; - SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos); //2·ÖƵ + SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos); //2分频 - SDRAMC->CR0 = (2 << SDRAMC_CR0_BURSTLEN_Pos) | //2 Burst LengthΪ4 + 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) | @@ -69,11 +69,11 @@ void SDRAM_Init(SDRAM_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDRAM_Enable() -* ¹¦ÄÜ˵Ã÷: SDRAMʹÄÜ£¬Ê¹Äܺó¿É¶ÁдSDRAM -* Êä Èë: ÎÞ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDRAM_Enable() +* 功能说明: SDRAM使能,使能å�Žå�¯è¯»å†™SDRAM +* 输 å…¥: æ—  +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SDRAM_Enable(void) { @@ -86,11 +86,11 @@ void SDRAM_Enable(void) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SDRAM_Disable() -* ¹¦ÄÜ˵Ã÷: SDRAM½ûÄÜ£¬½ûÄܺóSDRAM¿ÅÁ£½øÈëµÍ¹¦ºÄģʽ¡¢²¢×ÔˢУ¬²»¿É¶Áд -* Êä Èë: ÎÞ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SDRAM_Disable() +* 功能说明: SDRAMç¦�能,ç¦�能å�ŽSDRAM颗粒进入低功耗模å¼�ã€�并自刷新,ä¸�å�¯è¯»å†™ +* 输 å…¥: æ—  +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SDRAM_Disable(void) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h index 5659b3e330..d6f6761226 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h @@ -2,17 +2,17 @@ #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 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ÃüÁîµ½ÁíÒ»¸öÃüÁî¼äÑÓʱ + 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 diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c index fb38187a3f..dcd618ec92 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_spi.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄSPI¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_spi.c +* 功能说明: SWM320å�•片机的SPI功能驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,12 +23,12 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_Init() -* ¹¦ÄÜ˵Ã÷: SPIͬ²½´®Ðнӿڳõʼ»¯£¬°üÀ¨Ö¡³¤¶ÈÉ趨¡¢Ê±ÐòÉ趨¡¢ËÙ¶ÈÉ趨¡¢ÖжÏÉ趨¡¢FIFO´¥·¢É趨 -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* SPI_InitStructure * initStruct °üº¬SPIÏà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_Init() +* 功能说明: SPIå�Œæ­¥ä¸²è¡ŒæŽ¥å�£åˆ�始化,包括帧长度设定ã€�æ—¶åº�设定ã€�速度设定ã€�中断设定ã€�FIFO触å�‘设定 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* SPI_InitStructure * initStruct 包å�«SPI相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct) { @@ -39,11 +39,11 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct) break; case ((uint32_t)SPI1): - SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos); //ÓëSPI0ʹÓÃͬһλʱÖÓʹÄÜ + SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos); //与SPI0使用å�Œä¸€ä½�时钟使能 break; } - SPI_Close(SPIx); //һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚSPI¹Ø±ÕʱÉèÖà + 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); @@ -55,7 +55,7 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct) (initStruct->clkDiv << SPI_CTRL_CLKDIV_Pos) | (0 << SPI_CTRL_SSN_H_Pos); - SPIx->IF = (0x01 << SPI_IF_RFOVF_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) | @@ -88,11 +88,11 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_Open() -* ¹¦ÄÜ˵Ã÷: SPI´ò¿ª£¬ÔÊÐíÊÕ·¢ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_Open() +* 功能说明: SPI打开,å…�许收å�‘ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_Open(SPI_TypeDef * SPIx) { @@ -100,11 +100,11 @@ void SPI_Open(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_Close() -* ¹¦ÄÜ˵Ã÷: SPI¹Ø±Õ£¬½ûÖ¹ÊÕ·¢ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_Close() +* 功能说明: SPI关闭,ç¦�止收å�‘ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_Close(SPI_TypeDef * SPIx) { @@ -112,11 +112,11 @@ void SPI_Close(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_Read() -* ¹¦ÄÜ˵Ã÷: ¶Áȡһ¸öÊý¾Ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t ¶ÁÈ¡µ½µÄÊý¾Ý -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_Read() +* 功能说明: 读å�–一个数æ�® +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 读å�–到的数æ�® +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_Read(SPI_TypeDef * SPIx) { @@ -124,12 +124,12 @@ uint32_t SPI_Read(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_Write() -* ¹¦ÄÜ˵Ã÷: дÈëÒ»¸öÊý¾Ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* uint32_t ҪдÈëµÄÊý¾Ý -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_Write() +* 功能说明: 写入一个数æ�® +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* uint32_t è¦�写入的数æ�® +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_Write(SPI_TypeDef * SPIx, uint32_t data) { @@ -137,12 +137,12 @@ void SPI_Write(SPI_TypeDef * SPIx, uint32_t data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_WriteWithWait() -* ¹¦ÄÜ˵Ã÷: дÈëÒ»¸öÊý¾Ý²¢µÈ´ýÊý¾ÝÍêÈ«·¢ËͳöÈ¥ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1¡¢SPI1 -* uint32_t ҪдÈëµÄÊý¾Ý -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_WriteWithWait() +* 功能说明: 写入一个数æ�®å¹¶ç­‰å¾…æ•°æ�®å®Œå…¨å�‘é€�出去 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1ã€�SPI1 +* uint32_t è¦�写入的数æ�® +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data) { @@ -154,12 +154,12 @@ void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_ReadWrite() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍÒ»¸öÊý¾Ý£¬²¢·µ»Ø·¢Ë͹ý³ÌÖнÓÊÕµ½µÄ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* uint32_t data Òª·¢Ë͵ÄÊý¾Ý -* Êä ³ö: uint32_t ½ÓÊÕµ½µÄÊý¾Ý -* ×¢ÒâÊÂÏî: ¶ÔÓÚͬһ¸öSPIÄ£¿é£¬´Ëº¯Êý²»Ó¦ÓëSPI_Write()»ì×ÅÓã¬ÒòΪSPI_Write()²»Çå³ýSPI_STAT_RFNE״̬ +* 函数å��ç§°: SPI_ReadWrite() +* 功能说明: å�‘é€�一个数æ�®ï¼Œå¹¶è¿”回å�‘é€�过程中接收到的 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* uint32_t data è¦�å�‘é€�的数æ�® +* 输 出: uint32_t 接收到的数æ�® +* 注æ„�事项: 对于å�Œä¸€ä¸ªSPI模å�—,此函数ä¸�应与SPI_Write()æ··ç�€ç”¨ï¼Œå› ä¸ºSPI_Write()ä¸�清除SPI_STAT_RFNE状æ€� ******************************************************************************************************************************************/ uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data) { @@ -170,11 +170,11 @@ uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_IsRXEmpty() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÊÇ·ñ¿Õ£¬Èç¹û²»¿ÕÔò¿ÉÒÔ¼ÌÐøSPI_Read() -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ½ÓÊÕFIFO¿Õ 0 ½ÓÊÕFIFO·Ç¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_IsRXEmpty() +* 功能说明: 接收FIFO是å�¦ç©ºï¼Œå¦‚æžœä¸�空则å�¯ä»¥ç»§ç»­SPI_Read() +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 接收FIFO空 0 接收FIFOé�žç©º +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx) { @@ -182,11 +182,11 @@ uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_IsTXFull() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFOÊÇ·ñÂú£¬Èç¹û²»ÂúÔò¿ÉÒÔ¼ÌÐøSPI_Write() -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFOÂú 0 ·¢ËÍFIFO²»Âú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_IsTXFull() +* 功能说明: å�‘é€�FIFO是å�¦æ»¡ï¼Œå¦‚æžœä¸�满则å�¯ä»¥ç»§ç»­SPI_Write() +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�FIFO满 0 å�‘é€�FIFOä¸�满 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx) { @@ -194,11 +194,11 @@ uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_IsTXEmpty() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFOÊÇ·ñ¿Õ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFO¿Õ 0 ·¢ËÍFIFO·Ç¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_IsTXEmpty() +* 功能说明: å�‘é€�FIFO是å�¦ç©º +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�FIFO空 0 å�‘é€�FIFOé�žç©º +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx) { @@ -207,11 +207,11 @@ uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx) /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXHalfFullEn() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFO°ëÂúÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXHalfFullEn() +* 功能说明: 接收FIFOå�Šæ»¡ä¸­æ–­ä½¿èƒ½ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx) { @@ -219,11 +219,11 @@ void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXHalfFullDis() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFO°ëÂúÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXHalfFullDis() +* 功能说明: 接收FIFOå�Šæ»¡ä¸­æ–­ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx) { @@ -231,11 +231,11 @@ void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXHalfFullClr() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFO°ëÂúÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXHalfFullClr() +* 功能说明: 接收FIFOå�Šæ»¡ä¸­æ–­æ ‡å¿—清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx) { @@ -243,11 +243,11 @@ void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXHalfFullStat() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFO°ëÂúÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ½ÓÊÕFIFO´ïµ½°ëÂú 0 ½ÓÊÕFIFOδ´ïµ½°ëÂú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXHalfFullStat() +* 功能说明: 接收FIFOå�Šæ»¡ä¸­æ–­çжæ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 接收FIFO达到å�Šæ»¡ 0 接收FIFO未达到å�Šæ»¡ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx) { @@ -255,11 +255,11 @@ uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXFullEn() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÂúÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXFullEn() +* 功能说明: 接收FIFO满中断使能 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXFullEn(SPI_TypeDef * SPIx) { @@ -267,11 +267,11 @@ void SPI_INTRXFullEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXFullDis() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÂúÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXFullDis() +* 功能说明: 接收FIFO满中断ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXFullDis(SPI_TypeDef * SPIx) { @@ -279,11 +279,11 @@ void SPI_INTRXFullDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXFullClr() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÂúÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXFullClr() +* 功能说明: 接收FIFO满中断标志清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXFullClr(SPI_TypeDef * SPIx) { @@ -291,11 +291,11 @@ void SPI_INTRXFullClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXFullStat() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÂúÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ½ÓÊÕFIFOÂú 0 ½ÓÊÕFIFOδÂú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXFullStat() +* 功能说明: 接收FIFO满中断状æ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 接收FIFO满 0 接收FIFO未满 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx) { @@ -303,11 +303,11 @@ uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXOverflowEn() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÒç³öÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXOverflowEn() +* 功能说明: 接收FIFO溢出中断使能 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx) { @@ -315,11 +315,11 @@ void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXOverflowDis() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÒç³öÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXOverflowDis() +* 功能说明: 接收FIFO溢出中断ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx) { @@ -327,11 +327,11 @@ void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXOverflowClr() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÒç³öÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXOverflowClr() +* 功能说明: 接收FIFO溢出中断标志清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx) { @@ -339,11 +339,11 @@ void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTRXOverflowStat() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÒç³öÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ½ÓÊÕFIFOÒç³ö 0 ½ÓÊÕFIFOδÒç³ö -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTRXOverflowStat() +* 功能说明: 接收FIFO溢出中断状æ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 接收FIFO溢出 0 接收FIFO未溢出 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx) { @@ -351,11 +351,11 @@ uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXHalfFullEn() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO°ëÂúÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXHalfFullEn() +* 功能说明: å�‘é€�FIFOå�Šæ»¡ä¸­æ–­ä½¿èƒ½ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx) { @@ -363,11 +363,11 @@ void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXHalfFullDis() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO°ëÂúÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXHalfFullDis() +* 功能说明: å�‘é€�FIFOå�Šæ»¡ä¸­æ–­ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx) { @@ -375,11 +375,11 @@ void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXHalfFullClr() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO°ëÂúÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXHalfFullClr() +* 功能说明: å�‘é€�FIFOå�Šæ»¡ä¸­æ–­æ ‡å¿—清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx) { @@ -387,11 +387,11 @@ void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXHalfFullStat() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO°ëÂúÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFO´ïµ½°ëÂú 0 ·¢ËÍFIFOδ´ïµ½°ëÂú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXHalfFullStat() +* 功能说明: å�‘é€�FIFOå�Šæ»¡ä¸­æ–­çжæ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�FIFO达到å�Šæ»¡ 0 å�‘é€�FIFO未达到å�Šæ»¡ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx) { @@ -399,11 +399,11 @@ uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXEmptyEn() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXEmptyEn() +* 功能说明: å�‘é€�FIFO空中断使能 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx) { @@ -411,11 +411,11 @@ void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXEmptyDis() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXEmptyDis() +* 功能说明: å�‘é€�FIFO空中断ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx) { @@ -423,11 +423,11 @@ void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXEmptyClr() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXEmptyClr() +* 功能说明: å�‘é€�FIFO空中断标志清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx) { @@ -435,11 +435,11 @@ void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXEmptyStat() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFO¿Õ 0 ·¢ËÍFIFO·Ç¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXEmptyStat() +* 功能说明: å�‘é€�FIFO空中断状æ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�FIFO空 0 å�‘é€�FIFOé�žç©º +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx) { @@ -447,11 +447,11 @@ uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXCompleteEn() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXCompleteEn() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断使能 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx) { @@ -459,11 +459,11 @@ void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXCompleteDis() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXCompleteDis() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx) { @@ -471,11 +471,11 @@ void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXCompleteClr() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏ״̬Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXCompleteClr() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断状æ€�清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx) { @@ -483,11 +483,11 @@ void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXCompleteStat() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿Õ 0 ·¢ËÍFIFO»ò·¢ËÍÒÆÎ»¼Ä´æÆ÷·Ç¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXCompleteStat() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断状æ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空 0 å�‘é€�FIFO或å�‘é€�ç§»ä½�寄存器é�žç©º +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx) { @@ -495,11 +495,11 @@ uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXWordCompleteEn() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжÏʹÄÜ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXWordCompleteEn() +* 功能说明: å�‘é€�FIFOå­—å�‘é€�完æˆ�中断使能 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx) { @@ -507,11 +507,11 @@ void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXWordCompleteDis() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжϽûÖ¹ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXWordCompleteDis() +* 功能说明: å�‘é€�FIFOå­—å�‘é€�完æˆ�中断ç¦�æ­¢ +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx) { @@ -519,11 +519,11 @@ void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXWordCompleteClr() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжϱêÖ¾Çå³ý -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXWordCompleteClr() +* 功能说明: å�‘é€�FIFOå­—å�‘é€�完æˆ�中断标志清除 +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx) { @@ -531,11 +531,11 @@ void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SPI_INTTXWordCompleteStat() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO×Ö·¢ËÍÍê³ÉÖжÏ״̬ -* Êä Èë: SPI_TypeDef * SPIx Ö¸¶¨Òª±»ÉèÖõÄSPI£¬ÓÐЧֵ°üÀ¨SPI0¡¢SPI1 -* Êä ³ö: uint32_t 1 ·¢ËÍÍê³ÉÖжÏÒÑ·¢Éú 0 ·¢ËÍÍê³ÉÖжÏδ·¢Éú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SPI_INTTXWordCompleteStat() +* 功能说明: å�‘é€�FIFOå­—å�‘é€�完æˆ�中断状æ€� +* 输 å…¥: SPI_TypeDef * SPIx 指定è¦�被设置的SPI,有效值包括SPI0ã€�SPI1 +* 输 出: uint32_t 1 å�‘é€�完æˆ�中断已å�‘生 0 å�‘é€�完æˆ�中断未å�‘生 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef * SPIx) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h index 42c4d0cb70..a7725ee24e 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h @@ -2,26 +2,26 @@ #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 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 ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ + 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_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_FIRST_EDGE 0 //第一个时钟沿开始采样 +#define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样 -#define SPI_LOW_LEVEL 0 //¿ÕÏÐʱʱÖÓÏß±£³ÖµÍµçƽ -#define SPI_HIGH_LEVEL 1 //¿ÕÏÐʱʱÖÓÏß±£³Ö¸ßµçƽ +#define SPI_LOW_LEVEL 0 //空闲时时钟线ä¿�æŒ�低电平 +#define SPI_HIGH_LEVEL 1 //空闲时时钟线ä¿�æŒ�高电平 #define SPI_CLKDIV_4 0 #define SPI_CLKDIV_8 1 @@ -34,18 +34,18 @@ typedef struct { -void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct); //SPI³õʼ»¯ -void SPI_Open(SPI_TypeDef * SPIx); //SPI´ò¿ª£¬ÔÊÐíÊÕ·¢ -void SPI_Close(SPI_TypeDef * SPIx); //SPI¹Ø±Õ£¬½ûÖ¹ÊÕ·¢ +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ÊÇ·ñ¿Õ +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); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c index d1f421aaba..62e4c84eed 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_sram.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄSRAMÇý¶¯³ÌÐò -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_sram.c +* 功能说明: SWM320å�•片机的SRAM驱动程åº� +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,17 +23,17 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: SRAM_Init() -* ¹¦ÄÜ˵Ã÷: SRAM¿ØÖÆÆ÷³õʼ»¯ -* Êä Èë: SRAM_InitStructure * initStruct °üº¬ SRAM ¿ØÖÆÆ÷Ïà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: SRAM_Init() +* 功能说明: SRAM控制器åˆ�始化 +* 输 å…¥: SRAM_InitStructure * initStruct 包å�« SRAM 控制器相关设定值的结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void SRAM_Init(SRAM_InitStructure * initStruct) { uint32_t i; - // ÅäÖÃSRAMǰÐèҪˢÐÂÏÂSDRAM¿ØÖÆÆ÷ + // é…�ç½®SRAMå‰�需è¦�刷新下SDRAM控制器 do { SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos); @@ -49,5 +49,5 @@ void SRAM_Init(SRAM_InitStructure * initStruct) SRAMC->CR = (initStruct->ClkDiv << SRAMC_CR_RWTIME_Pos) | (initStruct->DataWidth << SRAMC_CR_BYTEIF_Pos) | - (0 << SRAMC_CR_HBLBDIS_Pos); // ʹÄÜ×Ö½Ú¡¢°ë×Ö·ÃÎÊ + (0 << SRAMC_CR_HBLBDIS_Pos); // 使能字节ã€�å�Šå­—访问 } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h index 2ef71b24ba..799b271a99 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h @@ -2,8 +2,8 @@ #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 + uint8_t ClkDiv; //SRAM_CLKDIV_5...SRAM_CLKDIV_16,根æ�®SRAM芯片所能跑的最高频率选择å�ˆé€‚分频 + uint8_t DataWidth; //SRAM_DATAWIDTH_8ã€�SRAM_DATAWIDTH_16 } SRAM_InitStructure; diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c index d4cbe03238..b67711a49a 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_timr.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄ¼ÆÊýÆ÷/¶¨Ê±Æ÷¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_timr.c +* 功能说明: SWM320å�•片机的计数器/定时器功能驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,20 +23,20 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_Init() -* ¹¦ÄÜ˵Ã÷: TIMR¶¨Ê±Æ÷/¼ÆÊýÆ÷³õʼ»¯ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬ÓÐЧֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* uint32_t mode TIMR_MODE_TIMER ¶¨Ê±Æ÷ģʽ TIMR_MODE_COUNTER ¼ÆÊýÆ÷ģʽ -* uint32_t period ¶¨Ê±/¼ÆÊýÖÜÆÚ -* uint32_t int_en ÖжÏʹÄÜ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_Init() +* 功能说明: TIMR定时器/计数器åˆ�始化 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,有效值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* uint32_t mode TIMR_MODE_TIMER 定时器模å¼� TIMR_MODE_COUNTER 计数器模å¼� +* uint32_t period 定时/计数周期 +* uint32_t int_en 中断使能 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en) { SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos); - TIMR_Stop(TIMRx); //һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚ¶¨Ê±Æ÷ֹͣʱÉèÖà + TIMR_Stop(TIMRx); //一些关键寄存器å�ªèƒ½åœ¨å®šæ—¶å™¨å�œæ­¢æ—¶è®¾ç½® TIMRx->CTRL &= ~TIMR_CTRL_CLKSRC_Msk; TIMRx->CTRL |= mode << TIMR_CTRL_CLKSRC_Pos; @@ -46,7 +46,7 @@ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t in switch((uint32_t)TIMRx) { case ((uint32_t)TIMR0): - TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos); //ʹÄÜÖжÏǰÇå³ýÖжϱêÖ¾ + TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos); //使能中断å‰�清除中断标志 TIMRG->IE &= ~TIMRG_IE_TIMR0_Msk; TIMRG->IE |= (int_en << TIMRG_IE_TIMR0_Pos); @@ -96,11 +96,11 @@ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t in } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_Start() -* ¹¦ÄÜ˵Ã÷: Æô¶¯¶¨Ê±Æ÷£¬´Ó³õʼֵ¿ªÊ¼¼ÆÊ±/¼ÆÊý -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_Start() +* 功能说明: å�¯åŠ¨å®šæ—¶å™¨ï¼Œä»Žåˆ�始值开始计时/计数 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_Start(TIMR_TypeDef * TIMRx) { @@ -108,11 +108,11 @@ void TIMR_Start(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_Stop() -* ¹¦ÄÜ˵Ã÷: Í£Ö¹¶¨Ê±Æ÷ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_Stop() +* 功能说明: å�œæ­¢å®šæ—¶å™¨ +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_Stop(TIMR_TypeDef * TIMRx) { @@ -120,11 +120,11 @@ void TIMR_Stop(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_Halt() -* ¹¦ÄÜ˵Ã÷: ÔÝÍ£¶¨Ê±Æ÷£¬¼ÆÊýÖµ±£³Ö²»±ä -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_Halt() +* 功能说明: æš‚å�œå®šæ—¶å™¨ï¼Œè®¡æ•°å€¼ä¿�æŒ�ä¸�å�˜ +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_Halt(TIMR_TypeDef * TIMRx) { @@ -157,11 +157,11 @@ void TIMR_Halt(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_Resume() -* ¹¦ÄÜ˵Ã÷: »Ö¸´¶¨Ê±Æ÷£¬´ÓÔÝÍ£´¦¼ÌÐø¼ÆÊý -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_Resume() +* 功能说明: æ�¢å¤�定时器,从暂å�œå¤„继续计数 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_Resume(TIMR_TypeDef * TIMRx) { @@ -194,12 +194,12 @@ void TIMR_Resume(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_SetPeriod() -* ¹¦ÄÜ˵Ã÷: ÉèÖö¨Ê±/¼ÆÊýÖÜÆÚ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* uint32_t period ¶¨Ê±/¼ÆÊýÖÜÆÚ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_SetPeriod() +* 功能说明: 设置定时/计数周期 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* uint32_t period 定时/计数周期 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period) { @@ -207,11 +207,11 @@ void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_GetPeriod() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡¶¨Ê±/¼ÆÊýÖÜÆÚ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: uint32_t µ±Ç°¶¨Ê±/¼ÆÊýÖÜÆÚ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_GetPeriod() +* 功能说明: 获å�–定时/计数周期 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: uint32_t 当å‰�定时/计数周期 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx) { @@ -219,11 +219,11 @@ uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_GetCurValue() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡µ±Ç°¼ÆÊýÖµ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: uint32_t µ±Ç°¼ÆÊýÖµ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_GetCurValue() +* 功能说明: 获å�–当å‰�计数值 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: uint32_t 当å‰�计数值 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx) { @@ -231,11 +231,11 @@ uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_INTEn() -* ¹¦ÄÜ˵Ã÷: ʹÄÜÖÐ¶Ï -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_INTEn() +* 功能说明: 使能中断 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_INTEn(TIMR_TypeDef * TIMRx) { @@ -274,11 +274,11 @@ void TIMR_INTEn(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_INTDis() -* ¹¦ÄÜ˵Ã÷: ½ûÄÜÖÐ¶Ï -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_INTDis() +* 功能说明: ç¦�能中断 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_INTDis(TIMR_TypeDef * TIMRx) { @@ -311,11 +311,11 @@ void TIMR_INTDis(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_INTClr() -* ¹¦ÄÜ˵Ã÷: Çå³ýÖжϱêÖ¾ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_INTClr() +* 功能说明: 清除中断标志 +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void TIMR_INTClr(TIMR_TypeDef * TIMRx) { @@ -348,11 +348,11 @@ void TIMR_INTClr(TIMR_TypeDef * TIMRx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: TIMR_INTStat() -* ¹¦ÄÜ˵Ã÷: »ñÈ¡ÖжÏ״̬ -* Êä Èë: TIMR_TypeDef * TIMRx Ö¸¶¨Òª±»ÉèÖõĶ¨Ê±Æ÷£¬¿Éȡֵ°üÀ¨TIMR0¡¢TIMR1¡¢TIMR2¡¢TIMR3¡¢TIMR4¡¢TIMR5 -* Êä ³ö: uint32_t 0 TIMRxδ²úÉúÖÐ¶Ï 1 TIMRx²úÉúÁËÖÐ¶Ï -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: TIMR_INTStat() +* 功能说明: 获å�–中断状æ€� +* 输 å…¥: TIMR_TypeDef * TIMRx 指定è¦�被设置的定时器,å�¯å�–值包括TIMR0ã€�TIMR1ã€�TIMR2ã€�TIMR3ã€�TIMR4ã€�TIMR5 +* 输 出: uint32_t 0 TIMRx未产生中断 1 TIMRx产生了中断 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx) { @@ -382,32 +382,32 @@ uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx) /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: Pulse_Init() -* ¹¦ÄÜ˵Ã÷: Âö¿í²âÁ¿¹¦Äܳõʼ»¯ -* Êä Èë: uint32_t pulse PULSE_LOW ²âÁ¿µÍÂö³å¿í¶È PULSE_HIGH ²âÁ¿¸ßÂö³å¿í¶È -* uint32_t int_en ÊÇ·ñʹÄÜÂö³å²âÁ¿Íê³ÉÖÐ¶Ï -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: Pulse_Init() +* 功能说明: 脉宽测é‡�功能åˆ�始化 +* 输 å…¥: uint32_t pulse PULSE_LOW 测é‡�低脉冲宽度 PULSE_HIGH 测é‡�高脉冲宽度 +* uint32_t int_en 是å�¦ä½¿èƒ½è„‰å†²æµ‹é‡�完æˆ�中断 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void Pulse_Init(uint32_t pulse, uint32_t int_en) { SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos); - TIMRG->PCTRL = (0 << TIMRG_PCTRL_CLKSRC_Pos) | // ϵͳʱÖÓ×÷ΪʱÖÓÔ´ + TIMRG->PCTRL = (0 << TIMRG_PCTRL_CLKSRC_Pos) | // 系统时钟作为时钟æº� (pulse << TIMRG_PCTRL_HIGH_Pos) | (0 << TIMRG_PCTRL_EN_Pos); - TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos); //ʹÄܲÅÄܲéѯÖжϱêÖ¾ + TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos); //使能æ‰�能查询中断标志 if(int_en) NVIC_EnableIRQ(PULSE_IRQn); } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: Pulse_Start() -* ¹¦ÄÜ˵Ã÷: Âö¿í²âÁ¿¹¦ÄÜÆô¶¯£¬²âÁ¿µ½Âö¿íºó»á×Ô¶¯¹Ø±Õ²âÁ¿¹¦ÄÜ -* Êä Èë: ÎÞ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: Pulse_Start() +* 功能说明: 脉宽测é‡�功能å�¯åŠ¨ï¼Œæµ‹é‡�到脉宽å�Žä¼šè‡ªåŠ¨å…³é—­æµ‹é‡�功能 +* 输 å…¥: æ—  +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void Pulse_Start(void) { @@ -415,17 +415,17 @@ void Pulse_Start(void) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: Pulse_Done() -* ¹¦ÄÜ˵Ã÷: Âö¿í²âÁ¿ÊÇ·ñÍê³É -* Êä Èë: ÎÞ -* Êä ³ö: uint32_t 1 ²âÁ¿ÒÑÍê³É 0 ²âÁ¿Î´Íê³É -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: Pulse_Done() +* 功能说明: 脉宽测é‡�是å�¦å®Œæˆ� +* 输 å…¥: æ—  +* 输 出: uint32_t 1 测é‡�已完æˆ� 0 测é‡�未完æˆ� +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t Pulse_Done(void) { if(TIMRG->IF & TIMRG_IF_PULSE_Msk) { - TIMRG->IF = TIMRG_IF_PULSE_Msk; // Çå³ýÖжϱêÖ¾ + TIMRG->IF = TIMRG_IF_PULSE_Msk; // 清除中断标志 return 1; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h index bd1aa2618d..5cfdce204d 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h @@ -4,20 +4,20 @@ #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_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_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_INTEn(TIMR_TypeDef * TIMRx); //使能中断 +void TIMR_INTDis(TIMR_TypeDef * TIMRx); //ç¦�能中断 +void TIMR_INTClr(TIMR_TypeDef * TIMRx); //清除中断标志 +uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx); //获å�–中断状æ€� diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c index 6b3f046c75..73f219f7aa 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_uart.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄUART´®¿Ú¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: ûÓбàдLIN¹¦ÄÜÏà¹ØµÄº¯Êý -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_uart.c +* 功能说明: SWM320å�•片机的UART串å�£åŠŸèƒ½é©±åŠ¨åº“ +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: 没有编写LIN功能相关的函数 +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,12 +23,12 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_Init() -* ¹¦ÄÜ˵Ã÷: UART´®¿Ú³õʼ»¯ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* UART_InitStructure * initStruct °üº¬UART´®¿ÚÏà¹ØÉ趨ֵµÄ½á¹¹Ìå -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_Init() +* 功能说明: UART串å�£åˆ�始化 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* UART_InitStructure * initStruct 包å�«UART串å�£ç›¸å…³è®¾å®šå€¼çš„结构体 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct) { @@ -51,7 +51,7 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct) break; } - UART_Close(UARTx); //һЩ¹Ø¼ü¼Ä´æÆ÷Ö»ÄÜÔÚ´®¿Ú¹Ø±ÕʱÉèÖà + UART_Close(UARTx); //一些关键寄存器å�ªèƒ½åœ¨ä¸²å�£å…³é—­æ—¶è®¾ç½® UARTx->CTRL |= (0x01 << UART_CTRL_BAUDEN_Pos); UARTx->BAUD &= ~UART_BAUD_BAUD_Msk; @@ -62,10 +62,10 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct) (initStruct->Parity << UART_CTRL_PARITY_Pos) | (initStruct->StopBits << UART_CTRL_STOP2b_Pos); - /* ÔÚSWM320ÖУ¬µ± RXLVL >= RXTHR ʱ´¥·¢Öжϣ¬Èç¹ûRXTHRÉèÖÃΪ0µÄ»°£¬ÔÚδ½ÓÊÕµ½Êý¾Ýʱ¾Í»áÒ»Ö±´¥·¢Öжϣ» - ÆäËûоƬÖУ¬µ± RXLVL > RXTHR ʱ´¥·¢Öжϣ¬Îª½â¾öSWM320ÖÐRXTHR²»ÄÜΪ0µÄÎÊÌ⣬²¢Í³Ò»¿âº¯ÊýAPI£¬ÕâÀォRXTHRÉèÖÃÖµ¼ÓÒ» + /* 在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; @@ -133,11 +133,11 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_Open() -* ¹¦ÄÜ˵Ã÷: UART´®¿Ú´ò¿ª -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_Open() +* 功能说明: UART串å�£æ‰“å¼€ +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_Open(UART_TypeDef * UARTx) { @@ -145,11 +145,11 @@ void UART_Open(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_Close() -* ¹¦ÄÜ˵Ã÷: UART´®¿Ú¹Ø±Õ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_Close() +* 功能说明: UART串å�£å…³é—­ +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_Close(UART_TypeDef * UARTx) { @@ -157,12 +157,12 @@ void UART_Close(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_WriteByte() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬¿Éȡֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3¡¢UART4 -* uint32_t data Òª·¢Ë͵Ä×Ö½Ú -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_WriteByte() +* 功能说明: å�‘é€�一个字节数æ�® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œå�¯å�–值包括UART0ã€�UART1ã€�UART2ã€�UART3ã€�UART4 +* uint32_t data è¦�å�‘é€�的字节 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data) { @@ -170,12 +170,12 @@ void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_ReadByte() -* ¹¦ÄÜ˵Ã÷: ¶Áȡһ¸ö×Ö½ÚÊý¾Ý£¬²¢Ö¸³öÊý¾ÝÊÇ·ñValid -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬¿Éȡֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3¡¢UART4 -* uint32_t * data ½ÓÊÕµ½µÄÊý¾Ý -* Êä ³ö: uint32_t 0 ÎÞ´íÎó UART_ERR_PARITY ÆæÅ¼Ð£Ñé´íÎó -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_ReadByte() +* 功能说明: 读å�–一个字节数æ�®ï¼Œå¹¶æŒ‡å‡ºæ•°æ�®æ˜¯å�¦Valid +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œå�¯å�–值包括UART0ã€�UART1ã€�UART2ã€�UART3ã€�UART4 +* uint32_t * data 接收到的数æ�® +* 输 出: uint32_t 0 无错误 UART_ERR_PARITY 奇å�¶æ ¡éªŒé”™è¯¯ +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data) { @@ -189,11 +189,11 @@ uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_IsTXBusy() -* ¹¦ÄÜ˵Ã÷: UARTÊÇ·ñÕýÔÚ·¢ËÍÊý¾Ý -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 UARTÕýÔÚ·¢ËÍÊý¾Ý 0 Êý¾ÝÒÑ·¢Íê -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_IsTXBusy() +* 功能说明: UART是å�¦æ­£åœ¨å�‘é€�æ•°æ�® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 UART正在å�‘é€�æ•°æ�® 0 æ•°æ�®å·²å�‘完 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_IsTXBusy(UART_TypeDef * UARTx) { @@ -201,11 +201,11 @@ uint32_t UART_IsTXBusy(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_IsRXFIFOEmpty() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕFIFOÊÇ·ñΪ¿Õ£¬Èç¹û²»¿ÕÔò˵Ã÷ÆäÖÐÓÐÊý¾Ý¿ÉÒÔ¶ÁÈ¡ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 ½ÓÊÕFIFO¿Õ 0 ½ÓÊÕFIFO·Ç¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_IsRXFIFOEmpty() +* 功能说明: 接收FIFO是å�¦ä¸ºç©ºï¼Œå¦‚æžœä¸�空则说明其中有数æ�®å�¯ä»¥è¯»å�– +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 接收FIFO空 0 接收FIFOé�žç©º +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx) { @@ -213,11 +213,11 @@ uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_IsTXFIFOFull() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFOÊÇ·ñΪÂú£¬Èç¹û²»ÂúÔò¿ÉÒÔ¼ÌÐøÏòÆäÖÐдÈëÊý¾Ý -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFOÂú 0 ·¢ËÍFIFO²»Âú -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_IsTXFIFOFull() +* 功能说明: å�‘é€�FIFO是å�¦ä¸ºæ»¡ï¼Œå¦‚æžœä¸�满则å�¯ä»¥ç»§ç»­å�‘其中写入数æ�® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 å�‘é€�FIFO满 0 å�‘é€�FIFOä¸�满 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx) { @@ -225,12 +225,12 @@ uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_SetBaudrate() -* ¹¦ÄÜ˵Ã÷: ÉèÖò¨ÌØÂÊ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* uint32_t baudrate ÒªÉèÖõIJ¨ÌØÂÊ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ²»ÒªÔÚ´®¿Ú¹¤×÷ʱ¸ü¸Ä²¨ÌØÂÊ£¬Ê¹Óô˺¯ÊýǰÇëÏȵ÷ÓÃUART_Close()¹Ø±Õ´®¿Ú +* 函数å��ç§°: UART_SetBaudrate() +* 功能说明: 设置波特率 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* uint32_t baudrate è¦�设置的波特率 +* 输 出: æ—  +* 注æ„�事项: ä¸�è¦�在串å�£å·¥ä½œæ—¶æ›´æ”¹æ³¢ç‰¹çŽ‡ï¼Œä½¿ç”¨æ­¤å‡½æ•°å‰�请先调用UART_Close()关闭串å�£ ******************************************************************************************************************************************/ void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate) { @@ -239,11 +239,11 @@ void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_GetBaudrate() -* ¹¦ÄÜ˵Ã÷: ²éѯ²¨ÌØÂÊ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t µ±Ç°²¨ÌØÂÊ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_GetBaudrate() +* 功能说明: 查询波特率 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 当å‰�波特率 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_GetBaudrate(UART_TypeDef * UARTx) { @@ -251,13 +251,13 @@ uint32_t UART_GetBaudrate(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_CTSConfig() -* ¹¦ÄÜ˵Ã÷: UART CTSÁ÷¿ØÅäÖà -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* uint32_t enable 1 ʹÄÜCTSÁ÷¿Ø 0 ½ûÖ¹CTSÁ÷¿Ø -* uint32_t polarity 0 CTSÊäÈëΪµÍ±íʾ¿ÉÒÔ·¢ËÍÊý¾Ý 1 CTSÊäÈëΪ¸ß±íʾ¿ÉÒÔ·¢ËÍÊý¾Ý -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_CTSConfig() +* 功能说明: UART CTSæµ�控é…�ç½® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* uint32_t enable 1 使能CTSæµ�控 0 ç¦�æ­¢CTSæµ�控 +* uint32_t polarity 0 CTS输入为低表示å�¯ä»¥å�‘é€�æ•°æ�® 1 CTS输入为高表示å�¯ä»¥å�‘é€�æ•°æ�® +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity) { @@ -267,11 +267,11 @@ void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_CTSLineState() -* ¹¦ÄÜ˵Ã÷: UART CTSÏßµ±Ç°×´Ì¬ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 0 CTSÏßµ±Ç°ÎªµÍµçƽ 1 CTSÏßµ±Ç°Îª¸ßµçƽ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_CTSLineState() +* 功能说明: UART CTS线当å‰�状æ€� +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 0 CTS线当å‰�为低电平 1 CTS线当å‰�为高电平 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_CTSLineState(UART_TypeDef * UARTx) { @@ -279,14 +279,14 @@ uint32_t UART_CTSLineState(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_RTSConfig() -* ¹¦ÄÜ˵Ã÷: UART RTSÁ÷¿ØÅäÖà -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* uint32_t enable 1 ʹÄÜRTSÁ÷¿Ø 0 ½ûÖ¹RTSÁ÷¿Ø -* uint32_t polarity 0 RTSÊä³öµÍ±íʾ¿ÉÒÔ½ÓÊÕÊý¾Ý 1 RTSÊä³ö¸ß±íʾ¿ÉÒÔ½ÓÊÕÊý¾Ý -* uint32_t threshold RTSÁ÷¿ØµÄ´¥·¢ãÐÖµ£¬¿ÉȡֵUART_RTS_1BYTE¡¢UART_RTS_2BYTE¡¢UART_RTS_4BYTE¡¢UART_RTS_6BYTE -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_RTSConfig() +* 功能说明: UART RTSæµ�控é…�ç½® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* uint32_t enable 1 使能RTSæµ�控 0 ç¦�æ­¢RTSæµ�控 +* uint32_t polarity 0 RTS输出低表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® 1 RTS输出高表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® +* uint32_t threshold RTSæµ�控的触å�‘阈值,å�¯å�–值UART_RTS_1BYTEã€�UART_RTS_2BYTEã€�UART_RTS_4BYTEã€�UART_RTS_6BYTE +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold) { @@ -297,11 +297,11 @@ void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, ui } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_RTSLineState() -* ¹¦ÄÜ˵Ã÷: UART RTSÏßµ±Ç°×´Ì¬ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 0 RTSÏßµ±Ç°ÎªµÍµçƽ 1 RTSÏßµ±Ç°Îª¸ßµçƽ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_RTSLineState() +* 功能说明: UART RTS线当å‰�状æ€� +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 0 RTS线当å‰�为低电平 1 RTS线当å‰�为高电平 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_RTSLineState(UART_TypeDef * UARTx) { @@ -309,13 +309,13 @@ uint32_t UART_RTSLineState(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_LINConfig() -* ¹¦ÄÜ˵Ã÷: UART LIN¹¦ÄÜÅäÖà -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* uint32_t detectedIEn ¼ì²âµ½BreakÖжÏʹÄÜ -* uint32_t generatedIEn Break·¢ËÍÍê³ÉÖжÏʹÄÜ -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_LINConfig() +* 功能说明: UART LIN功能é…�ç½® +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* uint32_t detectedIEn 检测到Break中断使能 +* uint32_t generatedIEn Breakå�‘é€�完æˆ�中断使能 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generatedIEn) { @@ -325,11 +325,11 @@ void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generat } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_LINGenerate() -* ¹¦ÄÜ˵Ã÷: UART LIN²úÉú/·¢ËÍBreak -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_LINGenerate() +* 功能说明: UART LIN产生/å�‘é€�Break +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_LINGenerate(UART_TypeDef * UARTx) { @@ -337,11 +337,11 @@ void UART_LINGenerate(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_LINIsDetected() -* ¹¦ÄÜ˵Ã÷: UART LINÊÇ·ñ¼ì²âµ½Break -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 ¼ì²âµ½LIN Break 0 δ¼ì²âµ½LIN Break -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_LINIsDetected() +* 功能说明: UART LIN是å�¦æ£€æµ‹åˆ°Break +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 检测到LIN Break 0 未检测到LIN Break +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_LINIsDetected(UART_TypeDef * UARTx) { @@ -349,11 +349,11 @@ uint32_t UART_LINIsDetected(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_LINIsGenerated() -* ¹¦ÄÜ˵Ã÷: UART LIN BreakÊÇ·ñ·¢ËÍÍê³É -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 LIN Break ·¢ËÍÍê³É 0 LIN Break·¢ËÍδÍê³É -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_LINIsGenerated() +* 功能说明: UART LIN Break是å�¦å�‘é€�完æˆ� +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 LIN Break å�‘é€�完æˆ� 0 LIN Breakå�‘é€�未完æˆ� +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx) { @@ -361,14 +361,14 @@ uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_ABRStart() -* ¹¦ÄÜ˵Ã÷: UART ×Ô¶¯²¨ÌØÂʼì²â¿ªÊ¼ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* uint32_t detectChar ÓÃÓÚ×Ô¶¯¼ì²â¡¢¼ÆËã²¨ÌØÂʵļì²â×Ö·û -* 8λÊý¾Ýʱ¿Éȡֵ£º0xFF¡¢0xFE¡¢0xF8¡¢0x80£¬·Ö±ð±íʾ·¢ËÍ·½±ØÐë·¢ËÍ0xFF¡¢0xFE¡¢0xF8¡¢0x80 -* 9λÊý¾Ýʱ¿Éȡֵ£º0x1FF¡¢0x1FE¡¢0x1F8¡¢0x180£¬·Ö±ð±íʾ·¢ËÍ·½±ØÐë·¢ËÍ0x1FF¡¢0x1FE¡¢0x1F8¡¢0x180 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ×Ô¶¯²¨ÌØÂʼì²âʱ²»ÄÜ¿ªÆôÆæÅ¼Ð£Ñé +* 函数å��ç§°: UART_ABRStart() +* 功能说明: UART 自动波特率检测开始 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* uint32_t detectChar 用于自动检测ã€�计算波特率的检测字符 +* 8ä½�æ•°æ�®æ—¶å�¯å�–值:0xFFã€�0xFEã€�0xF8ã€�0x80,分别表示å�‘é€�方必须å�‘é€�0xFFã€�0xFEã€�0xF8ã€�0x80 +* 9ä½�æ•°æ�®æ—¶å�¯å�–值:0x1FFã€�0x1FEã€�0x1F8ã€�0x180,分别表示å�‘é€�方必须å�‘é€�0x1FFã€�0x1FEã€�0x1F8ã€�0x180 +* 输 出: æ—  +* 注æ„�事项: 自动波特率检测时ä¸�能开å�¯å¥‡å�¶æ ¡éªŒ ******************************************************************************************************************************************/ void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar) { @@ -386,11 +386,11 @@ void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_ABRIsDone() -* ¹¦ÄÜ˵Ã÷: UART ×Ô¶¯²¨ÌØÂÊÊÇ·ñÍê³É -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 0 δÍê³É UART_ABR_RES_OK ÒÑÍê³É£¬Çҳɹ¦ UART_ABR_RES_ERR ÒÑÍê³É£¬µ«Ê§°Ü¡¢³ö´í -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_ABRIsDone() +* 功能说明: UART 自动波特率是å�¦å®Œæˆ� +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 0 未完æˆ� UART_ABR_RES_OK 已完æˆ�,且æˆ�功 UART_ABR_RES_ERR 已完æˆ�,但失败ã€�出错 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_ABRIsDone(UART_TypeDef * UARTx) { @@ -409,11 +409,11 @@ uint32_t UART_ABRIsDone(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTRXThresholdEn() -* ¹¦ÄÜ˵Ã÷: µ±RX FIFOÖÐÊý¾Ý¸öÊý >= RXThresholdʱ ´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTRXThresholdEn() +* 功能说明: 当RX FIFO中数æ�®ä¸ªæ•° >= RXThresholdæ—¶ 触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTRXThresholdEn(UART_TypeDef * UARTx) { @@ -421,11 +421,11 @@ void UART_INTRXThresholdEn(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTRXThresholdDis() -* ¹¦ÄÜ˵Ã÷: µ±RX FIFOÖÐÊý¾Ý¸öÊý >= RXThresholdʱ ²»´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTRXThresholdDis() +* 功能说明: 当RX FIFO中数æ�®ä¸ªæ•° >= RXThresholdæ—¶ ä¸�触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTRXThresholdDis(UART_TypeDef * UARTx) { @@ -433,11 +433,11 @@ void UART_INTRXThresholdDis(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTRXThresholdStat() -* ¹¦ÄÜ˵Ã÷: ÊÇ·ñRX FIFOÖÐÊý¾Ý¸öÊý >= RXThreshold -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 RX FIFOÖÐÊý¾Ý¸öÊý >= RXThreshold 0 RX FIFOÖÐÊý¾Ý¸öÊý < RXThreshold -* ×¢ÒâÊÂÏî: RXIF = RXTHRF & RXIE +* 函数å��ç§°: UART_INTRXThresholdStat() +* 功能说明: 是å�¦RX FIFO中数æ�®ä¸ªæ•° >= RXThreshold +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 RX FIFO中数æ�®ä¸ªæ•° >= RXThreshold 0 RX FIFO中数æ�®ä¸ªæ•° < RXThreshold +* 注æ„�事项: RXIF = RXTHRF & RXIE ******************************************************************************************************************************************/ uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx) { @@ -445,11 +445,11 @@ uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXThresholdEn() -* ¹¦ÄÜ˵Ã÷: µ±TX FIFOÖÐÊý¾Ý¸öÊý <= TXThresholdʱ ´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTXThresholdEn() +* 功能说明: 当TX FIFO中数æ�®ä¸ªæ•° <= TXThresholdæ—¶ 触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTXThresholdEn(UART_TypeDef * UARTx) { @@ -457,11 +457,11 @@ void UART_INTTXThresholdEn(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXThresholdDis() -* ¹¦ÄÜ˵Ã÷: µ±TX FIFOÖÐÊý¾Ý¸öÊý <= TXThresholdʱ ²»´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTXThresholdDis() +* 功能说明: 当TX FIFO中数æ�®ä¸ªæ•° <= TXThresholdæ—¶ ä¸�触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTXThresholdDis(UART_TypeDef * UARTx) { @@ -469,11 +469,11 @@ void UART_INTTXThresholdDis(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXThresholdStat() -* ¹¦ÄÜ˵Ã÷: ÊÇ·ñTX FIFOÖÐÊý¾Ý¸öÊý <= TXThreshold -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 TX FIFOÖÐÊý¾Ý¸öÊý <= TXThreshold 0 TX FIFOÖÐÊý¾Ý¸öÊý > TXThreshold -* ×¢ÒâÊÂÏî: TXIF = TXTHRF & TXIE +* 函数å��ç§°: UART_INTTXThresholdStat() +* 功能说明: 是å�¦TX FIFO中数æ�®ä¸ªæ•° <= TXThreshold +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 TX FIFO中数æ�®ä¸ªæ•° <= TXThreshold 0 TX FIFO中数æ�®ä¸ªæ•° > TXThreshold +* 注æ„�事项: TXIF = TXTHRF & TXIE ******************************************************************************************************************************************/ uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx) { @@ -481,11 +481,11 @@ uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTimeoutEn() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕ·¢Éú³¬Ê±Ê± ´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTimeoutEn() +* 功能说明: 接收å�‘生超时时 触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTimeoutEn(UART_TypeDef * UARTx) { @@ -493,11 +493,11 @@ void UART_INTTimeoutEn(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTimeoutDis() -* ¹¦ÄÜ˵Ã÷: ½ÓÊÕ·¢Éú³¬Ê±Ê± ²»´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTimeoutDis() +* 功能说明: 接收å�‘生超时时 ä¸�触å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTimeoutDis(UART_TypeDef * UARTx) { @@ -505,11 +505,11 @@ void UART_INTTimeoutDis(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTimeoutStat() -* ¹¦ÄÜ˵Ã÷: ÊÇ·ñ·¢ÉúÁ˽ÓÊÕ³¬Ê±£¬¼´³¬¹ý TimeoutTime/(Baudrate/10) ÃëûÓÐÔÚRXÏßÉϽÓÊÕµ½Êý¾Ýʱ´¥·¢ÖÐ¶Ï -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 ·¢ÉúÁ˽ÓÊÕ³¬Ê± 0 δ·¢Éú½ÓÊÕ³¬Ê± -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTimeoutStat() +* 功能说明: 是å�¦å�‘生了接收超时,å�³è¶…过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数æ�®æ—¶è§¦å�‘中断 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 å�‘生了接收超时 0 未å�‘生接收超时 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx) { @@ -517,11 +517,11 @@ uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXDoneEn() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTXDoneEn() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断使能 +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTXDoneEn(UART_TypeDef * UARTx) { @@ -529,11 +529,11 @@ void UART_INTTXDoneEn(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXDoneDis() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжϽûÖ¹ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTXDoneDis() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断ç¦�æ­¢ +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void UART_INTTXDoneDis(UART_TypeDef * UARTx) { @@ -541,11 +541,11 @@ void UART_INTTXDoneDis(UART_TypeDef * UARTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: UART_INTTXDoneStat() -* ¹¦ÄÜ˵Ã÷: ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏ״̬ -* Êä Èë: UART_TypeDef * UARTx Ö¸¶¨Òª±»ÉèÖõÄUART´®¿Ú£¬ÓÐЧֵ°üÀ¨UART0¡¢UART1¡¢UART2¡¢UART3 -* Êä ³ö: uint32_t 1 ·¢ËÍFIFO¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿Õ 0 ·¢ËÍFIFO»ò·¢ËÍÒÆÎ»¼Ä´æÆ÷δ¿Õ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: UART_INTTXDoneStat() +* 功能说明: å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空中断状æ€� +* 输 å…¥: UART_TypeDef * UARTx 指定è¦�被设置的UART串å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括UART0ã€�UART1ã€�UART2ã€�UART3 +* 输 出: uint32_t 1 å�‘é€�FIFO空且å�‘é€�ç§»ä½�寄存器空 0 å�‘é€�FIFO或å�‘é€�ç§»ä½�寄存器未空 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t UART_INTTXDoneStat(UART_TypeDef * UARTx) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h index 1611744cb7..bad63f420c 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h @@ -4,20 +4,20 @@ typedef struct { uint32_t Baudrate; - uint8_t DataBits; //Êý¾ÝλλÊý£¬¿ÉȡֵUART_DATA_8BIT¡¢UART_DATA_9BIT + 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 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 StopBits; //å�œæ­¢ä½�ä½�数,å�¯å�–值UART_STOP_1BITã€�UART_STOP_2BIT - uint8_t RXThreshold; //ȡֵ0--7 - uint8_t RXThresholdIEn; //µ±RX FIFOÖÐÊý¾Ý¸öÊý > RXThresholdʱ´¥·¢ÖÐ¶Ï + uint8_t RXThreshold; //å�–值0--7 + uint8_t RXThresholdIEn; //当RX FIFO中数æ�®ä¸ªæ•° > RXThreshold时触å�‘中断 - uint8_t TXThreshold; //ȡֵ0--7 - uint8_t TXThresholdIEn; //µ±TX FIFOÖÐÊý¾Ý¸öÊý <= TXThresholdʱ´¥·¢ÖÐ¶Ï + 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ÏßÉϽÓÊÕµ½Êý¾Ýʱ´¥·¢ÖÐ¶Ï + uint8_t TimeoutTime; //è¶…æ—¶æ—¶é•¿ = TimeoutTime/(Baudrate/10) ç§’ + uint8_t TimeoutIEn; //超时中断,RX FIFOé�žç©ºï¼Œä¸”超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数æ�®æ—¶è§¦å�‘中断 } UART_InitStructure; @@ -46,20 +46,20 @@ typedef struct { #define UART_ERR_NOISE 3 -void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct); //UART´®¿Ú³õʼ»¯ +void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct); //UART串å�£åˆ�始化 void UART_Open(UART_TypeDef * UARTx); void UART_Close(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_WriteByte(UART_TypeDef * UARTx, uint32_t data); //å�‘é€�一个字节数æ�® +uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data); //读å�–一个字节数æ�®ï¼Œå¹¶æŒ‡å‡ºæ•°æ�®æ˜¯å�¦Valid 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() +uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx); //接收FIFO是å�¦ç©ºï¼Œå¦‚æžœä¸�空则å�¯ä»¥ç»§ç»­UART_ReadByte() +uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx); //å�‘é€�FIFO是å�¦æ»¡ï¼Œå¦‚æžœä¸�满则å�¯ä»¥ç»§ç»­UART_WriteByte() -void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate); //ÉèÖò¨ÌØÂÊ -uint32_t UART_GetBaudrate(UART_TypeDef * UARTx); //»ñÈ¡µ±Ç°Ê¹ÓõIJ¨ÌØÂÊ +void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate); //设置波特率 +uint32_t UART_GetBaudrate(UART_TypeDef * UARTx); //获å�–当å‰�使用的波特率 void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity); uint32_t UART_CTSLineState(UART_TypeDef * UARTx); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c index 762e79b3ae..59a358b69e 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: SWM320_wdt.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄWDT¿´ÃŹ·¹¦ÄÜÇý¶¯¿â -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: SWM320_wdt.c +* 功能说明: SWM320å�•片机的WDT看门狗功能驱动库 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,19 +23,19 @@ /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_Init() -* ¹¦ÄÜ˵Ã÷: WDT¿´ÃŹ·³õʼ»¯ -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* uint32_t peroid ȡֵ0--4294967295£¬µ¥Î»Îªµ¥Æ¬»úϵͳʱÖÓÖÜÆÚ -* uint32_t mode WDT_MODE_RESET ³¬Ê±²úÉú¸´Î» WDT_MODE_INTERRUPT ³¬Ê±²úÉúÖÐ¶Ï -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ¸´Î»Ê¹ÄÜʱÖжϲ»Æð×÷Óã¬ÒòΪ¼ÆÊýÖÜÆÚ½áÊøÊ±Ð¾Æ¬Ö±½Ó¸´Î»ÁË£¬ÎÞ·¨ÏìÓ¦ÖÐ¶Ï +* 函数å��ç§°: WDT_Init() +* 功能说明: WDT看门狗åˆ�始化 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* uint32_t peroid å�–值0--4294967295,å�•ä½�为å�•片机系统时钟周期 +* uint32_t mode WDT_MODE_RESET 超时产生å¤�ä½� WDT_MODE_INTERRUPT 超时产生中断 +* 输 出: æ—  +* 注æ„�事项: å¤�ä½�使能时中断ä¸�起作用,因为计数周期结æ�Ÿæ—¶èŠ¯ç‰‡ç›´æŽ¥å¤�ä½�了,无法å“�应中断 ******************************************************************************************************************************************/ void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode) { SYS->CLKEN |= (0x01 << SYS_CLKEN_WDT_Pos); - WDT_Stop(WDTx); //ÉèÖÃǰÏÈ¹Ø±Õ + WDT_Stop(WDTx); //设置å‰�先关闭 WDTx->LOAD = peroid; @@ -54,11 +54,11 @@ void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_Start() -* ¹¦ÄÜ˵Ã÷: Æô¶¯Ö¸¶¨WDT£¬¿ªÊ¼µ¹¼ÆÊ± -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_Start() +* 功能说明: å�¯åŠ¨æŒ‡å®šWDT,开始倒计时 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void WDT_Start(WDT_TypeDef * WDTx) { @@ -66,11 +66,11 @@ void WDT_Start(WDT_TypeDef * WDTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_Stop() -* ¹¦ÄÜ˵Ã÷: ¹Ø±ÕÖ¸¶¨WDT£¬Í£Ö¹µ¹¼ÆÊ± -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_Stop() +* 功能说明: 关闭指定WDT,å�œæ­¢å€’计时 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void WDT_Stop(WDT_TypeDef * WDTx) { @@ -78,11 +78,11 @@ void WDT_Stop(WDT_TypeDef * WDTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_Feed() -* ¹¦ÄÜ˵Ã÷: ι¹·£¬ÖØÐ´Ó×°ÔØÖµ¿ªÊ¼µ¹¼ÆÊ± -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_Feed() +* 功能说明: 喂狗,é‡�新从装载值开始倒计时 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void WDT_Feed(WDT_TypeDef * WDTx) { @@ -90,11 +90,11 @@ void WDT_Feed(WDT_TypeDef * WDTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_GetValue() -* ¹¦ÄÜ˵Ã÷: »ñȡָ¶¨¿´ÃŹ·¶¨Ê±Æ÷µÄµ±Ç°µ¹¼ÆÊ±Öµ -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: int32_t ¿´ÃŹ·µ±Ç°¼ÆÊýÖµ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_GetValue() +* 功能说明: 获å�–指定看门狗定时器的当å‰�倒计时值 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: int32_t 看门狗当å‰�计数值 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ int32_t WDT_GetValue(WDT_TypeDef * WDTx) { @@ -102,11 +102,11 @@ int32_t WDT_GetValue(WDT_TypeDef * WDTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_INTClr() -* ¹¦ÄÜ˵Ã÷: ÖжϱêÖ¾Çå³ý -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_INTClr() +* 功能说明: 中断标志清除 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ void WDT_INTClr(WDT_TypeDef * WDTx) { @@ -114,11 +114,11 @@ void WDT_INTClr(WDT_TypeDef * WDTx) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: WDT_INTStat() -* ¹¦ÄÜ˵Ã÷: ÖжÏ״̬²éѯ -* Êä Èë: WDT_TypeDef * WDTx Ö¸¶¨Òª±»ÉèÖõĿ´ÃŹ·£¬ÓÐЧֵ°üÀ¨WDT -* Êä ³ö: int32_t 1 ·¢ÉúÖжÏÒç³ö 0 δ·¢ÉúÖжÏÒç³ö -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: WDT_INTStat() +* 功能说明: 中断状æ€�查询 +* 输 å…¥: WDT_TypeDef * WDTx 指定è¦�被设置的看门狗,有效值包括WDT +* 输 出: int32_t 1 å�‘生中断溢出 0 未å�‘生中断溢出 +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ uint32_t WDT_INTStat(WDT_TypeDef * WDTx) { diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h index 1d056ba296..a02a60ba87 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h @@ -4,16 +4,16 @@ #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__ -- cgit v1.3.1 From c00300d5f44d0feb7d1807c68600b4819146d467 Mon Sep 17 00:00:00 2001 From: yanmowudi Date: Thu, 6 May 2021 10:24:00 +0800 Subject: format utf-8 --- bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h | 652 ++++++++++----------- .../DeviceSupport/startup/arm/startup_SWM320.s | 12 +- .../libraries/CMSIS/DeviceSupport/system_SWM320.c | 70 +-- 3 files changed, 367 insertions(+), 367 deletions(-) diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h index 4ac927b7b9..423290614f 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h @@ -123,9 +123,9 @@ typedef struct { uint32_t RESERVED0[6]; - __IO uint32_t RTCBKP_ISO; //[0] 1 RTC±¸·ÝµçÔ´Óò´¦ÓÚ¸ôÀë״̬ 0 RTC±¸·ÝµçÔ´Óò¿É·ÃÎÊ + __IO uint32_t RTCBKP_ISO; //[0] 1 RTC备份电æº�域处于隔离状æ€� 0 RTC备份电æº�域å�¯è®¿é—® - __IO uint32_t RTCWKEN; //[0] 1 ʹÄÜRTC»½Ðѹ¦ÄÜ + __IO uint32_t RTCWKEN; //[0] 1 使能RTC唤醒功能 uint32_t RESERVED[52+64]; @@ -135,7 +135,7 @@ typedef struct { uint32_t RESERVED2[1+4]; - __IO uint32_t PAWKSR; //Port A Wakeup Status Register£¬Ð´1ÇåÁã + __IO uint32_t PAWKSR; //Port A Wakeup Status Register,写1清零 __IO uint32_t PBWKSR; __IO uint32_t PCWKSR; @@ -146,12 +146,12 @@ typedef struct { uint32_t RESERVED4[61+64]; - __IO uint32_t BKP[3]; //Êý¾Ý±¸·Ý¼Ä´æÆ÷ + __IO uint32_t BKP[3]; //æ•°æ�®å¤‡ä»½å¯„存器 //RTC Power Domain: 0x4001E000 uint32_t RESERVED5[(0x4001E000-0x40000508)/4-1]; - __IO uint32_t RTCBKP[8]; //RTCµçÔ´ÓòÊý¾Ý±¸·Ý¼Ä´æÆ÷ + __IO uint32_t RTCBKP[8]; //RTC电æº�域数æ�®å¤‡ä»½å¯„存器 __IO uint32_t LRCCR; //Low speed RC Control Register __IO uint32_t LRCTRIM0; //Low speed RC Trim @@ -173,7 +173,7 @@ typedef struct { __IO uint32_t PLLCR; __IO uint32_t PLLDIV; __IO uint32_t PLLSET; - __IO uint32_t PLLLOCK; //[0] 1 PLLÒÑËø¶¨ + __IO uint32_t PLLLOCK; //[0] 1 PLLå·²é”�定 __IO uint32_t BODIE; __IO uint32_t BODIF; @@ -186,16 +186,16 @@ typedef struct { #define SYS_CLKSEL_LFCK_Msk (0x01 << SYS_CLKSEL_LFCK_Pos) #define SYS_CLKSEL_HFCK_Pos 1 //High Frequency Clock Source 0 HRC 1 XTAL #define SYS_CLKSEL_HFCK_Msk (0x01 << SYS_CLKSEL_HFCK_Pos) -#define SYS_CLKSEL_SYS_Pos 2 //ϵͳʱÖÓÑ¡Ôñ 0 LFCK 1 HFCK +#define SYS_CLKSEL_SYS_Pos 2 //系统时钟选择 0 LFCK 1 HFCK #define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos) -#define SYS_CLKDIV_SYS_Pos 0 //ϵͳʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ +#define SYS_CLKDIV_SYS_Pos 0 //系统时钟分频 0 1分频 1 2分频 #define SYS_CLKDIV_SYS_Msk (0x01 << SYS_CLKDIV_SYS_Pos) -#define SYS_CLKDIV_PWM_Pos 1 //PWM ʱÖÓ·ÖÆµ 0 1·ÖƵ 1 8·ÖƵ +#define SYS_CLKDIV_PWM_Pos 1 //PWM 时钟分频 0 1分频 1 8分频 #define SYS_CLKDIV_PWM_Msk (0x01 << SYS_CLKDIV_PWM_Pos) -#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAMʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ 2 4·ÖƵ +#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAM时钟分频 0 1分频 1 2分频 2 4分频 #define SYS_CLKDIV_SDRAM_Msk (0x03 << SYS_CLKDIV_SDRAM_Pos) -#define SYS_CLKDIV_SDIO_Pos 4 //SDIOʱÖÓ·ÖÆµ 0 1·ÖƵ 1 2·ÖƵ 2 4·ÖƵ 3 8·ÖƵ +#define SYS_CLKDIV_SDIO_Pos 4 //SDIO时钟分频 0 1分频 1 2分频 2 4分频 3 8分频 #define SYS_CLKDIV_SDIO_Msk (0x03 << SYS_CLKDIV_SDIO_Pos) #define SYS_CLKEN_GPIOA_Pos 0 @@ -240,7 +240,7 @@ typedef struct { #define SYS_CLKEN_LCD_Msk (0x01 << SYS_CLKEN_LCD_Pos) #define SYS_CLKEN_GPIOP_Pos 21 #define SYS_CLKEN_GPIOP_Msk (0x01 << SYS_CLKEN_GPIOP_Pos) -#define SYS_CLKEN_ANAC_Pos 22 //Ä£Äâ¿ØÖÆµ¥ÔªÊ±ÖÓʹÄÜ +#define SYS_CLKEN_ANAC_Pos 22 //模拟控制å�•元时钟使能 #define SYS_CLKEN_ANAC_Msk (0x01 << SYS_CLKEN_ANAC_Pos) #define SYS_CLKEN_CRC_Pos 23 #define SYS_CLKEN_CRC_Msk (0x01 << SYS_CLKEN_CRC_Pos) @@ -258,59 +258,59 @@ typedef struct { #define SYS_CLKEN_SDIO_Msk (0x01 << SYS_CLKEN_SDIO_Pos) #define SYS_CLKEN_ADC1_Pos 30 #define SYS_CLKEN_ADC1_Msk (0x01 << SYS_CLKEN_ADC1_Pos) -#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVEµçÔ´ÓòϵͳʱÖÓʹÄÜ +#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVE电æº�域系统时钟使能 #define SYS_CLKEN_ALIVE_Msk (0x01 << SYS_CLKEN_ALIVE_Pos) -#define SYS_SLEEP_SLEEP_Pos 0 //½«¸ÃλÖÃ1ºó£¬ÏµÍ³½«½øÈëSLEEPģʽ +#define SYS_SLEEP_SLEEP_Pos 0 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥SLEEP模å¼� #define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos) -#define SYS_SLEEP_DEEP_Pos 1 //½«¸ÃλÖÃ1ºó£¬ÏµÍ³½«½øÈëSTOP SLEEPģʽ +#define SYS_SLEEP_DEEP_Pos 1 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥STOP SLEEP模å¼� #define SYS_SLEEP_DEEP_Msk (0x01 << SYS_SLEEP_DEEP_Pos) -#define SYS_RSTCR_SYS_Pos 0 //д1½øÐÐϵͳ¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SYS_Pos 0 //写1进行系统å¤�ä½�,硬件自动清零 #define SYS_RSTCR_SYS_Msk (0x01 << SYS_RSTCR_SYS_Pos) -#define SYS_RSTCR_FLASH_Pos 1 //д1¶ÔFLASH¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_FLASH_Pos 1 //写1对FLASH控制器进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_FLASH_Msk (0x01 << SYS_RSTCR_FLASH_Pos) -#define SYS_RSTCR_PWM_Pos 2 //д1¶ÔPWM½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_PWM_Pos 2 //写1对PWM进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_PWM_Msk (0x01 << SYS_RSTCR_PWM_Pos) -#define SYS_RSTCR_CPU_Pos 3 //д1¶ÔCPU½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_CPU_Pos 3 //写1对CPU进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_CPU_Msk (0x01 << SYS_RSTCR_CPU_Pos) -#define SYS_RSTCR_DMA_Pos 4 //д1¶ÔDMA½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_DMA_Pos 4 //写1对DMA进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_DMA_Msk (0x01 << SYS_RSTCR_DMA_Pos) -#define SYS_RSTCR_NORFLASH_Pos 5 //д1¶ÔNOR Flash¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_NORFLASH_Pos 5 //写1对NOR Flash控制器进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_NORFLASH_Msk (0x01 << SYS_RSTCR_NORFLASH_Pos) -#define SYS_RSTCR_SRAM_Pos 6 //д1¶ÔSRAM¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SRAM_Pos 6 //写1对SRAM控制器进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_SRAM_Msk (0x01 << SYS_RSTCR_SRAM_Pos) -#define SYS_RSTCR_SDRAM_Pos 7 //д1¶ÔSDRAM¿ØÖÆÆ÷½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SDRAM_Pos 7 //写1对SDRAM控制器进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_SDRAM_Msk (0x01 << SYS_RSTCR_SDRAM_Pos) -#define SYS_RSTCR_SDIO_Pos 8 //д1¶ÔSDIO½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_SDIO_Pos 8 //写1对SDIO进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_SDIO_Msk (0x01 << SYS_RSTCR_SDIO_Pos) -#define SYS_RSTCR_LCD_Pos 9 //д1¶ÔLCD½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_LCD_Pos 9 //写1对LCD进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_LCD_Msk (0x01 << SYS_RSTCR_LCD_Pos) -#define SYS_RSTCR_CAN_Pos 10 //д1¶ÔCAN½øÐÐÒ»´Î¸´Î»£¬Ó²¼þ×Ô¶¯ÇåÁã +#define SYS_RSTCR_CAN_Pos 10 //写1对CAN进行一次å¤�ä½�,硬件自动清零 #define SYS_RSTCR_CAN_Msk (0x01 << SYS_RSTCR_CAN_Pos) -#define SYS_RSTSR_POR_Pos 0 //1 ³öÏÖ¹ýPOR¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_POR_Pos 0 //1 出现过PORå¤�ä½�,写1清零 #define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos) -#define SYS_RSTSR_BOD_Pos 1 //1 ³öÏÖ¹ýBOD¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_BOD_Pos 1 //1 出现过BODå¤�ä½�,写1清零 #define SYS_RSTSR_BOD_Msk (0x01 << SYS_RSTSR_BOD_Pos) -#define SYS_RSTSR_PIN_Pos 2 //1 ³öÏÖ¹ýÍⲿÒý½Å¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_PIN_Pos 2 //1 出现过外部引脚å¤�ä½�,写1清零 #define SYS_RSTSR_PIN_Msk (0x01 << SYS_RSTSR_PIN_Pos) -#define SYS_RSTSR_WDT_Pos 3 //1 ³öÏÖ¹ýWDT¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_WDT_Pos 3 //1 出现过WDTå¤�ä½�,写1清零 #define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos) -#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 ³öÏÖ¹ýÈí¼þ¸´Î»£¬Ð´1ÇåÁã +#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 出现过软件å¤�ä½�,写1清零 #define SYS_RSTSR_SWRST_Msk (0x01 << SYS_RSTSR_SWRST_Pos) #define SYS_LRCCR_OFF_Pos 0 //Low Speed RC Off #define SYS_LRCCR_OFF_Msk (0x01 << SYS_LRCCR_OFF_Pos) -#define SYS_LRCTRIM0_R_Pos 0 //LRC´Öµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_R_Pos 0 //LRC粗调控制ä½� #define SYS_LRCTRIM0_R_Msk (0x7FFF << SYS_LRCTRIM0_R_Pos) -#define SYS_LRCTRIM0_M_Pos 15 //LRCÖе÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_M_Pos 15 //LRC中调控制ä½� #define SYS_LRCTRIM0_M_Msk (0x3F << SYS_LRCTRIM2_M_Pos) -#define SYS_LRCTRIM0_F_Pos 21 //LRCϸµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM0_F_Pos 21 //LRC细调控制ä½� #define SYS_LRCTRIM0_F_Msk (0x7FF << SYS_LRCTRIM0_F_Pos) -#define SYS_LRCTRIM1_U_Pos 0 //LRC Uµ÷¿ØÖÆÎ» +#define SYS_LRCTRIM1_U_Pos 0 //LRC U调控制ä½� #define SYS_LRCTRIM1_U_Msk (0x7FFF << SYS_LRCTRIM1_U_Pos) @@ -322,24 +322,24 @@ typedef struct { #define SYS_XTALCR_EN_Pos 0 #define SYS_XTALCR_EN_Msk (0x01 << SYS_XTALCR_EN_Pos) -#define SYS_PLLCR_OUTEN_Pos 0 //Ö»ÄÜLOCKºóÉèÖà +#define SYS_PLLCR_OUTEN_Pos 0 //å�ªèƒ½LOCKå�Žè®¾ç½® #define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos) #define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC #define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos) #define SYS_PLLCR_OFF_Pos 2 #define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos) -#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack·ÖƵ¼Ä´æÆ÷ - //VCOÊä³öƵÂÊ = PLLÊäÈëʱÖÓ / INDIV * 4 * FBDIV - //PLLÊä³öƵÂÊ = PLLÊäÈëʱÖÓ / INDIV * 4 * FBDIV / OUTDIV = VCOÊä³öƵÂÊ / OUTDIV +#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器 + //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV + //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV #define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos) -#define SYS_PLLDIV_ADDIV_Pos 9 //ADCʱÖÓ»ù£¨¼´VCOÊä³ö·ÖƵºóµÄʱÖÓ£©¾­ADDIV·ÖƵºó×÷ΪADCµÄת»»Ê±ÖÓ +#define SYS_PLLDIV_ADDIV_Pos 9 //ADC时钟基(å�³VCO输出分频å�Žçš„æ—¶é’Ÿï¼‰ç»�ADDIV分频å�Žä½œä¸ºADC的转æ�¢æ—¶é’Ÿ #define SYS_PLLDIV_ADDIV_Msk (0x1F << SYS_PLLDIV_ADDIV_Pos) -#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCOÊä³ö16·ÖƵ×÷ΪADCʱÖÓ»ù 1 VCOÊä³ö¾­¹ý32·ÖƵ×÷ΪADCʱÖÓ»ù 2 VCOÊä³ö¾­¹ý64·ÖƵ×÷ΪADCʱÖÓ»ù +#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCO输出16分频作为ADC时钟基 1 VCO输出ç»�过32分频作为ADC时钟基 2 VCO输出ç»�过64分频作为ADC时钟基 #define SYS_PLLDIV_ADVCO_Msk (0x03 << SYS_PLLDIV_ADVCO_Pos) -#define SYS_PLLDIV_INDIV_Pos 16 //PLL ÊäÈëԴʱÖÓ·ÖÆµ +#define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入æº�时钟分频 #define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos) -#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL Êä³ö·ÖƵ£¬0 8·ÖƵ 1 4·ÖƵ 0 2·ÖƵ +#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频 #define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos) #define SYS_PLLSET_LPFBW_Pos 0 //PLL Low Pass Filter Bandwidth @@ -353,23 +353,23 @@ typedef struct { #define SYS_PLLSET_CHPADJM_Pos 11 //PLL charge pump MSB current Adjustment #define SYS_PLLSET_CHPADJM_Msk (0x03 << SYS_PLLSET_CHPADJM_Pos) -#define SYS_BODIE_2V2_Pos 1 //BOD 2.2VµÈ¼¶´¥·¢ÖжÏʹÄÜ +#define SYS_BODIE_2V2_Pos 1 //BOD 2.2V等级触å�‘中断使能 #define SYS_BODIE_2V2_Msk (0x01 << SYS_BODIE_2V2_Pos) -#define SYS_BODIF_2V2_Pos 1 //BOD 2.2VµÈ¼¶´¥·¢ÖжÏ״̬£¬Ð´1ÇåÁã +#define SYS_BODIF_2V2_Pos 1 //BOD 2.2V等级触å�‘中断状æ€�,写1清零 #define SYS_BODIF_2V2_Msk (0x01 << SYS_BODIF_2V2_Pos) -#define SYS_ADC1IN7_SEL_Pos 0 //ADC1Ä£¿éÄ£ÄâͨµÀ7£¬1 ζȴ«¸ÐÆ÷ 2 µç³Øµçѹ 3 RTCµçÔ´ÓòBG 4 Ö÷µçÔ´ÓòBG 5 PDM33 +#define SYS_ADC1IN7_SEL_Pos 0 //ADC1模å�—模拟通é�“7,1 温度传感器 2 电池电压 3 RTC电æº�域BG 4 主电æº�域BG 5 PDM33 #define SYS_ADC1IN7_SEL_Msk (0x0F << SYS_ADC1IN7_SEL_Pos) -#define SYS_ADC1IN7_IOON_Pos 4 //ADC1Ä£¿éÄ£ÄâͨµÀ7ËùÓÃIO¿ª¹Ø +#define SYS_ADC1IN7_IOON_Pos 4 //ADC1模å�—模拟通é�“7所用IO开关 #define SYS_ADC1IN7_IOON_Msk (0x01 << SYS_ADC1IN7_IOON_Pos) typedef struct { - __IO uint32_t PORTA_SEL; //¸øPORTA_SEL[2n+2:2n]¸³ÏàÓ¦µÄÖµ£¬½«PORTA.PINnÒý½ÅÅäÖóÉGPIO¡¢Ä£Äâ¡¢Êý×ֵȹ¦ÄÜ - //µ±¸³ÖµÎªPORTA_PINn_FUNMUXʱ£¬PORTA.PINnÒý½Å¿Éͨ¹ýPORTA_MUX¼Ä´æÆ÷Á¬½Óµ½¸÷ÖÖÊý×ÖÍâÉè + __IO uint32_t PORTA_SEL; //ç»™PORTA_SEL[2n+2:2n]赋相应的值,将PORTA.PINn引脚é…�ç½®æˆ�GPIOã€�模拟ã€�数字等功能 + //当赋值为PORTA_PINn_FUNMUX时,PORTA.PINn引脚å�¯é€šè¿‡PORTA_MUX寄存器连接到å�„ç§�数字外设 __IO uint32_t PORTB_SEL; __IO uint32_t PORTC_SEL; @@ -438,7 +438,7 @@ typedef struct { uint32_t RESERVED9[28]; - __IO uint32_t PORTA_PULLU; //ÉÏÀ­Ê¹ÄÜ + __IO uint32_t PORTA_PULLU; //上拉使能 uint32_t RESERVED10[3]; @@ -454,7 +454,7 @@ typedef struct { uint32_t RESERVED13[51]; - __IO uint32_t PORTB_PULLD; //ÏÂÀ­Ê¹ÄÜ + __IO uint32_t PORTB_PULLD; //下拉使能 uint32_t RESERVED14[3]; @@ -466,7 +466,7 @@ typedef struct { uint32_t RESERVED16[135]; - __IO uint32_t PORTM_DRIVS; //Çý¶¯Ç¿¶È + __IO uint32_t PORTM_DRIVS; //驱动强度 uint32_t RESERVED17[3]; @@ -478,7 +478,7 @@ typedef struct { uint32_t RESERVED19[39]; - __IO uint32_t PORTA_INEN; //ÊäÈëʹÄÜ + __IO uint32_t PORTA_INEN; //输入使能 uint32_t RESERVED20[3]; @@ -1172,21 +1172,21 @@ typedef struct { #define PIN23 23 #define PIN24 24 - __IO uint32_t DIR; //0 ÊäÈë 1 Êä³ö + __IO uint32_t DIR; //0 输入 1 输出 - __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 µçƽ´¥·¢ÖÐ¶Ï 0 ±ßÑØ´¥·¢ÖÐ¶Ï + __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触å�‘中断 0 边沿触å�‘中断 - __IO uint32_t INTBE; //Both Edge£¬µ±INTLVLTRGÉèΪ±ßÑØ´¥·¢ÖжÏʱ£¬´ËλÖÃ1±íʾÉÏÉýÑØºÍϽµÑض¼´¥·¢Öжϣ¬ÖÃ0ʱ´¥·¢±ßÑØÓÉINTRISEENÑ¡Ôñ + __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触å�‘中断时,此ä½�ç½®1表示上å�‡æ²¿å’Œä¸‹é™�沿都触å�‘中断,置0时触å�‘边沿由INTRISEEN选择 - __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 ÉÏÉýÑØ/¸ßµçƽ´¥·¢ÖÐ¶Ï 0 ϽµÑØ/µÍµçƽ´¥·¢ÖÐ¶Ï + __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上å�‡æ²¿/高电平触å�‘中断 0 下é™�沿/低电平触å�‘中断 - __IO uint32_t INTEN; //1 ÖжÏʹÄÜ 0 ÖжϽûÖ¹ + __IO uint32_t INTEN; //1 中断使能 0 中断ç¦�æ­¢ - __IO uint32_t INTRAWSTAT; //Öжϼì²âµ¥ÔªÊÇ·ñ¼ì²âµ½ÁË´¥·¢ÖжϵÄÌõ¼þ 1 ¼ì²âµ½ÁËÖжϴ¥·¢Ìõ¼þ 0 ûÓмì²âµ½Öжϴ¥·¢Ìõ¼þ + __IO uint32_t INTRAWSTAT; //中断检测å�•元是å�¦æ£€æµ‹åˆ°äº†è§¦å�‘中断的æ�¡ä»¶ 1 检测到了中断触å�‘æ�¡ä»¶ 0 没有检测到中断触å�‘æ�¡ä»¶ __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0 - __IO uint32_t INTCLR; //д1Çå³ýÖжϱêÖ¾£¬Ö»¶Ô±ßÑØ´¥·¢ÖжÏÓÐÓà + __IO uint32_t INTCLR; //写1清除中断标志,å�ªå¯¹è¾¹æ²¿è§¦å�‘中断有用 } GPIO_TypeDef; @@ -1635,26 +1635,26 @@ typedef struct { typedef struct { - __IO uint32_t LDVAL; //¶¨Ê±Æ÷¼ÓÔØÖµ£¬Ê¹Äܺó¶¨Ê±Æ÷´Ó´ËÊýÖµ¿ªÊ¼Ïòϵݼõ¼ÆÊý + __IO uint32_t LDVAL; //定时器加载值,使能å�Žå®šæ—¶å™¨ä»Žæ­¤æ•°å€¼å¼€å§‹å�‘下递å‡�计数 - __I uint32_t CVAL; //¶¨Ê±Æ÷µ±Ç°Öµ£¬LDVAL-CVAL ¿É¼ÆËã³ö¼ÆÊ±Ê±³¤ + __I uint32_t CVAL; //定时器当å‰�值,LDVAL-CVAL å�¯è®¡ç®—出计时时长 __IO uint32_t CTRL; } TIMR_TypeDef; -#define TIMR_CTRL_EN_Pos 0 //´Ëλ¸³1µ¼ÖÂTIMR´ÓLDVAL¿ªÊ¼Ïòϵݼõ¼ÆÊý +#define TIMR_CTRL_EN_Pos 0 //æ­¤ä½�赋1导致TIMR从LDVAL开始å�‘下递å‡�计数 #define TIMR_CTRL_EN_Msk (0x01 << TIMR_CTRL_EN_Pos) -#define TIMR_CTRL_CLKSRC_Pos 1 //ʱÖÓÔ´£º0 ÄÚ²¿ÏµÍ³Ê±ÖÓ 1 ÍⲿÒý½ÅÂö³å¼ÆÊý +#define TIMR_CTRL_CLKSRC_Pos 1 //æ—¶é’Ÿæº�:0 内部系统时钟 1 外部引脚脉冲计数 #define TIMR_CTRL_CLKSRC_Msk (0x01 << TIMR_CTRL_CLKSRC_Pos) -#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRxµÄ¼ÆÊýʱÖÓΪTIMRx-1µÄÒç³öÐźŠ+#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRx的计数时钟为TIMRx-1的溢出信å�· #define TIMR_CTRL_CASCADE_Msk (0x01 << TIMR_CTRL_CASCADE_Pos) typedef struct { - __IO uint32_t PCTRL; //Pulse Control£¬Âö¿í²âÁ¿Ä£¿é¿ØÖƼĴæÆ÷ + __IO uint32_t PCTRL; //Pulse Control,脉宽测é‡�模å�—控制寄存器 - __I uint32_t PCVAL; //Âö¿í²âÁ¿¶¨Ê±Æ÷µ±Ç°Öµ + __I uint32_t PCVAL; //脉宽测é‡�定时器当å‰�值 uint32_t RESERVED[2]; @@ -1666,11 +1666,11 @@ typedef struct { } TIMRG_TypeDef; -#define TIMRG_PCTRL_EN_Pos 0 //¿ªÊ¼²âÁ¿Âö¿í£¬Âö¿íÄÚ32λ¼ÆÊýÆ÷´Ó0¿ªÊ¼ÏòÉϼÆÊý +#define TIMRG_PCTRL_EN_Pos 0 //开始测é‡�脉宽,脉宽内32ä½�计数器从0开始å�‘上计数 #define TIMRG_PCTRL_EN_Msk (0x01 << TIMRG_PCTRL_EN_Pos) -#define TIMRG_PCTRL_HIGH_Pos 1 //0 ²âÁ¿µÍµçƽ³¤¶È 1 ²âÁ¿¸ßµçƽ³¤¶È +#define TIMRG_PCTRL_HIGH_Pos 1 //0 测é‡�低电平长度 1 测é‡�高电平长度 #define TIMRG_PCTRL_HIGH_Msk (0x01 << TIMRG_PCTRL_HIGH_Pos) -#define TIMRG_PCTRL_CLKSRC_Pos 2 //ʱÖÓÔ´£º0 ÄÚ²¿ÏµÍ³Ê±ÖÓ 1 Âö¿í²âÁ¿Ä£¿é±ä³ÉÒ»¸ö¼ÆÊýÆ÷£¬²»ÔÙ¾ßÓÐÂö¿í²âÁ¿¹¦ÄÜ +#define TIMRG_PCTRL_CLKSRC_Pos 2 //æ—¶é’Ÿæº�:0 内部系统时钟 1 脉宽测é‡�模å�—å�˜æˆ�一个计数器,ä¸�å†�具有脉宽测é‡�功能 #define TIMRG_PCTRL_CLKSRC_Msk (0x01 << TIMRG_PCTRL_CLKSRC_Pos) #define TIMRG_IE_TIMR0_Pos 0 @@ -1688,7 +1688,7 @@ typedef struct { #define TIMRG_IE_PULSE_Pos 16 #define TIMRG_IE_PULSE_Msk (0x01 << TIMRG_IE_PULSE_Pos) -#define TIMRG_IF_TIMR0_Pos 0 //д1ÇåÁã +#define TIMRG_IF_TIMR0_Pos 0 //写1清零 #define TIMRG_IF_TIMR0_Msk (0x01 << TIMRG_IF_TIMR0_Pos) #define TIMRG_IF_TIMR1_Pos 1 #define TIMRG_IF_TIMR1_Msk (0x01 << TIMRG_IF_TIMR1_Pos) @@ -1703,7 +1703,7 @@ typedef struct { #define TIMRG_IF_PULSE_Pos 16 #define TIMRG_IF_PULSE_Msk (0x01 << TIMRG_IF_PULSE_Pos) -#define TIMRG_HALT_TIMR0_Pos 0 //1 ÔÝÍ£¼ÆÊý +#define TIMRG_HALT_TIMR0_Pos 0 //1 æš‚å�œè®¡æ•° #define TIMRG_HALT_TIMR0_Msk (0x01 << TIMRG_HALT_TIMR0_Pos) #define TIMRG_HALT_TIMR1_Pos 1 #define TIMRG_HALT_TIMR1_Msk (0x01 << TIMRG_HALT_TIMR1_Pos) @@ -1740,114 +1740,114 @@ typedef struct { #define UART_DATA_DATA_Pos 0 #define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos) -#define UART_DATA_VALID_Pos 9 //µ±DATA×Ö¶ÎÓÐÓÐЧµÄ½ÓÊÕÊý¾Ýʱ£¬¸ÃλӲ¼þÖÃ1£¬¶ÁÈ¡Êý¾Ýºó×Ô¶¯ÇåÁã +#define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数æ�®æ—¶ï¼Œè¯¥ä½�硬件置1,读å�–æ•°æ�®å�Žè‡ªåŠ¨æ¸…é›¶ #define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos) #define UART_DATA_PAERR_Pos 10 //Parity Error #define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos) -#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 ÕýÔÚ·¢ËÍÊý¾Ý 1 ¿ÕÏÐ״̬£¬Ã»ÓÐÊý¾Ý·¢ËÍ +#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在å�‘é€�æ•°æ�® 1 空闲状æ€�,没有数æ�®å�‘é€� #define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos) #define UART_CTRL_TXFF_Pos 1 //TX FIFO Full #define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos) -#define UART_CTRL_TXIE_Pos 2 //TX ÖжÏʹÄÜ: 1 TX FF ÖÐÊý¾ÝÉÙÓÚÉ趨¸öÊýʱ²úÉúÖÐ¶Ï +#define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数æ�®å°‘于设定个数时产生中断 #define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos) #define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty #define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos) -#define UART_CTRL_RXIE_Pos 4 //RX ÖжÏʹÄÜ: 1 RX FF ÖÐÊý¾Ý´ïµ½É趨¸öÊýʱ²úÉúÖÐ¶Ï +#define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°æ—¶äº§ç”Ÿä¸­æ–­ #define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos) -#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow£¬Ð´1ÇåÁã +#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零 #define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos) -#define UART_CTRL_TXDOIE_Pos 6 //TX Done ÖжÏʹÄÜ£¬·¢ËÍFIFO¿ÕÇÒ·¢ËÍ·¢ËÍÒÆÎ»¼Ä´æÆ÷Òѽ«×îºóһλ·¢ËͳöÈ¥ +#define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 #define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos) #define UART_CTRL_EN_Pos 9 #define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos) #define UART_CTRL_LOOP_Pos 10 #define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos) -#define UART_CTRL_BAUDEN_Pos 13 //±ØÐëд1 +#define UART_CTRL_BAUDEN_Pos 13 //必须写1 #define UART_CTRL_BAUDEN_Msk (0x01 << UART_CTRL_BAUDEN_Pos) -#define UART_CTRL_TOIE_Pos 14 //TimeOut ÖжÏʹÄÜ£¬½ÓÊÕµ½Éϸö×Ö·ûºó£¬³¬¹ý TOTIME/BAUDRAUD ÃëûÓнÓÊÕµ½ÐµÄÊý¾Ý +#define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符å�Žï¼Œè¶…过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�® #define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos) -#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect£¬¼ì²âµ½LIN Break£¬¼´RXÏßÉϼì²âµ½Á¬Ðø11λµÍµçƽ +#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect,检测到LIN Break,å�³RX线上检测到连续11ä½�低电平 #define UART_CTRL_BRKDET_Msk (0x01 << UART_CTRL_BRKDET_Pos) -#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect ÖжÏʹÄÜ +#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect 中断使能 #define UART_CTRL_BRKIE_Msk (0x01 << UART_CTRL_BRKIE_Pos) -#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break£¬·¢ËÍLIN Break +#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break,å�‘é€�LIN Break #define UART_CTRL_GENBRK_Msk (0x01 << UART_CTRL_GENBRK_Pos) -#define UART_CTRL_DATA9b_Pos 18 //1 9λÊý¾Ýλ 0 8λÊý¾Ýλ +#define UART_CTRL_DATA9b_Pos 18 //1 9ä½�æ•°æ�®ä½� 0 8ä½�æ•°æ�®ä½� #define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos) -#define UART_CTRL_PARITY_Pos 19 //000 ÎÞУÑé 001 ÆæÐ£Ñé 011 żУÑé 101 ¹Ì¶¨Îª1 111 ¹Ì¶¨Îª0 +#define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 å�¶æ ¡éªŒ 101 固定为1 111 固定为0 #define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos) -#define UART_CTRL_STOP2b_Pos 22 //1 2λֹͣλ 0 1λֹͣλ +#define UART_CTRL_STOP2b_Pos 22 //1 2ä½�å�œæ­¢ä½� 0 1ä½�å�œæ­¢ä½� #define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos) -#define UART_CTRL_TOTIME_Pos 24 //TimeOut ʱ³¤ = TOTIME/(BAUDRAUD/10) Ãë +#define UART_CTRL_TOTIME_Pos 24 //TimeOut æ—¶é•¿ = TOTIME/(BAUDRAUD/10) ç§’ #define UART_CTRL_TOTIME_Msk (0xFFu<< UART_CTRL_TOTIME_Pos) -#define UART_BAUD_BAUD_Pos 0 //´®¿Ú²¨ÌØÂÊ = SYS_Freq/16/BAUD - 1 +#define UART_BAUD_BAUD_Pos 0 //串å�£æ³¢ç‰¹çއ = SYS_Freq/16/BAUD - 1 #define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos) -#define UART_BAUD_TXD_Pos 14 //ͨ¹ý´Ëλ¿ÉÖ±½Ó¶ÁÈ¡´®¿ÚTXDÒý½ÅÉÏµÄµçÆ½ +#define UART_BAUD_TXD_Pos 14 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£TXD引脚上的电平 #define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos) -#define UART_BAUD_RXD_Pos 15 //ͨ¹ý´Ëλ¿ÉÖ±½Ó¶ÁÈ¡´®¿ÚRXDÒý½ÅÉÏµÄµçÆ½ +#define UART_BAUD_RXD_Pos 15 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£RXD引脚上的电平 #define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos) -#define UART_BAUD_RXTOIF_Pos 16 //½ÓÊÕ&³¬Ê±µÄÖжϱêÖ¾ = RXIF | TOIF +#define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF #define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos) -#define UART_BAUD_TXIF_Pos 17 //·¢ËÍÖжϱêÖ¾ = TXTHRF & TXIE +#define UART_BAUD_TXIF_Pos 17 //å�‘é€�中断标志 = TXTHRF & TXIE #define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos) -#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect ÖжϱêÖ¾£¬¼ì²âµ½LIN BreakʱÈôBRKIE=1£¬´ËλÓÉÓ²¼þÖÃλ +#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect 中断标志,检测到LIN Breakæ—¶è‹¥BRKIE=1,此ä½�由硬件置ä½� #define UART_BAUD_BRKIF_Msk (0x01 << UART_BAUD_BRKIF_Pos) -#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag£¬RX FIFOÖÐÊý¾Ý´ïµ½É趨¸öÊý£¨RXLVL >= RXTHR£©Ê±Ó²¼þÖÃ1 +#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°ï¼ˆRXLVL >= RXTHR)时硬件置1 #define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos) -#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag£¬TX FIFOÖÐÊý¾ÝÉÙÓÚÉ趨¸öÊý£¨TXLVL <= TXTHR£©Ê±Ó²¼þÖÃ1 +#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数æ�®å°‘于设定个数(TXLVL <= TXTHR)时硬件置1 #define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos) -#define UART_BAUD_TOIF_Pos 21 //TimeOut ÖжϱêÖ¾£¬³¬¹ý TOTIME/BAUDRAUD ÃëûÓнÓÊÕµ½ÐµÄÊý¾ÝʱÈôTOIE=1£¬´ËλÓÉÓ²¼þÖÃλ +#define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�®æ—¶è‹¥TOIE=1,此ä½�由硬件置ä½� #define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos) -#define UART_BAUD_RXIF_Pos 22 //½ÓÊÕÖжϱêÖ¾ = RXTHRF & RXIE +#define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE #define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos) -#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable£¬Ð´1Æô¶¯×Ô¶¯²¨ÌØÂÊУ׼£¬Íê³Éºó×Ô¶¯ÇåÁã +#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1å�¯åŠ¨è‡ªåŠ¨æ³¢ç‰¹çŽ‡æ ¡å‡†ï¼Œå®Œæˆ�å�Žè‡ªåŠ¨æ¸…é›¶ #define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos) -#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit£¬ÓÃÓÚ¼ÆËã²¨ÌØÂʵļì²â볤£¬0 1λ£¬Í¨¹ý²âÆðʼλ Âö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xFF - // 1 2λ£¬Í¨¹ý²âÆðʼλ¼Ó1λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xFE - // 1 4λ£¬Í¨¹ý²âÆðʼλ¼Ó3λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0xF8 - // 1 8λ£¬Í¨¹ý²âÆðʼλ¼Ó7λÊý¾ÝλÂö¿í¼ÆËã²¨ÌØÂÊ£¬ÒªÇó·¢ËͶ˷¢ËÍ0x80 +#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测ä½�长,0 1ä½�,通过测起始ä½� 脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFF + // 1 2ä½�,通过测起始ä½�加1ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFE + // 1 4ä½�,通过测起始ä½�加3ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xF8 + // 1 8ä½�,通过测起始ä½�加7ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0x80 #define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos) -#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error£¬0 ×Ô¶¯²¨ÌØÂÊУ׼³É¹¦ 1 ×Ô¶¯²¨ÌØÂÊУ׼ʧ°Ü +#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准æˆ�功 1 自动波特率校准失败 #define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos) -#define UART_BAUD_TXDOIF_Pos 27 //TX Done ÖжϱêÖ¾£¬·¢ËÍFIFO¿ÕÇÒ·¢ËÍ·¢ËÍÒÆÎ»¼Ä´æÆ÷Òѽ«×îºóһλ·¢ËͳöÈ¥ +#define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 #define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos) -#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level£¬RX FIFO ÖÐ×Ö·û¸öÊý +#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数 #define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos) -#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level£¬TX FIFO ÖÐ×Ö·û¸öÊý +#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数 #define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos) -#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold£¬RXÖжϴ¥·¢ÃÅÏÞ£¬ÖжÏʹÄÜʱ RXLVL >= RXTHR ´¥·¢RXÖÐ¶Ï +#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触å�‘é—¨é™�,中断使能时 RXLVL >= RXTHR 触å�‘RX中断 #define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos) -#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold£¬TXÖжϴ¥·¢ÃÅÏÞ£¬ÖжÏʹÄÜʱ TXLVL <= TXTHR ´¥·¢TXÖÐ¶Ï +#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触å�‘é—¨é™�,中断使能时 TXLVL <= TXTHR 触å�‘TX中断 #define UART_FIFO_TXTHR_Msk (0xFFu<< UART_FIFO_TXTHR_Pos) -#define UART_LINCR_BRKDETIE_Pos 0 //¼ì²âµ½LIN BreakÖжÏʹÄÜ +#define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能 #define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos) -#define UART_LINCR_BRKDETIF_Pos 1 //¼ì²âµ½LIN BreakÖжÏ״̬ +#define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状æ€� #define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos) -#define UART_LINCR_GENBRKIE_Pos 2 //·¢ËÍLIN BreakÍê³ÉÖжÏʹÄÜ +#define UART_LINCR_GENBRKIE_Pos 2 //å�‘é€�LIN Break完æˆ�中断使能 #define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos) -#define UART_LINCR_GENBRKIF_Pos 3 //·¢ËÍLIN BreakÍê³ÉÖжÏ״̬ +#define UART_LINCR_GENBRKIF_Pos 3 //å�‘é€�LIN Break完æˆ�中断状æ€� #define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos) -#define UART_LINCR_GENBRK_Pos 4 //·¢ËÍLIN Break£¬·¢ËÍÍê³É×Ô¶¯ÇåÁã +#define UART_LINCR_GENBRK_Pos 4 //å�‘é€�LIN Break,å�‘é€�完æˆ�自动清零 #define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos) -#define UART_CTSCR_EN_Pos 0 //CTSÁ÷¿ØÊ¹ÄÜ +#define UART_CTSCR_EN_Pos 0 //CTSæµ�控使能 #define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos) -#define UART_CTSCR_POL_Pos 2 //CTSÐźż«ÐÔ£¬0 µÍÓÐЧ£¬CTSÊäÈëΪµÍ±íʾ¿ÉÒÔ·¢ËÍÊý¾Ý +#define UART_CTSCR_POL_Pos 2 //CTSä¿¡å�·æž�性,0 低有效,CTS输入为低表示å�¯ä»¥å�‘é€�æ•°æ�® #define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos) -#define UART_CTSCR_STAT_Pos 7 //CTSÐźŵĵ±Ç°×´Ì¬ +#define UART_CTSCR_STAT_Pos 7 //CTSä¿¡å�·çš„当å‰�状æ€� #define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos) -#define UART_RTSCR_EN_Pos 1 //RTSÁ÷¿ØÊ¹ÄÜ +#define UART_RTSCR_EN_Pos 1 //RTSæµ�控使能 #define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos) -#define UART_RTSCR_POL_Pos 3 //RTSÐźż«ÐÔ 0 µÍÓÐЧ£¬RTSÊäÈëΪµÍ±íʾ¿ÉÒÔ½ÓÊÕÊý¾Ý +#define UART_RTSCR_POL_Pos 3 //RTSä¿¡å�·æž�性 0 低有效,RTS输入为低表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® #define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos) -#define UART_RTSCR_THR_Pos 4 //RTSÁ÷¿ØµÄ´¥·¢ãÐÖµ 0 1×Ö½Ú 1 2×Ö½Ú 2 4×Ö½Ú 3 6×Ö½Ú +#define UART_RTSCR_THR_Pos 4 //RTSæµ�控的触å�‘阈值 0 1字节 1 2字节 2 4字节 3 6字节 #define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos) -#define UART_RTSCR_STAT_Pos 8 //RTSÐźŵĵ±Ç°×´Ì¬ +#define UART_RTSCR_STAT_Pos 8 //RTSä¿¡å�·çš„当å‰�状æ€� #define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos) @@ -1866,46 +1866,46 @@ typedef struct { } SPI_TypeDef; -#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI¹¤×÷ʱÖÓ = SYS_Freq/pow(2, CLKDIV+2) +#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2) #define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos) #define SPI_CTRL_EN_Pos 3 #define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos) -#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, ȡֵ3--15£¬±íʾ4--16λ +#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, å�–值3--15,表示4--16ä½� #define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos) -#define SPI_CTRL_CPHA_Pos 8 //0 ÔÚSCLKµÄµÚÒ»¸öÌø±äÑØ²ÉÑùÊý¾Ý 1 ÔÚSCLKµÄµÚ¶þ¸öÌø±äÑØ²ÉÑùÊý¾Ý +#define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳å�˜æ²¿é‡‡æ ·æ•°æ�® 1 在SCLK的第二个跳å�˜æ²¿é‡‡æ ·æ•°æ�® #define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos) -#define SPI_CTRL_CPOL_Pos 9 //0 ¿ÕÏÐ״̬ÏÂSCLKΪµÍµçƽ 1 ¿ÕÏÐ״̬ÏÂSCLKΪ¸ßµçƽ +#define SPI_CTRL_CPOL_Pos 9 //0 空闲状æ€�下SCLK为低电平 1 空闲状æ€�下SCLK为高电平 #define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos) #define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 SPI 3 SPI #define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos) -#define SPI_CTRL_MSTR_Pos 12 //Master, 1 Ö÷ģʽ 0 ´Óģʽ +#define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模å¼� 0 从模å¼� #define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos) -#define SPI_CTRL_FAST_Pos 13 //1 SPI¹¤×÷ʱÖÓ = SYS_Freq/2 0 SPI¹¤×÷ʱÖÓÓÉSPI->CTRL.CLKDIVÉèÖà +#define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置 #define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos) -#define SPI_CTRL_FILTE_Pos 16 //1 ¶ÔSPIÊäÈëÐźŽøÐÐÈ¥¶¶²Ù×÷ 0 ¶ÔSPIÊäÈëÐźŲ»½øÐÐÈ¥¶¶²Ù×÷ +#define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信å�·è¿›è¡ŒåŽ»æŠ–æ“�作 0 对SPI输入信å�·ä¸�进行去抖æ“�作 #define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos) -#define SPI_CTRL_SSN_H_Pos 17 //0 ´«Êä¹ý³ÌÖÐSSNʼÖÕΪ0 1 ´«Êä¹ý³ÌÖÐÿ×Ö·ûÖ®¼ä»á½«SSNÀ­¸ß°ë¸öSCLKÖÜÆÚ +#define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中æ¯�字符之间会将SSN拉高å�Šä¸ªSCLK周期 #define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos) #define SPI_CTRL_TFCLR_Pos 24 //TX FIFO Clear #define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos) #define SPI_CTRL_RFCLR_Pos 25 //RX FIFO Clear #define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos) -#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete£¬Ã¿´«ÊäÍê³ÉÒ»¸öÊý¾Ý×ÖÓÉÓ²¼þÖÃ1£¬Èí¼þд1ÇåÁã +#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1,软件写1清零 #define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos) -#define SPI_STAT_TFE_Pos 1 //·¢ËÍFIFO Empty +#define SPI_STAT_TFE_Pos 1 //å�‘é€�FIFO Empty #define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos) -#define SPI_STAT_TFNF_Pos 2 //·¢ËÍFIFO Not Full +#define SPI_STAT_TFNF_Pos 2 //å�‘é€�FIFO Not Full #define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos) -#define SPI_STAT_RFNE_Pos 3 //½ÓÊÕFIFO Not Empty +#define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty #define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos) -#define SPI_STAT_RFF_Pos 4 //½ÓÊÕFIFO Full +#define SPI_STAT_RFF_Pos 4 //接收FIFO Full #define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos) -#define SPI_STAT_RFOVF_Pos 5 //½ÓÊÕFIFO Overflow +#define SPI_STAT_RFOVF_Pos 5 //接收FIFO Overflow #define SPI_STAT_RFOVF_Msk (0x01 << SPI_STAT_RFOVF_Pos) -#define SPI_STAT_TFLVL_Pos 6 //·¢ËÍFIFOÖÐÊý¾Ý¸öÊý£¬ 0 TFNF=0ʱ±íʾFIFOÄÚÓÐ8¸öÊý¾Ý£¬TFNF=1ʱ±íʾFIFOÄÚÓÐ0¸öÊý¾Ý 1--7 FIFOÄÚÓÐ1--7¸öÊý¾Ý +#define SPI_STAT_TFLVL_Pos 6 //å�‘é€�FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 TFNF=0时表示FIFO内有8个数æ�®ï¼ŒTFNF=1时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® #define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos) -#define SPI_STAT_RFLVL_Pos 9 //½ÓÊÕFIFOÖÐÊý¾Ý¸öÊý£¬ 0 RFF=1ʱ±íʾFIFOÄÚÓÐ8¸öÊý¾Ý£¬ RFF=0ʱ±íʾFIFOÄÚÓÐ0¸öÊý¾Ý 1--7 FIFOÄÚÓÐ1--7¸öÊý¾Ý +#define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 RFF=1时表示FIFO内有8个数æ�®ï¼Œ RFF=0时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® #define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos) #define SPI_STAT_BUSY_Pos 15 #define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos) @@ -1925,7 +1925,7 @@ typedef struct { #define SPI_IE_FTC_Pos 9 //Frame Transmit Complete #define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos) -#define SPI_IF_RFOVF_Pos 0 //д1ÇåÁã +#define SPI_IF_RFOVF_Pos 0 //写1清零 #define SPI_IF_RFOVF_Msk (0x01 << SPI_IF_RFOVF_Pos) #define SPI_IF_RFF_Pos 1 #define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos) @@ -1935,16 +1935,16 @@ typedef struct { #define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos) #define SPI_IF_TFHF_Pos 4 #define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos) -#define SPI_IF_WTC_Pos 8 //Word Transmit Complete£¬Ã¿´«ÊäÍê³ÉÒ»¸öÊý¾Ý×ÖÓÉÓ²¼þÖÃ1 +#define SPI_IF_WTC_Pos 8 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1 #define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos) -#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete£¬WTCÖÃλʱÈôTX FIFOÊǿյģ¬ÔòFTCÖÃλ +#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTCç½®ä½�æ—¶è‹¥TX FIFO是空的,则FTCç½®ä½� #define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos) typedef struct { - __IO uint32_t CLKDIV; //[15:0] Ð뽫ÄÚ²¿¹¤×÷ƵÂÊ·Öµ½SCLƵÂʵÄ5±¶£¬¼´CLKDIV = SYS_Freq/5/SCL_Freq - 1 + __IO uint32_t CLKDIV; //[15:0] 须将内部工作频率分到SCL频率的5å€�,å�³CLKDIV = SYS_Freq/5/SCL_Freq - 1 __IO uint32_t CTRL; @@ -1967,61 +1967,61 @@ typedef struct { #define I2C_CTRL_EN_Pos 7 #define I2C_CTRL_EN_Msk (0x01 << I2C_CTRL_EN_Pos) -#define I2C_MSTCMD_IF_Pos 0 //1 Óеȴý´¦ÀíµÄÖжϣ¬Ð´1ÇåÁã ÓÐÁ½ÖÖÇé¿öÏ´ËλӲ¼þÖÃλ£º1¡¢Ò»¸ö×Ö½Ú´«ÊäÍê³É 2¡¢×ÜÏß·ÃÎÊȨ¶ªÊ§ +#define I2C_MSTCMD_IF_Pos 0 //1 有等待处ç�†çš„中断,写1清零 有两ç§�情况下此ä½�硬件置ä½�:1ã€�一个字节传输完æˆ� 2ã€�总线访问æ�ƒä¸¢å¤± #define I2C_MSTCMD_IF_Msk (0x01 << I2C_MSTCMD_IF_Pos) #define I2C_MSTCMD_TIP_Pos 1 //Transmission In Process #define I2C_MSTCMD_TIP_Msk (0x01 << I2C_MSTCMD_TIP_Pos) -#define I2C_MSTCMD_ACK_Pos 3 //½ÓÊÕģʽÏ£¬0 Ïò·¢ËͶ˷´À¡ACK 1 Ïò·¢ËͶ˷´À¡NACK +#define I2C_MSTCMD_ACK_Pos 3 //接收模å¼�下,0 å�‘å�‘é€�端å��馈ACK 1 å�‘å�‘é€�端å��馈NACK #define I2C_MSTCMD_ACK_Msk (0x01 << I2C_MSTCMD_ACK_Pos) -#define I2C_MSTCMD_WR_Pos 4 // ÏòSlaveдÊý¾Ýʱ£¬°ÑÕâһλд1£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_WR_Pos 4 // å�‘Slave写数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 #define I2C_MSTCMD_WR_Msk (0x01 << I2C_MSTCMD_WR_Pos) -#define I2C_MSTCMD_RD_Pos 5 //д£º´ÓSlave¶ÁÊý¾Ýʱ£¬°ÑÕâһλд1£¬×Ô¶¯ÇåÁã ¶Á£ºµ±I2CÄ£¿éʧȥ×ÜÏߵķÃÎÊȨʱӲ¼þÖÃ1 +#define I2C_MSTCMD_RD_Pos 5 //写:从Slave读数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 读:当I2C模å�—失去总线的访问æ�ƒæ—¶ç¡¬ä»¶ç½®1 #define I2C_MSTCMD_RD_Msk (0x01 << I2C_MSTCMD_RD_Pos) -#define I2C_MSTCMD_BUSY_Pos 6 //¶Á£ºµ±¼ì²âµ½STARTÖ®ºó£¬Õâһλ±ä1£»µ±¼ì²âµ½STOPÖ®ºó£¬Õâһλ±ä0 +#define I2C_MSTCMD_BUSY_Pos 6 //读:当检测到START之å�Žï¼Œè¿™ä¸€ä½�å�˜1;当检测到STOP之å�Žï¼Œè¿™ä¸€ä½�å�˜0 #define I2C_MSTCMD_BUSY_Msk (0x01 << I2C_MSTCMD_BUSY_Pos) -#define I2C_MSTCMD_STO_Pos 6 //д£º²úÉúSTOP£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_STO_Pos 6 //写:产生STOP,自动清零 #define I2C_MSTCMD_STO_Msk (0x01 << I2C_MSTCMD_STO_Pos) -#define I2C_MSTCMD_RXACK_Pos 7 //¶Á£º½ÓÊÕµ½µÄSlaveµÄACK룬0 ÊÕµ½ACK 1 ÊÕµ½NACK +#define I2C_MSTCMD_RXACK_Pos 7 //读:接收到的Slaveçš„ACKä½�,0 收到ACK 1 收到NACK #define I2C_MSTCMD_RXACK_Msk (0x01 << I2C_MSTCMD_RXACK_Pos) -#define I2C_MSTCMD_STA_Pos 7 //д£º²úÉúSTART£¬×Ô¶¯ÇåÁã +#define I2C_MSTCMD_STA_Pos 7 //写:产生START,自动清零 #define I2C_MSTCMD_STA_Msk (0x01 << I2C_MSTCMD_STA_Pos) -#define I2C_SLVCR_IM_RXEND_Pos 0 //½ÓÊÕÍê³ÉÖжϽûÖ¹ +#define I2C_SLVCR_IM_RXEND_Pos 0 //接收完æˆ�中断ç¦�æ­¢ #define I2C_SLVCR_IM_RXEND_Msk (0x01 << I2C_SLVCR_IM_RXEND_Pos) -#define I2C_SLVCR_IM_TXEND_Pos 1 //·¢ËÍÍê³ÉÖжϽûÖ¹ +#define I2C_SLVCR_IM_TXEND_Pos 1 //å�‘é€�完æˆ�中断ç¦�æ­¢ #define I2C_SLVCR_IM_TXEND_Msk (0x01 << I2C_SLVCR_IM_TXEND_Pos) -#define I2C_SLVCR_IM_STADET_Pos 2 //¼ì²âµ½ÆðʼÖжϽûÖ¹ +#define I2C_SLVCR_IM_STADET_Pos 2 //检测到起始中断ç¦�æ­¢ #define I2C_SLVCR_IM_STADET_Msk (0x01 << I2C_SLVCR_IM_STADET_Pos) -#define I2C_SLVCR_IM_STODET_Pos 3 //¼ì²âµ½Í£Ö¹ÖжϽûÖ¹ +#define I2C_SLVCR_IM_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­ç¦�æ­¢ #define I2C_SLVCR_IM_STODET_Msk (0x01 << I2C_SLVCR_IM_STODET_Pos) -#define I2C_SLVCR_IM_RDREQ_Pos 4 //½ÓÊÕµ½¶ÁÇëÇóÖжϽûÖ¹ +#define I2C_SLVCR_IM_RDREQ_Pos 4 //接收到读请求中断ç¦�æ­¢ #define I2C_SLVCR_IM_RDREQ_Msk (0x01 << I2C_SLVCR_IM_RDREQ_Pos) -#define I2C_SLVCR_IM_WRREQ_Pos 5 //½ÓÊÕµ½Ð´ÇëÇóÖжϽûÖ¹ +#define I2C_SLVCR_IM_WRREQ_Pos 5 //接收到写请求中断ç¦�æ­¢ #define I2C_SLVCR_IM_WRREQ_Msk (0x01 << I2C_SLVCR_IM_WRREQ_Pos) -#define I2C_SLVCR_ADDR7b_Pos 16 //1 7λµØÖ·Ä£Ê½ 0 10λµØÖ·Ä£Ê½ +#define I2C_SLVCR_ADDR7b_Pos 16 //1 7ä½�地å�€æ¨¡å¼� 0 10ä½�地å�€æ¨¡å¼� #define I2C_SLVCR_ADDR7b_Msk (0x01 << I2C_SLVCR_ADDR7b_Pos) -#define I2C_SLVCR_ACK_Pos 17 //1 Ó¦´ðACK 0 Ó¦´ðNACK +#define I2C_SLVCR_ACK_Pos 17 //1 应答ACK 0 应答NACK #define I2C_SLVCR_ACK_Msk (0x01 << I2C_SLVCR_ACK_Pos) -#define I2C_SLVCR_SLAVE_Pos 18 //1 ´Ó»úģʽ 0 Ö÷»úģʽ +#define I2C_SLVCR_SLAVE_Pos 18 //1 从机模å¼� 0 主机模å¼� #define I2C_SLVCR_SLAVE_Msk (0x01 << I2C_SLVCR_SLAVE_Pos) -#define I2C_SLVCR_DEBOUNCE_Pos 19 //È¥¶¶¶¯Ê¹ÄÜ +#define I2C_SLVCR_DEBOUNCE_Pos 19 //去抖动使能 #define I2C_SLVCR_DEBOUNCE_Msk (0x01 << I2C_SLVCR_DEBOUNCE_Pos) -#define I2C_SLVCR_ADDR_Pos 20 //´Ó»úµØÖ· +#define I2C_SLVCR_ADDR_Pos 20 //从机地å�€ #define I2C_SLVCR_ADDR_Msk (0x3FF << I2C_SLVCR_ADDR_Pos) -#define I2C_SLVIF_RXEND_Pos 0 //½ÓÊÕÍê³ÉÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_RXEND_Pos 0 //接收完æˆ�中断标志,写1清零 #define I2C_SLVIF_RXEND_Msk (0x01 << I2C_SLVIF_RXEND_Pos) -#define I2C_SLVIF_TXEND_Pos 1 //·¢ËÍÍê³ÉÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_TXEND_Pos 1 //å�‘é€�完æˆ�中断标志,写1清零 #define I2C_SLVIF_TXEND_Msk (0x01 << I2C_SLVIF_TXEND_Pos) -#define I2C_SLVIF_STADET_Pos 2 //¼ì²âµ½ÆðʼÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_STADET_Pos 2 //检测到起始中断标志,写1清零 #define I2C_SLVIF_STADET_Msk (0x01 << I2C_SLVIF_STADET_Pos) -#define I2C_SLVIF_STODET_Pos 3 //¼ì²âµ½Í£Ö¹ÖжϱêÖ¾£¬Ð´1ÇåÁã +#define I2C_SLVIF_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­æ ‡å¿—,写1清零 #define I2C_SLVIF_STODET_Msk (0x01 << I2C_SLVIF_STODET_Pos) -#define I2C_SLVIF_RDREQ_Pos 4 //½ÓÊÕµ½¶ÁÇëÇóÖжϱêÖ¾ +#define I2C_SLVIF_RDREQ_Pos 4 //接收到读请求中断标志 #define I2C_SLVIF_RDREQ_Msk (0x01 << I2C_SLVIF_RDREQ_Pos) -#define I2C_SLVIF_WRREQ_Pos 5 //½ÓÊÕµ½Ð´ÇëÇóÖжϱêÖ¾ +#define I2C_SLVIF_WRREQ_Pos 5 //接收到写请求中断标志 #define I2C_SLVIF_WRREQ_Msk (0x01 << I2C_SLVIF_WRREQ_Pos) -#define I2C_SLVIF_ACTIVE_Pos 6 //slave ÓÐЧ +#define I2C_SLVIF_ACTIVE_Pos 6 //slave 有效 #define I2C_SLVIF_ACTIVE_Msk (0x01 << I2C_SLVIF_ACTIVE_Pos) @@ -2056,7 +2056,7 @@ typedef struct { } ADC_TypeDef; -#define ADC_CTRL_CH0_Pos 0 //ͨµÀÑ¡ÖÐ +#define ADC_CTRL_CH0_Pos 0 //通é�“选中 #define ADC_CTRL_CH0_Msk (0x01 << ADC_CTRL_CH0_Pos) #define ADC_CTRL_CH1_Pos 1 #define ADC_CTRL_CH1_Msk (0x01 << ADC_CTRL_CH1_Pos) @@ -2072,20 +2072,20 @@ typedef struct { #define ADC_CTRL_CH6_Msk (0x01 << ADC_CTRL_CH6_Pos) #define ADC_CTRL_CH7_Pos 7 #define ADC_CTRL_CH7_Msk (0x01 << ADC_CTRL_CH7_Pos) -#define ADC_CTRL_AVG_Pos 8 //0 1´Î²ÉÑù 1 2´Î²ÉÑùȡƽ¾ùÖµ 3 4´Î²ÉÑùȡƽ¾ùÖµ 7 8´Î²ÉÑùȡƽ¾ùÖµ 15 16´Î²ÉÑùȡƽ¾ùÖµ +#define ADC_CTRL_AVG_Pos 8 //0 1次采样 1 2次采样å�–å¹³å�‡å€¼ 3 4次采样å�–å¹³å�‡å€¼ 7 8次采样å�–å¹³å�‡å€¼ 15 16次采样å�–å¹³å�‡å€¼ #define ADC_CTRL_AVG_Msk (0x0F << ADC_CTRL_AVG_Pos) #define ADC_CTRL_EN_Pos 12 #define ADC_CTRL_EN_Msk (0x01 << ADC_CTRL_EN_Pos) -#define ADC_CTRL_CONT_Pos 13 //Continuous conversion£¬Ö»ÔÚÈí¼þÆô¶¯Ä£Ê½ÏÂÓÐЧ£¬0 µ¥´Îת»»£¬×ª»»Íê³ÉºóSTARTλ×Ô¶¯Çå³ýֹͣת»» -#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 Á¬Ðø×ª»»£¬Æô¶¯ºóÒ»Ö±²ÉÑù¡¢×ª»»£¬Ö±µ½Èí¼þÇå³ýSTARTλ -#define ADC_CTRL_TRIG_Pos 14 //ת»»´¥·¢·½Ê½£º0 Èí¼þÆô¶¯×ª»» 1 PWM´¥·¢ +#define ADC_CTRL_CONT_Pos 13 //Continuous conversion,å�ªåœ¨è½¯ä»¶å�¯åŠ¨æ¨¡å¼�下有效,0 å�•次转æ�¢ï¼Œè½¬æ�¢å®Œæˆ�å�ŽSTARTä½�自动清除å�œæ­¢è½¬æ�¢ +#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 连续转æ�¢ï¼Œå�¯åЍå�Žä¸€ç›´é‡‡æ ·ã€�转æ�¢ï¼Œç›´åˆ°è½¯ä»¶æ¸…除STARTä½� +#define ADC_CTRL_TRIG_Pos 14 //转æ�¢è§¦å�‘æ–¹å¼�:0 软件å�¯åŠ¨è½¬æ�¢ 1 PWM触å�‘ #define ADC_CTRL_TRIG_Msk (0x01 << ADC_CTRL_TRIG_Pos) #define ADC_CTRL_CLKSRC_Pos 15 //0 VCO 1 HRC #define ADC_CTRL_CLKSRC_Msk (0x01 << ADC_CTRL_CLKSRC_Pos) #define ADC_CTRL_FIFOCLR_Pos 24 //[24] CH0_FIFO_CLR [25] CH1_FIFO_CLR ... [31] CH7_FIFO_CLR #define ADC_CTRL_FIFOCLR_Msk (0xFFu<< ADC_CTRL_FIFOCLR_Pos) -#define ADC_START_GO_Pos 0 //Èí¼þ´¥·¢Ä£Ê½Ï£¬Ð´1Æô¶¯ADC²ÉÑùºÍת»»£¬ÔÚµ¥´ÎģʽÏÂת»»Íê³ÉºóÓ²¼þ×Ô¶¯ÇåÁ㣬ÔÚɨÃèģʽϱØÐëÈí¼þд0Í£Ö¹ADCת»» +#define ADC_START_GO_Pos 0 //软件触å�‘模å¼�下,写1å�¯åЍADC采样和转æ�¢ï¼Œåœ¨å�•次模å¼�下转æ�¢å®Œæˆ�å�Žç¡¬ä»¶è‡ªåŠ¨æ¸…é›¶ï¼Œåœ¨æ‰«æ��模å¼�下必须软件写0å�œæ­¢ADC转æ�¢ #define ADC_START_GO_Msk (0x01 << ADC_START_GO_Pos) #define ADC_START_BUSY_Pos 4 #define ADC_START_BUSY_Msk (0x01 << ADC_START_BUSY_Pos) @@ -2155,13 +2155,13 @@ typedef struct { #define ADC_IE_CH7FULL_Pos 31 #define ADC_IE_CH7FULL_Msk (0x01u<< ADC_IE_CH7FULL_Pos) -#define ADC_IF_CH0EOC_Pos 0 //д1ÇåÁã +#define ADC_IF_CH0EOC_Pos 0 //写1清零 #define ADC_IF_CH0EOC_Msk (0x01 << ADC_IF_CH0EOC_Pos) -#define ADC_IF_CH0OVF_Pos 1 //д1ÇåÁã +#define ADC_IF_CH0OVF_Pos 1 //写1清零 #define ADC_IF_CH0OVF_Msk (0x01 << ADC_IF_CH0OVF_Pos) -#define ADC_IF_CH0HFULL_Pos 2 //д1ÇåÁã +#define ADC_IF_CH0HFULL_Pos 2 //写1清零 #define ADC_IF_CH0HFULL_Msk (0x01 << ADC_IF_CH0HFULL_Pos) -#define ADC_IF_CH0FULL_Pos 3 //д1ÇåÁã +#define ADC_IF_CH0FULL_Pos 3 //写1清零 #define ADC_IF_CH0FULL_Msk (0x01 << ADC_IF_CH0FULL_Pos) #define ADC_IF_CH1EOC_Pos 4 #define ADC_IF_CH1EOC_Msk (0x01 << ADC_IF_CH1EOC_Pos) @@ -2220,9 +2220,9 @@ typedef struct { #define ADC_IF_CH7FULL_Pos 31 #define ADC_IF_CH7FULL_Msk (0x01 << ADC_IF_CH7FULL_Pos) -#define ADC_STAT_EOC_Pos 0 //д1ÇåÁã +#define ADC_STAT_EOC_Pos 0 //写1清零 #define ADC_STAT_EOC_Msk (0x01 << ADC_STAT_EOC_Pos) -#define ADC_STAT_OVF_Pos 1 //¶ÁÊý¾Ý¼Ä´æÆ÷Çå³ý +#define ADC_STAT_OVF_Pos 1 //读数æ�®å¯„存器清除 #define ADC_STAT_OVF_Msk (0x01 << ADC_STAT_OVF_Pos) #define ADC_STAT_HFULL_Pos 2 #define ADC_STAT_HFULL_Msk (0x01 << ADC_STAT_HFULL_Pos) @@ -2231,20 +2231,20 @@ typedef struct { #define ADC_STAT_EMPTY_Pos 4 #define ADC_STAT_EMPTY_Msk (0x01 << ADC_STAT_EMPTY_Pos) -#define ADC_CTRL1_RIN_Pos 4 //ÊäÈë×迹£º0 ÎÞÇî´ó 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K +#define ADC_CTRL1_RIN_Pos 4 //输入阻抗:0 无穷大 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K #define ADC_CTRL1_RIN_Msk (0x07 << ADC_CTRL1_RIN_Pos) -#define ADC_CTRL2_RESET_Pos 0 //Êý×ֵ緸´Î» +#define ADC_CTRL2_RESET_Pos 0 //数字电路å¤�ä½� #define ADC_CTRL2_RESET_Msk (0x01 << ADC_CTRL2_RESET_Pos) -#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM£¬ADCÓëPGAÊä³ö¹²Ä£µçƽѡÔñ +#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM,ADC与PGA输出共模电平选择 #define ADC_CTRL2_ADCEVCM_Msk (0x01 << ADC_CTRL2_ADCEVCM_Pos) -#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM£¬PGAÊäÈ빲ģµçƽѡÔñ +#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM,PGA输入共模电平选择 #define ADC_CTRL2_PGAIVCM_Msk (0x01 << ADC_CTRL2_PGAIVCM_Pos) #define ADC_CTRL2_PGAGAIN_Pos 3 //0 25.1dB 1 21.6dB 2 11.1dB 3 3.5dB 4 0dB(1.8V) 5 -2.9dB 6 -5.3dB #define ADC_CTRL2_PGAGAIN_Msk (0x07 << ADC_CTRL2_PGAGAIN_Pos) -#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC ÄÚ²¿ 1.2V REFPµçѹÊä³öµ½ÍⲿREFPÒý½Å£¬ÓÃÓÚ²âÁ¿£¬»òÔÚÐèÒª1.2VÍⲿREFPʱ½ÚÊ¡³É±¾ +#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC 内部 1.2V REFP电压输出到外部REFP引脚,用于测é‡�,或在需è¦�1.2V外部REFP时节çœ�æˆ�本 #define ADC_CTRL2_REFPOUT_Msk (0x01 << ADC_CTRL2_REFPOUT_Pos -#define ADC_CTRL2_CLKDIV_Pos 24 //ʱÖÓ·ÖÆµ£¬Ö»ÔÚʱÖÓԴΪHRCʱÓÐЧ +#define ADC_CTRL2_CLKDIV_Pos 24 //时钟分频,å�ªåœ¨æ—¶é’Ÿæº�为HRC时有效 #define ADC_CTRL2_CLKDIV_Msk (0x1F << ADC_CTRL2_CLKDIV_Pos) #define ADC_CTRL2_PGAVCM_Pos 29 #define ADC_CTRL2_PGAVCM_Msk (0x07u<< ADC_CTRL2_PGAVCM_Pos) @@ -2263,17 +2263,17 @@ typedef struct { typedef struct { - __IO uint32_t MODE; //0 ÆÕͨģʽ£¬A¡¢BÁ½Â·Êä³ö»¥Ïà¶ÀÁ¢ - //1 »¥²¹Ä£Ê½£¬A¡¢BÁ½Â·Êä³ö¶¼ÓÉPERA¡¢HIGHA¿ØÖÆ£¬B·Êä³öÓëA·Êä³ö¼«ÐÔÏà·´£¬ÇÒDZA¡¢DZB¿ØÖÆA¡¢B·Êä³öÉÏÉýÑØÍÆ³Ùʱ¼ä - //2 µ¥´Îģʽ£¬Í¬ÆÕͨģʽ£¬µ«Ò»¸öÖÜÆÚºó×Ô¶¯Í£Ö¹ - //3 ¶Ô³ÆÄ£Ê½£¬A¡¢BÁ½Â·Êä³ö»¥Ïà¶ÀÁ¢£¬ÒÔÁ½¸ö¼ÆÊýÖÜÆÚ²úÉúÒ»¸ö²¨ÐÎÊä³öÖÜÆÚ£¬·Ö±æÂÊÌáÉýÒ»±¶¡¢ÆµÂʽµµÍÒ»±¶ - //4 ¶Ô³Æ»¥²¹Ä£Ê½£¬¶Ô³ÆÄ£Ê½ºÍ»¥²¹Ä£Ê½µÄ×ÛºÏ + __IO uint32_t MODE; //0 普通模å¼�,Aã€�B两路输出互相独立 + //1 互补模å¼�,Aã€�B两路输出都由PERAã€�HIGHA控制,B路输出与A路输出æž�性相å��,且DZAã€�DZB控制Aã€�B路输出上å�‡æ²¿æŽ¨è¿Ÿæ—¶é—´ + //2 å�•次模å¼�,å�Œæ™®é€šæ¨¡å¼�,但一个周期å�Žè‡ªåЍå�œæ­¢ + //3 对称模å¼�,Aã€�B两路输出互相独立,以两个计数周期产生一个波形输出周期,分辨率æ��å�‡ä¸€å€�ã€�频率é™�低一å€� + //4 对称互补模å¼�,对称模å¼�和互补模å¼�的综å�ˆ - __IO uint32_t PERA; //[15:0] ÖÜÆÚ + __IO uint32_t PERA; //[15:0] 周期 - __IO uint32_t HIGHA; //[15:0] ¸ßµçƽ³ÖÐøÊ±³¤ + __IO uint32_t HIGHA; //[15:0] 高电平æŒ�ç»­æ—¶é•¿ - __IO uint32_t DZA; //[9:0] ËÀÇø£¬¼´ÉÏÉýÑØÍÆ³Ùʱ³¤£¬±ØÐëСÓÚHIGHA + __IO uint32_t DZA; //[9:0] 死区,å�³ä¸Šå�‡æ²¿æŽ¨è¿Ÿæ—¶é•¿ï¼Œå¿…é¡»å°�于HIGHA __IO uint32_t PERB; @@ -2281,7 +2281,7 @@ typedef struct { __IO uint32_t DZB; - __IO uint32_t INIOUT; //Init Output level£¬³õʼÊä³öµçƽ + __IO uint32_t INIOUT; //Init Output level,åˆ�始输出电平 } PWM_TypeDef; @@ -2314,7 +2314,7 @@ typedef struct { uint32_t RESERVED[3]; - __IO uint32_t HALT; //ɲ³µ¿ØÖÆ + __IO uint32_t HALT; //刹车控制 __IO uint32_t CHEN; @@ -2343,7 +2343,7 @@ typedef struct { #define PWMG_ADTRG_VALUE_Pos 0 #define PWMG_ADTRG_VALUE_Msk (0xFFFF << PWMG_ADTRG0A_VALUE_Pos) -#define PWMG_ADTRG_EVEN_Pos 16 //1 żÊýÖÜÆÚÉúЧ 0 ÆæÊýÖÜÆÚÉúЧ +#define PWMG_ADTRG_EVEN_Pos 16 //1 å�¶æ•°å‘¨æœŸç”Ÿæ•ˆ 0 奇数周期生效 #define PWMG_ADTRG_EVEN_Msk (0x01 << PWMG_ADTRG0A_EVEN_Pos) #define PWMG_ADTRG_EN_Pos 17 #define PWMG_ADTRG_EN_Msk (0x01 << PWMG_ADTRG0A_EN_Pos) @@ -2362,13 +2362,13 @@ typedef struct { #define PWMG_HALT_PWM4_Msk (0x01 << PWMG_HALT_PWM4_Pos) #define PWMG_HALT_PWM5_Pos 6 #define PWMG_HALT_PWM5_Msk (0x01 << PWMG_HALT_PWM5_Pos) -#define PWMG_HALT_STOPCNT_Pos 7 //1 ɲ³µÊ±½«PWM¼ÆÊýÆ÷ÇåÁ㣬ֹͣ¼ÆÊý 0 ɲ³µÊ±£¬PWM¼ÆÊýÆ÷¼ÌÐø¼ÆÊý +#define PWMG_HALT_STOPCNT_Pos 7 //1 刹车时将PWM计数器清零,å�œæ­¢è®¡æ•° 0 刹车时,PWM计数器继续计数 #define PWMG_HALT_STOPCNT_Msk (0x01 << PWMG_HALT_STOPCNT_Pos) -#define PWMG_HALT_INLVL_Pos 8 //1 ɲ³µÊäÈë¸ßµçƽÓÐЧ +#define PWMG_HALT_INLVL_Pos 8 //1 刹车输入高电平有效 #define PWMG_HALT_INLVL_Msk (0x01 << PWMG_HALT_INLVL_Pos) -#define PWMG_HALT_OUTLVL_Pos 9 //1 ɲ³µ¹ý³ÌÖÐÊä³ö¸ßµçƽ +#define PWMG_HALT_OUTLVL_Pos 9 //1 刹车过程中输出高电平 #define PWMG_HALT_OUTLVL_Msk (0x01 << PWMG_HALT_OUTLVL_Pos) -#define PWMG_HALT_STAT_Pos 10 //1 ÕýÔÚɲ³µ +#define PWMG_HALT_STAT_Pos 10 //1 正在刹车 #define PWMG_HALT_STAT_Msk (0x01 << PWMG_HALT_STAT_Pos) #define PWMG_CHEN_PWM0A_Pos 0 @@ -2607,11 +2607,11 @@ typedef struct { typedef struct { __IO uint32_t EN; //[0] ENABLE - __IO uint32_t IE; //Ö»ÓÐΪ1ʱ£¬IF[CHx]ÔÚDMA´«Êä½áÊøÊ±²ÅÄܱäΪ1£¬·ñÔò½«Ò»Ö±±£³ÖÔÚ0 + __IO uint32_t IE; //å�ªæœ‰ä¸º1时,IF[CHx]在DMA传输结æ�Ÿæ—¶æ‰�能å�˜ä¸º1,å�¦åˆ™å°†ä¸€ç›´ä¿�æŒ�在0 - __IO uint32_t IM; //µ±Îª1ʱ£¬¼´Ê¹IF[CHx]Ϊ1£¬dma_intÒ²²»»áÒò´Ë±ä1 + __IO uint32_t IM; //当为1时,å�³ä½¿IF[CHx]为1,dma_int也ä¸�会因此å�˜1 - __IO uint32_t IF; //д1ÇåÁã + __IO uint32_t IF; //写1清零 uint32_t RESERVED[12]; @@ -2622,23 +2622,23 @@ typedef struct { __IO uint32_t SRC; - __IO uint32_t SRCSGADDR1; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t SRCSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t SRCSGADDR2; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t SRCSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t SRCSGADDR3; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t SRCSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t SRCSGLEN; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t SRCSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 __IO uint32_t DST; - __IO uint32_t DSTSGADDR1; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t DSTSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t DSTSGADDR2; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t DSTSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t DSTSGADDR3; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t DSTSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - __IO uint32_t DSTSGLEN; //Ö»ÔÚScatter GatherģʽÏÂʹÓà + __IO uint32_t DSTSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 uint32_t RESERVED[4]; } CH[3]; @@ -2696,16 +2696,16 @@ typedef struct { #define DMA_IF_CH7_Pos 7 #define DMA_IF_CH7_Msk (0x01 << DMA_IF_CH7_Pos) -#define DMA_CR_LEN_Pos 0 //´ËͨµÀ´«Êä×ܳ¤¶È£¬0¶ÔÓ¦1×Ö½Ú£¬×î´ó4096×Ö½Ú +#define DMA_CR_LEN_Pos 0 //此通é�“传输总长度,0对应1字节,最大4096字节 #define DMA_CR_LEN_Msk (0xFFF << DMA_CR_LEN_Pos) #define DMA_CR_RXEN_Pos 16 #define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos) #define DMA_CR_TXEN_Pos 17 #define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos) -#define DMA_CR_AUTORE_Pos 18 //Auto Restart, ͨµÀÔÚ´«ÊäÍê³Éºó£¬ÊÇ·ñ×Ô¶¯ÖØÐÂÆô¶¯ +#define DMA_CR_AUTORE_Pos 18 //Auto Restart, 通é�“在传输完æˆ�å�Žï¼Œæ˜¯å�¦è‡ªåЍé‡�æ–°å�¯åЍ #define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos) -#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 µØÖ·¹Ì¶¨ 1 µØÖ·µÝÔö 2 scatter gatherģʽ +#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 地å�€å›ºå®š 1 地å�€é€’增 2 scatter gather模å¼� #define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos) #define DMA_AM_DSTAM_Pos 8 #define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos) @@ -2722,7 +2722,7 @@ typedef struct { __I uint32_t SR; //Status Register - __I uint32_t IF; //Interrupt Flag£¬¶ÁÈ¡ÇåÁã + __I uint32_t IF; //Interrupt Flag,读å�–清零 __IO uint32_t IE; //Interrupt Enable @@ -2734,26 +2734,26 @@ typedef struct { uint32_t RESERVED2[3]; - __I uint32_t ALC; //Arbitration Lost Capture, ÖٲöªÊ§²¶×½ + __I uint32_t ALC; //Arbitration Lost Capture, 仲è£�丢失æ�•æ�‰ - __I uint32_t ECC; //Error code capture, ´íÎó´úÂë²¶×½ + __I uint32_t ECC; //Error code capture, 错误代ç �æ�•æ�‰ - __IO uint32_t EWLIM; //Error Warning Limit, ´íÎ󱨾¯ÏÞÖÆ + __IO uint32_t EWLIM; //Error Warning Limit, 错误报警é™�制 - __IO uint32_t RXERR; //RX´íÎó¼ÆÊý + __IO uint32_t RXERR; //RX错误计数 - __IO uint32_t TXERR; //TX´íÎó¼ÆÊý + __IO uint32_t TXERR; //TX错误计数 union { - struct { //ÔÚ¸´Î»Ê±¿É¶Áд£¬Õý³£¹¤×÷ģʽϲ»¿É·ÃÎÊ - __IO uint32_t ACR[4]; //Acceptance Check Register, ÑéÊռĴæÆ÷ + struct { //在å¤�ä½�æ—¶å�¯è¯»å†™ï¼Œæ­£å¸¸å·¥ä½œæ¨¡å¼�下ä¸�å�¯è®¿é—® + __IO uint32_t ACR[4]; //Acceptance Check Register, 验收寄存器 - __IO uint32_t AMR[4]; //Acceptance Mask Register, ÑéÊÕÆÁ±Î¼Ä´æÆ÷£»¶ÔӦλд0£¬ID±ØÐëºÍÑéÊռĴæÆ÷Æ¥Åä + __IO uint32_t AMR[4]; //Acceptance Mask Register, 验收å±�蔽寄存器;对应ä½�写0,ID必须和验收寄存器匹é…� uint32_t RESERVED[5]; } FILTER; - union { //ÔÚÕý³£¹¤×÷ģʽÏ¿ɶÁд£¬¸´Î»Ê±²»¿É·ÃÎÊ + union { //在正常工作模å¼�下å�¯è¯»å†™ï¼Œå¤�ä½�æ—¶ä¸�å�¯è®¿é—® struct { __O uint32_t INFO; @@ -2772,7 +2772,7 @@ typedef struct { uint32_t RESERVED3[66]; - struct { //TXFRAMEµÄ¶Á½Ó¿Ú + struct { //TXFRAME的读接å�£ __I uint32_t INFO; __I uint32_t DATA[12]; @@ -2784,11 +2784,11 @@ typedef struct { #define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos) #define CAN_CR_LOM_Pos 1 //Listen Only Mode #define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos) -#define CAN_CR_STM_Pos 2 //Self Test Mode, ´Ëģʽϼ´Ê¹Ã»ÓÐÓ¦´ð£¬CAN¿ØÖÆÆ÷Ò²¿ÉÒԳɹ¦·¢ËÍ +#define CAN_CR_STM_Pos 2 //Self Test Mode, 此模å¼�下å�³ä½¿æ²¡æœ‰åº”答,CAN控制器也å�¯ä»¥æˆ�功å�‘é€� #define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos) -#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 µ¥¸öÑéÊÕÂ˲¨Æ÷£¨32룩 0 Á½¸öÑéÊÕÂ˲¨Æ÷£¨16룩 +#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 å�•个验收滤波器(32ä½�) 0 两个验收滤波器(16ä½�) #define CAN_CR_AFM_Msk (0x01 << CAN_CR_AFM_Pos) -#define CAN_CR_SLEEP_Pos 4 //д1½øÈë˯Ãßģʽ£¬ÓÐ×ÜÏ߻»òÖжÏʱ»½ÐѲ¢×Ô¶¯ÇåÁã´Ëλ +#define CAN_CR_SLEEP_Pos 4 //写1进入ç�¡çœ æ¨¡å¼�,有总线活动或中断时唤醒并自动清零此ä½� #define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos) #define CAN_CMD_TXREQ_Pos 0 //Transmission Request @@ -2802,38 +2802,38 @@ typedef struct { #define CAN_CMD_SRR_Pos 4 //Self Reception Request #define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos) -#define CAN_SR_RXDA_Pos 0 //Receive Data Available£¬½ÓÊÕFIFOÖÐÓÐÍêÕûÏûÏ¢¿ÉÒÔ¶ÁÈ¡ +#define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消æ�¯å�¯ä»¥è¯»å�– #define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos) -#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun£¬Ð½ÓÊÕµÄÐÅÏ¢ÓÉÓÚ½ÓÊÕFIFOÒÑÂú¶ø¶ªµô +#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信æ�¯ç”±äºŽæŽ¥æ”¶FIFO已满而丢掉 #define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos) -#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release£¬0 ÕýÔÚ´¦ÀíÇ°ÃæµÄ·¢ËÍ£¬ÏÖÔÚ²»ÄÜдеÄÏûÏ¢ 1 ¿ÉÒÔдÈëеÄÏûÏ¢·¢ËÍ +#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处ç�†å‰�é�¢çš„å�‘é€�,现在ä¸�能写新的消æ�¯ 1 å�¯ä»¥å†™å…¥æ–°çš„æ¶ˆæ�¯å�‘é€� #define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos) -#define CAN_SR_TXOK_Pos 3 //Transmit OK£¬successfully completed +#define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed #define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos) -#define CAN_SR_RXBUSY_Pos 4 //Receive Busy£¬ÕýÔÚ½ÓÊÕ +#define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收 #define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos) -#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy£¬ÕýÔÚ·¢ËÍ +#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在å�‘é€� #define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos) -#define CAN_SR_ERRWARN_Pos 6 //1 ÖÁÉÙÒ»¸ö´íÎó¼ÆÊýÆ÷´ïµ½ Warning Limit +#define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit #define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos) -#define CAN_SR_BUSOFF_Pos 7 //1 CAN ¿ØÖÆÆ÷´¦ÓÚ×ÜÏ߹رÕ״̬£¬Ã»ÓвÎÓëµ½×ÜÏ߻ +#define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状æ€�,没有å�‚与到总线活动 #define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos) #define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA #define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos) -#define CAN_IF_TXBR_Pos 1 //µ±IE.TXBR=1ʱ£¬SR.TXBRÓÉ0±ä³É1½«ÖÃλ´Ëλ +#define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBRç”±0å�˜æˆ�1将置ä½�æ­¤ä½� #define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos) -#define CAN_IF_ERRWARN_Pos 2 //µ±IE.ERRWARN=1ʱ£¬SR.ERRWARN»òSR.BUSOFF 0-to-1 »ò 1-to-0½«ÖÃλ´Ëλ +#define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置ä½�æ­¤ä½� #define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos) #define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV #define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos) -#define CAN_IF_WKUP_Pos 4 //µ±IE.WKUP=1ʱ£¬ÔÚ˯ÃßģʽϵÄCAN¿ØÖÆÆ÷¼ì²âµ½×ÜÏ߻ʱӲ¼þÖÃλ +#define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在ç�¡çœ æ¨¡å¼�下的CAN控制器检测到总线活动时硬件置ä½� #define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos) #define CAN_IF_ERRPASS_Pos 5 // #define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos) -#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost£¬µ±IE.ARBLOST=1ʱ£¬CAN¿ØÖÆÆ÷¶ªÊ§Öٲñä³É½ÓÊÕ·½Ê±Ó²¼þÖÃλ +#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲è£�å�˜æˆ�接收方时硬件置ä½� #define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos) -#define CAN_IF_BUSERR_Pos 7 //µ±IE.BUSERR=1ʱ£¬CAN¿ØÖÆÆ÷¼ì²âµ½×ÜÏß´íÎóʱӲ¼þÖÃλ +#define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置ä½� #define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos) #define CAN_IE_RXDA_Pos 0 @@ -2853,68 +2853,68 @@ typedef struct { #define CAN_IE_BUSERR_Pos 7 #define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos) -#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler£¬CANʱ¼äµ¥Î»=2*Tsysclk*(BRP+1) +#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CANæ—¶é—´å�•ä½�=2*Tsysclk*(BRP+1) #define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos) #define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width #define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos) -#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANʱ¼äµ¥Î» * (TSEG1+1) +#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANæ—¶é—´å�•ä½� * (TSEG1+1) #define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos) -#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANʱ¼äµ¥Î» * (TSEG2+1) +#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANæ—¶é—´å�•ä½� * (TSEG2+1) #define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos) -#define CAN_BT1_SAM_Pos 7 //²ÉÑù´ÎÊý 0: sampled once 1: sampled three times +#define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times #define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos) #define CAN_ECC_SEGCODE_Pos 0 //Segment Code #define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos) #define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception #define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos) -#define CAN_ECC_ERRCODE_Pos 6 //Error Code£º0 Bit error 1 Form error 2 Stuff error 3 other error +#define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error #define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos) #define CAN_INFO_DLC_Pos 0 //Data Length Control #define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos) -#define CAN_INFO_RTR_Pos 6 //Remote Frame£¬1 Ô¶³ÌÖ¡ 0 Êý¾ÝÖ¡ +#define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 æ•°æ�®å¸§ #define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos) -#define CAN_INFO_FF_Pos 7 //Frame Format£¬0 ±ê×¼Ö¡¸ñʽ 1 À©Õ¹Ö¡¸ñʽ +#define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格å¼� 1 扩展帧格å¼� #define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos) typedef struct { - __IO uint32_t IE; //[0] Ϊ0µÄʱºò£¬IF[0]ά³ÖΪ0 + __IO uint32_t IE; //[0] 为0的时候,IF[0]ç»´æŒ�为0 - __IO uint32_t IF; //[0] µ±Íê³ÉÖ¸¶¨³¤¶ÈµÄÊý¾Ý´«ÊäʱÖÃ1£¬Ð´1ÇåÁã + __IO uint32_t IF; //[0] 当完æˆ�指定长度的数æ�®ä¼ è¾“æ—¶ç½®1,写1清零 - __IO uint32_t IM; //[0] µ±¸Ã¼Ä´æÆ÷Ϊ1ʱ£¬LCDCµÄÖжϲ»»áÊä³ö¸øÏµÍ³µÄÖжϿØÖƼĴæÆ÷ + __IO uint32_t IM; //[0] 当该寄存器为1时,LCDC的中断ä¸�会输出给系统的中断控制寄存器 __IO uint32_t START; - __IO uint32_t SRCADDR; //Êý¾ÝÔ´µØÖ·¼Ä´æÆ÷£¬±ØÐë×Ö¶ÔÆë£¨¼´µØÖ·µÄµÍ2λ±ØÐëÊÇ0£© + __IO uint32_t SRCADDR; //æ•°æ�®æº�地å�€å¯„存器,必须字对é½�(å�³åœ°å�€çš„低2ä½�必须是0) __IO uint32_t CR0; __IO uint32_t CR1; - __IO uint32_t PRECMDV; //ÔÚMPU½Ó¿ÚÖУ¬·¢ËÍÊý¾Ýǰ£¬RSÀ­µÍµÄÄÇÒ»ÅÄ£¬Êý¾Ý×ÜÏßÉϵÄÖµ + __IO uint32_t PRECMDV; //在MPU接å�£ä¸­ï¼Œå�‘é€�æ•°æ�®å‰�,RS拉低的那一æ‹�,数æ�®æ€»çº¿ä¸Šçš„值 } LCD_TypeDef; -#define LCD_START_GO_Pos 1 //д1¿ªÊ¼´«ÊäÊý¾Ý£¬Êý¾Ý´«Êä½áÊøºó×Ô¶¯ÇåÁã +#define LCD_START_GO_Pos 1 //写1开始传输数æ�®ï¼Œæ•°æ�®ä¼ è¾“结æ�Ÿå�Žè‡ªåŠ¨æ¸…é›¶ #define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos) #define LCD_START_BURST_Pos 2 #define LCD_START_BURST_Msk (0x01 << LCD_START_BURST_Pos) -#define LCD_CR0_VPIX_Pos 0 //µ±portraitΪ0ʱ£¬±íʾ´¹Ö±·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ767 - //µ±portraitΪ1ʱ£¬±íʾˮƽ·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ767 +#define LCD_CR0_VPIX_Pos 0 //当portrait为0时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为767 + //当portrait为1时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为767 #define LCD_CR0_VPIX_Msk (0x3FF << LCD_CR0_VPIX_Pos) -#define LCD_CR0_HPIX_Pos 10 //µ±portraitΪ0ʱ£¬±íʾˮƽ·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ1023 - //µ±portraitΪ1ʱ£¬±íʾ´¹Ö±·½ÏòµÄÏñËØ¸öÊý£¬0±íʾ1¸ö£¬×î´óΪ1023 +#define LCD_CR0_HPIX_Pos 10 //当portrait为0时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为1023 + //当portrait为1时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为1023 #define LCD_CR0_HPIX_Msk (0x3FF << LCD_CR0_HPIX_Pos) -#define LCD_CR0_DCLK_Pos 20 //0 DOTCLKÒ»Ö±·­×ª 1 DOTCLKÔÚ¿ÕÏÐʱͣÔÚ1 +#define LCD_CR0_DCLK_Pos 20 //0 DOTCLK一直翻转 1 DOTCLK在空闲时å�œåœ¨1 #define LCD_CR0_DCLK_Msk (0x01 << LCD_CR0_DCLK_Pos) -#define LCD_CR0_HLOW_Pos 21 //Êä³öHSYNCµÍµçƽ³ÖÐø¶àÉÙ¸öDOTCLKÖÜÆÚ£¬0±íʾ1¸öÖÜÆÚ +#define LCD_CR0_HLOW_Pos 21 //输出HSYNC低电平æŒ�续多少个DOTCLK周期,0表示1个周期 #define LCD_CR0_HLOW_Msk (0x03 << LCD_CR0_HLOW_Pos) #define LCD_CR1_VFP_Pos 1 @@ -2925,9 +2925,9 @@ typedef struct { #define LCD_CR1_HFP_Msk (0x1F << LCD_CR1_HFP_Pos) #define LCD_CR1_HBP_Pos 14 #define LCD_CR1_HBP_Msk (0x7F << LCD_CR1_HBP_Pos) -#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLKÏà¶ÔÓÚÄ£¿éʱÖӵķ֯µ±È£¬0±íʾ2·ÖƵ£¬1±íʾ4·ÖƵ ... +#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLK相对于模å�—时钟的分频比,0表示2分频,1表示4分频 ... #define LCD_CR1_DCLKDIV_Msk (0x1F << LCD_CR1_DCLKDIV_Pos) -#define LCD_CR1_DCLKINV_Pos 26 //1 Êä³öDOTCLK·´Ïò£¬Ó¦ÓÃÓÚÓÃDOTCLKϽµÑزÉÑùÊý¾ÝµÄÆÁ +#define LCD_CR1_DCLKINV_Pos 26 //1 输出DOTCLKå��å�‘,应用于用DOTCLK下é™�沿采样数æ�®çš„å±� #define LCD_CR1_DCLKINV_Msk (0x01 << LCD_CR1_DCLKINV_Pos) @@ -2966,9 +2966,9 @@ typedef struct { } SDIO_TypeDef; -#define SDIO_BLK_SIZE_Pos 0 //0x200 512×Ö½Ú 0x400 1024×Ö½Ú 0x800 2048×Ö½Ú +#define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节 #define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos) -#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1¿é 2 2¿é ... ... +#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1å�— 2 2å�— ... ... #define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos) #define SDIO_CMD_DMAEN_Pos 0 @@ -2981,7 +2981,7 @@ typedef struct { #define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos) #define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block #define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos) -#define SDIO_CMD_RESPTYPE_Pos 16 //ÏìÓ¦ÀàÐÍ£¬0 ÎÞÏìÓ¦ 1 136λÏìÓ¦ 2 48λÏìÓ¦ 3 48λÏìÓ¦£¬Busy after response +#define SDIO_CMD_RESPTYPE_Pos 16 //å“�应类型,0 æ— å“�应 1 136ä½�å“�应 2 48ä½�å“�应 3 48ä½�å“�应,Busy after response #define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos) #define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable #define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos) @@ -2991,7 +2991,7 @@ typedef struct { #define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos) #define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT #define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos) -#define SDIO_CMD_CMDINDX_Pos 24 //Command Index£¬CMD0-63¡¢ACMD0-63 +#define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63ã€�ACMD0-63 #define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos) #define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode @@ -3000,7 +3000,7 @@ typedef struct { #define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos) #define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted #define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos) -#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITλ 0 SD_DetectÒý½Å +#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITä½� 0 SD_Detect引脚 #define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos) #define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off #define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos) @@ -3013,7 +3013,7 @@ typedef struct { #define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos) #define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable #define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos) -#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ²»·ÖƵ 0x01 2·ÖƵ 0x02 4·ÖƵ 0x04 8·ÖƵ 0x08 16·ÖƵ ... 0x80 256·ÖƵ +#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ä¸�分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频 #define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos) #define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27 #define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos) @@ -3190,11 +3190,11 @@ typedef struct { } SRAMC_TypeDef; -#define SRAMC_CR_RWTIME_Pos 0 //¶Áд²Ù×÷³ÖÐø¶àÉÙ¸öʱÖÓÖÜÆÚ¡£0±íʾ1¸öʱÖÓÖÜÆÚ¡£×îСÉèÖÃΪ4 +#define SRAMC_CR_RWTIME_Pos 0 //读写æ“�作æŒ�续多少个时钟周期。0表示1个时钟周期。最å°�设置为4 #define SRAMC_CR_RWTIME_Msk (0x0F << SRAMC_CR_RWTIME_Pos) -#define SRAMC_CR_BYTEIF_Pos 4 //ÍⲿSRAMÊý¾Ý¿í¶È£¬0 16λ 1 8λ +#define SRAMC_CR_BYTEIF_Pos 4 //外部SRAMæ•°æ�®å®½åº¦ï¼Œ0 16ä½� 1 8ä½� #define SRAMC_CR_BYTEIF_Msk (0x01 << SRAMC_CR_BYTEIF_Pos) -#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]ΪµØÖ·Ïß 0 ADDR[23]Ϊ¸ß×Ö½ÚʹÄÜ£¬ADDR[22]ΪµÍ×Ö½ÚʹÄÜ +#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]为地å�€çº¿ 0 ADDR[23]为高字节使能,ADDR[22]为低字节使能 #define SRAMC_CR_HBLBDIS_Msk (0x01 << SRAMC_CR_HBLBDIS_Pos) @@ -3206,17 +3206,17 @@ typedef struct { __IO uint32_t REFRESH; - __IO uint32_t NOPNUM; //[15:0] ³õʼ»¯Íê³Éºó£¬ÔÚÕý³£²Ù×÷֮ǰ£¬·¢ËͶàÉÙ¸öNOPÃüÁî + __IO uint32_t NOPNUM; //[15:0] åˆ�始化完æˆ�å�Žï¼Œåœ¨æ­£å¸¸æ“�作之å‰�,å�‘é€�多少个NOP命令 __IO uint32_t LATCH; - __IO uint32_t REFDONE; //[0] Frefresh Done£¬Éϵç³õʼ»¯Íê³É + __IO uint32_t REFDONE; //[0] Frefresh Done,上电åˆ�始化完æˆ� } SDRAMC_TypeDef; -#define SDRAMC_CR0_BURSTLEN_Pos 0 //±ØÐëÈ¡2£¬±íʾBurst LengthΪ4 +#define SDRAMC_CR0_BURSTLEN_Pos 0 //å¿…é¡»å�–2,表示Burst Length为4 #define SDRAMC_CR0_BURSTLEN_Msk (0x07 << SDRAMC_CR0_BURSTLEN_Pos) -#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency£¬ 2 2 3 3 +#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency, 2 2 3 3 #define SDRAMC_CR0_CASDELAY_Msk (0x07 << SDRAMC_CR0_CASDELAY_Pos) #define SDRAMC_CR1_TRP_Pos 0 @@ -3231,15 +3231,15 @@ typedef struct { #define SDRAMC_CR1_TRRD_Msk (0x03 << SDRAMC_CR1_TRRD_Pos) #define SDRAMC_CR1_TMRD_Pos 15 #define SDRAMC_CR1_TMRD_Msk (0x07 << SDRAMC_CR1_TMRD_Pos) -#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMCµÄ½Ó¿ÚÊý¾Ýλ¿í£¬1 32bit 0 16bit +#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMC的接å�£æ•°æ�®ä½�宽,1 32bit 0 16bit #define SDRAMC_CR1_32BIT_Msk (0x01 << SDRAMC_CR1_32BIT_Pos) -#define SDRAMC_CR1_BANK_Pos 19 //SDRAMÿ¸ö¿ÅÁ£Óм¸¸öbank£¬0 2 banks 1 4 banks +#define SDRAMC_CR1_BANK_Pos 19 //SDRAMæ¯�个颗粒有几个bank,0 2 banks 1 4 banks #define SDRAMC_CR1_BANK_Msk (0x01 << SDRAMC_CR1_BANK_Pos) -#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM¿ÅÁ£µÄλ¿í£¬1 32bit 0 16bit +#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM颗粒的ä½�宽,1 32bit 0 16bit #define SDRAMC_CR1_CELL32BIT_Msk (0x01 << SDRAMC_CR1_CELL32BIT_Pos) -#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM¿ÅÁ£µÄÈÝÁ¿£¬0 64Mb 1 128Mb 2 256Mb 3 16Mb +#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM颗粒的容é‡�,0 64Mb 1 128Mb 2 256Mb 3 16Mb #define SDRAMC_CR1_CELLSIZE_Msk (0x03 << SDRAMC_CR1_CELLSIZE_Pos) -#define SDRAMC_CR1_HIGHSPEED_Pos 23 //µ±hclk´óÓÚ100MHzʱ£¬Õâһλ±ØÐëÅäÖÃΪ1£¬·ñÔòΪ0 +#define SDRAMC_CR1_HIGHSPEED_Pos 23 //当hclk大于100MHz时,这一ä½�å¿…é¡»é…�置为1,å�¦åˆ™ä¸º0 #define SDRAMC_CR1_HIGHSPEED_Msk (0x01 << SDRAMC_CR1_HIGHSPEED_Pos) #define SDRAMC_REFRESH_RATE_Pos 0 @@ -3247,9 +3247,9 @@ typedef struct { #define SDRAMC_REFRESH_EN_Pos 12 #define SDRAMC_REFRESH_EN_Msk (0x01 << SDRAMC_REFRESH_EN_Pos) -#define SDRAMC_LATCH_INEDGE_Pos 0 //ÄĸöÑØÀ´Ëø´æ´ÓSDRAMÖжÁ»ØµÄÊý¾Ý£¬0 ÉÏÉýÑØ 1 ϽµÑØ +#define SDRAMC_LATCH_INEDGE_Pos 0 //哪个沿æ�¥é”�存从SDRAM中读回的数æ�®ï¼Œ0 上å�‡æ²¿ 1 下é™�沿 #define SDRAMC_LATCH_INEDGE_Msk (0x01 << SDRAMC_LATCH_INEDGE_Pos) -#define SDRAMC_LATCH_OUTEDGE_Pos 1 //ÄĸöÑØÈ¥Ëø´æË͸øSDRAMµÄÊý¾Ý£¬1 ÉÏÉýÑØ 0 ϽµÑØ +#define SDRAMC_LATCH_OUTEDGE_Pos 1 //哪个沿去é”�å­˜é€�ç»™SDRAM的数æ�®ï¼Œ1 上å�‡æ²¿ 0 下é™�沿 #define SDRAMC_LATCH_OUTEDGE_Msk (0x01 << SDRAMC_LATCH_OUTEDGE_Pos) #define SDRAMC_LATCH_WAITST_Pos 2 #define SDRAMC_LATCH_WAITST_Msk (0x01 << SDRAMC_LATCH_WAITST_Pos) @@ -3260,7 +3260,7 @@ typedef struct { typedef struct { __IO uint32_t IE; - __IO uint32_t IF; //д1ÇåÁã + __IO uint32_t IF; //写1清零 __IO uint32_t IM; @@ -3287,16 +3287,16 @@ typedef struct { #define NORFLC_IM_TIMEOUT_Pos 1 #define NORFLC_IM_TIMEOUT_Msk (0x01 << NORFLC_IM_TIMEOUT_Pos) -#define NORFLC_CR_RDTIME_Pos 0 //OenϽµÑغó¶àÉÙ¸öʱÖÓÖÜÆÚºó²ÉÑù¶Á»ØµÄÊý¾Ý¡£0±íʾ1¸öʱÖÓÖÜÆÚ +#define NORFLC_CR_RDTIME_Pos 0 //Oen下é™�沿å�Žå¤šå°‘个时钟周期å�Žé‡‡æ ·è¯»å›žçš„æ•°æ�®ã€‚0表示1个时钟周期 #define NORFLC_CR_RDTIME_Msk (0x1F << NORFLC_CR_RDTIME_Pos) -#define NORFLC_CR_WRTIME_Pos 5 //Êä³öWenµÄµÍµçƽ¿í¶È¡£0±íʾ1¸öʱÖÓÖÜÆÚ +#define NORFLC_CR_WRTIME_Pos 5 //输出Wen的低电平宽度。0表示1个时钟周期 #define NORFLC_CR_WRTIME_Msk (0x07 << NORFLC_CR_WRTIME_Pos) -#define NORFLC_CR_BYTEIF_Pos 8 //ÍⲿNOR FLASHÊý¾Ý¿í¶È£¬1 8λ 0 16λ +#define NORFLC_CR_BYTEIF_Pos 8 //外部NOR FLASHæ•°æ�®å®½åº¦ï¼Œ1 8ä½� 0 16ä½� #define NORFLC_CR_BYTEIF_Msk (0x01 << NORFLC_CR_BYTEIF_Pos) -#define NORFLC_CMD_DATA_Pos 0 //ÔÚPROGRAMÃüÁîÖУ¬DATAÊÇҪдÈëNOR FLASHµÄÊý¾Ý£»ÔÚREADÃüÁîÖУ¬DATAÊÇ´ÓNOR FLASH¶Á»ØµÄÊý¾Ý +#define NORFLC_CMD_DATA_Pos 0 //在PROGRAM命令中,DATA是è¦�写入NOR FLASH的数æ�®ï¼›åœ¨READ命令中,DATA是从NOR FLASH读回的数æ�® #define NORFLC_CMD_DATA_Msk (0xFFFF << NORFLC_CMD_DATA_Pos) -#define NORFLC_CMD_CMD_Pos 16 //ÐèÒªÖ´ÐеÄÃüÁ0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE +#define NORFLC_CMD_CMD_Pos 16 //需è¦�执行的命令,0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE #define NORFLC_CMD_CMD_Msk (0x07 << NORFLC_CMD_CMD_Pos) @@ -3315,44 +3315,44 @@ typedef struct { #define CRC_CR_EN_Pos 0 #define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos) -#define CRC_CR_OREV_Pos 1 //Êä³ö½á¹ûÊÇ·ñ·­×ª +#define CRC_CR_OREV_Pos 1 //输出结果是å�¦ç¿»è½¬ #define CRC_CR_OREV_Msk (0x01 << CRC_CR_OREV_Pos) -#define CRC_CR_ONOT_Pos 2 //Êä³ö½á¹ûÊÇ·ñÈ¡·´ +#define CRC_CR_ONOT_Pos 2 //输出结果是å�¦å�–å�� #define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos) #define CRC_CR_CRC16_Pos 3 //1 CRC16 0 CRC32 #define CRC_CR_CRC16_Msk (0x01 << CRC_CR_CRC16_Pos) -#define CRC_CR_IBITS_Pos 4 //ÊäÈëÊý¾ÝÓÐЧλÊý 0 32λ 1 16λ 2 8λ +#define CRC_CR_IBITS_Pos 4 //输入数æ�®æœ‰æ•ˆä½�æ•° 0 32ä½� 1 16ä½� 2 8ä½� #define CRC_CR_IBITS_Msk (0x03 << CRC_CR_IBITS_Pos) typedef struct { - __IO uint32_t MINSEC; //·ÖÃë¼ÆÊý + __IO uint32_t MINSEC; //分秒计数 - __IO uint32_t DATHUR; //ÈÕʱ¼ÆÊý + __IO uint32_t DATHUR; //日时计数 - __IO uint32_t MONDAY; //ÔÂÖܼÆÊý + __IO uint32_t MONDAY; //月周计数 - __IO uint32_t YEAR; //[11:0] Äê¼ÆÊý£¬Ö§³Ö1901-2199 + __IO uint32_t YEAR; //[11:0] 年计数,支æŒ�1901-2199 - __IO uint32_t MINSECAL; //·ÖÃëÄÖÁåÉèÖà + __IO uint32_t MINSECAL; //分秒闹铃设置 - __IO uint32_t DAYHURAL; //ÖÜʱÄÖÁåÉèÖà + __IO uint32_t DAYHURAL; //周时闹铃设置 - __IO uint32_t LOAD; //½«ÉèÖüĴæÆ÷ÖеÄֵͬ²½µ½RTCÖУ¬Í¬²½Íê³É×Ô¶¯ÇåÁã + __IO uint32_t LOAD; //将设置寄存器中的值å�Œæ­¥åˆ°RTC中,å�Œæ­¥å®Œæˆ�自动清零 __IO uint32_t IE; - __IO uint32_t IF; //д1ÇåÁã + __IO uint32_t IF; //写1清零 - __IO uint32_t EN; //[0] 1 RTCʹÄÜ + __IO uint32_t EN; //[0] 1 RTC使能 - __IO uint32_t CFGABLE; //[0] 1 RTC¿ÉÅäÖà + __IO uint32_t CFGABLE; //[0] 1 RTCå�¯é…�ç½® - __IO uint32_t TRIM; //ʱÖÓµ÷Õû + __IO uint32_t TRIM; //时钟调整 - __IO uint32_t TRIMM; //ʱÖÓ΢µ÷Õû + __IO uint32_t TRIMM; //时钟微调整 } RTC_TypeDef; @@ -3361,44 +3361,44 @@ typedef struct { #define RTC_LOAD_ALARM_Pos 1 #define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos) -#define RTC_MINSEC_SEC_Pos 0 //Ãë¼ÆÊý£¬È¡Öµ0--59 +#define RTC_MINSEC_SEC_Pos 0 //秒计数,å�–值0--59 #define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos) -#define RTC_MINSEC_MIN_Pos 6 //·ÖÖÓ¼ÆÊý£¬È¡Öµ0--59 +#define RTC_MINSEC_MIN_Pos 6 //分钟计数,å�–值0--59 #define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos) -#define RTC_DATHUR_HOUR_Pos 0 //Сʱ¼ÆÊý£¬È¡Öµ0--23 +#define RTC_DATHUR_HOUR_Pos 0 //å°�时计数,å�–值0--23 #define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos) -#define RTC_DATHUR_DATE_Pos 5 //date of month£¬È¡Öµ1--31 +#define RTC_DATHUR_DATE_Pos 5 //date of month,å�–值1--31 #define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos) -#define RTC_MONDAY_DAY_Pos 0 //day of week£¬È¡Öµ0--6 +#define RTC_MONDAY_DAY_Pos 0 //day of week,å�–值0--6 #define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos) -#define RTC_MONDAY_MON_Pos 3 //Ô·ݼÆÊý£¬È¡Öµ1--12 +#define RTC_MONDAY_MON_Pos 3 //月份计数,å�–值1--12 #define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos) -#define RTC_MINSECAL_SEC_Pos 0 //ÄÖÖÓÃëÉèÖà +#define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置 #define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos) -#define RTC_MINSECAL_MIN_Pos 6 //ÄÖÖÓ·ÖÖÓÉèÖà +#define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置 #define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos) -#define RTC_DAYHURAL_HOUR_Pos 0 //ÄÖÖÓСʱÉèÖà +#define RTC_DAYHURAL_HOUR_Pos 0 //闹钟å°�时设置 #define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos) -#define RTC_DAYHURAL_SUN_Pos 5 //ÖÜÈÕÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效 #define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos) -#define RTC_DAYHURAL_MON_Pos 6 //ÖÜÒ»ÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效 #define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos) -#define RTC_DAYHURAL_TUE_Pos 7 //ÖܶþÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效 #define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos) -#define RTC_DAYHURAL_WED_Pos 8 //ÖÜÈýÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效 #define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos) -#define RTC_DAYHURAL_THU_Pos 9 //ÖÜËÄÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效 #define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos) -#define RTC_DAYHURAL_FRI_Pos 10 //ÖÜÎåÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效 #define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos) -#define RTC_DAYHURAL_SAT_Pos 11 //ÖÜÁùÄÖÖÓÓÐЧ +#define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效 #define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos) -#define RTC_IE_SEC_Pos 0 //ÃëÖжÏʹÄÜ +#define RTC_IE_SEC_Pos 0 //秒中断使能 #define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos) #define RTC_IE_MIN_Pos 1 #define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos) @@ -3409,7 +3409,7 @@ typedef struct { #define RTC_IE_ALARM_Pos 4 #define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos) -#define RTC_IF_SEC_Pos 0 //д1ÇåÁã +#define RTC_IF_SEC_Pos 0 //写1清零 #define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos) #define RTC_IF_MIN_Pos 1 #define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos) @@ -3420,13 +3420,13 @@ typedef struct { #define RTC_IF_ALARM_Pos 4 #define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos) -#define RTC_TRIM_ADJ_Pos 0 //ÓÃÓÚµ÷ÕûBASECNTµÄ¼ÆÊýÖÜÆÚ£¬Ä¬ÈÏΪ32768£¬Èç¹ûDECΪ1£¬Ôò¼ÆÊýÖÜÆÚµ÷ÕûΪ32768-ADJ£¬·ñÔòµ÷ÕûΪ32768+ADJ +#define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,å�¦åˆ™è°ƒæ•´ä¸º32768+ADJ #define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos) #define RTC_TRIM_DEC_Pos 8 #define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos) -#define RTC_TRIMM_CYCLE_Pos 0 //ÓÃÓÚ¼ÆÊýÖÜÆÚ΢µ÷£¬Èç¹ûINCΪ1£¬ÔòµÚn¸ö¼ÆÊýÖÜÆÚµ÷ÕûΪ(32768¡ÀADJ)+1,·ñÔòµ÷ÕûΪ(32768¡ÀADJ)-1 - //cycles=0ʱ£¬²»½øÐÐ΢µ÷Õû£»cycles=1£¬ÔònΪ2£»cycles=7£¬ÔònΪ8£»ÒÔ´ËÀàÍÆ +#define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,å�¦åˆ™è°ƒæ•´ä¸º(32768±ADJ)-1 + //cycles=0时,ä¸�进行微调整;cycles=1,则n为2ï¼›cycles=7,则n为8;以此类推 #define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos) #define RTC_TRIMM_INC_Pos 3 #define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos) @@ -3435,15 +3435,15 @@ typedef struct { typedef struct { - __IO uint32_t LOAD; //ι¹·Ê¹¼ÆÊýÆ÷×°ÔØLOADÖµ + __IO uint32_t LOAD; //喂狗使计数器装载LOAD值 __I uint32_t VALUE; __IO uint32_t CR; - __IO uint32_t IF; //¼ÆÊýµ½0ʱӲ¼þÖÃ룬Èí¼þд1Çå³ý±êÖ¾ + __IO uint32_t IF; //计数到0时硬件置ä½�,软件写1清除标志 - __IO uint32_t FEED; //д0x55ι¹· + __IO uint32_t FEED; //写0x55å–‚ç‹— } WDT_TypeDef; diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s b/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s index 72562473f2..aa7fb9c2cf 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s @@ -1,10 +1,10 @@ ;****************************************************************************************************************************************** -; ÎļþÃû³Æ: startup_SWM320.s -; ¹¦ÄÜ˵Ã÷: SWM2400µ¥Æ¬»úµÄÆô¶¯Îļþ -; ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -; ×¢ÒâÊÂÏî: -; °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -; Éý¼¶¼Ç¼: +; 文件å��ç§°: startup_SWM320.s +; 功能说明: SWM2400å�•片机的å�¯åŠ¨æ–‡ä»¶ +; 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +; 注æ„�事项: +; 版本日期: V1.1.0 2017å¹´10月25æ—¥ +; å�‡çº§è®°å½•: ; ; ;****************************************************************************************************************************************** diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c index a99fa78fc9..08f5a59bc3 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c @@ -1,10 +1,10 @@ /****************************************************************************************************************************************** -* ÎļþÃû³Æ: system_SWM320.c -* ¹¦ÄÜ˵Ã÷: SWM320µ¥Æ¬»úµÄʱÖÓÉèÖà -* ¼¼ÊõÖ§³Ö: http://www.synwit.com.cn/e/tool/gbook/?bid=1 -* ×¢ÒâÊÂÏî: -* °æ±¾ÈÕÆÚ: V1.1.0 2017Äê10ÔÂ25ÈÕ -* Éý¼¶¼Ç¼: +* 文件å��ç§°: system_SWM320.c +* 功能说明: SWM320å�•片机的时钟设置 +* 技术支æŒ�: http://www.synwit.com.cn/e/tool/gbook/?bid=1 +* 注æ„�事项: +* 版本日期: V1.1.0 2017å¹´10月25æ—¥ +* å�‡çº§è®°å½•: * * ******************************************************************************************************************************************* @@ -23,13 +23,13 @@ /****************************************************************************************************************************************** - * ϵͳʱÖÓÉ趨 + * 系统时钟设定 *****************************************************************************************************************************************/ -#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_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 @@ -40,16 +40,16 @@ #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 +/********************************** 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 SYS_PLL_SRC SYS_CLK_20MHz //å�¯å�–值SYS_CLK_20MHzã€�SYS_CLK_XTAL #define PLL_IN_DIV 5 @@ -69,11 +69,11 @@ uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: -* ¹¦ÄÜ˵Ã÷: This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed -* Êä Èë: -* Êä ³ö: -* ×¢ÒâÊÂÏî: +* 函数å��ç§°: +* 功能说明: This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed +* 输 å…¥: +* 输 出: +* 注æ„�事项: ******************************************************************************************************************************************/ void SystemCoreClockUpdate(void) { @@ -122,11 +122,11 @@ void SystemCoreClockUpdate(void) } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: -* ¹¦ÄÜ˵Ã÷: The necessary initializaiton of systerm -* Êä Èë: -* Êä ³ö: -* ×¢ÒâÊÂÏî: +* 函数å��ç§°: +* 功能说明: The necessary initializaiton of systerm +* 输 å…¥: +* 输 出: +* 注æ„�事项: ******************************************************************************************************************************************/ void SystemInit(void) { @@ -136,23 +136,23 @@ void SystemInit(void) switch(SYS_CLK) { - case SYS_CLK_20MHz: //0 ÄÚ²¿¸ßƵ20MHz RCÕñµ´Æ÷ + case SYS_CLK_20MHz: //0 内部高频20MHz RC振è�¡å™¨ switchCLK_20MHz(); break; - case SYS_CLK_40MHz: //1 ÄÚ²¿¸ßƵ40MHz RCÕñµ´Æ÷ + case SYS_CLK_40MHz: //1 内部高频40MHz RC振è�¡å™¨ switchCLK_40MHz(); break; - case SYS_CLK_32KHz: //2 ÄÚ²¿µÍƵ32KHz RCÕñµ´Æ÷ + case SYS_CLK_32KHz: //2 内部低频32KHz RC振è�¡å™¨ switchCLK_32KHz(); break; - case SYS_CLK_XTAL: //3 Íⲿ¾§ÌåÕñµ´Æ÷£¨2-30MHz£© + case SYS_CLK_XTAL: //3 外部晶体振è�¡å™¨ï¼ˆ2-30MHz) switchCLK_XTAL(); break; - case SYS_CLK_PLL: //4 ƬÄÚËøÏà»·Êä³ö + case SYS_CLK_PLL: //4 片内é”�相环输出 switchCLK_PLL(); break; } @@ -276,5 +276,5 @@ void PLLInit(void) SYS->PLLCR &= ~(1 << SYS_PLLCR_OFF_Pos); - while(SYS->PLLLOCK == 0); //µÈ´ýPLLËø¶¨ + while(SYS->PLLLOCK == 0); //等待PLLé”�定 } -- cgit v1.3.1 From 2c052969488d39d918b30699917c4036c11d209c Mon Sep 17 00:00:00 2001 From: yanmowudi Date: Thu, 6 May 2021 10:42:41 +0800 Subject: format utf-8 --- bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h | 6634 ++++++++++---------- .../DeviceSupport/startup/arm/startup_SWM320.s | 30 +- .../DeviceSupport/startup/gcc/startup_SWM320.s | 2 +- .../DeviceSupport/startup/iar/startup_SWM320.s | 2 +- .../libraries/CMSIS/DeviceSupport/system_SWM320.c | 397 +- .../libraries/CMSIS/DeviceSupport/system_SWM320.h | 28 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_adc.c | 469 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_adc.h | 146 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_can.c | 925 ++- .../libraries/SWM320_StdPeriph_Driver/SWM320_can.h | 216 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_crc.c | 59 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_crc.h | 19 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_dma.c | 164 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_dma.h | 23 +- .../SWM320_StdPeriph_Driver/SWM320_exti.c | 172 +- .../SWM320_StdPeriph_Driver/SWM320_exti.h | 26 +- .../SWM320_StdPeriph_Driver/SWM320_flash.c | 74 +- .../SWM320_StdPeriph_Driver/SWM320_flash.h | 4 - .../SWM320_StdPeriph_Driver/SWM320_gpio.c | 577 +- .../SWM320_StdPeriph_Driver/SWM320_gpio.h | 34 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c | 332 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h | 44 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c | 104 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h | 119 +- .../SWM320_StdPeriph_Driver/SWM320_norflash.c | 257 +- .../SWM320_StdPeriph_Driver/SWM320_norflash.h | 38 +- .../SWM320_StdPeriph_Driver/SWM320_port.c | 367 +- .../SWM320_StdPeriph_Driver/SWM320_port.h | 828 ++- .../libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c | 967 +-- .../libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h | 97 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c | 274 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h | 116 +- .../SWM320_StdPeriph_Driver/SWM320_sdio.c | 934 +-- .../SWM320_StdPeriph_Driver/SWM320_sdio.h | 206 +- .../SWM320_StdPeriph_Driver/SWM320_sdram.c | 111 +- .../SWM320_StdPeriph_Driver/SWM320_sdram.h | 143 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_spi.c | 276 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_spi.h | 149 +- .../SWM320_StdPeriph_Driver/SWM320_sram.c | 45 +- .../SWM320_StdPeriph_Driver/SWM320_sram.h | 46 +- .../SWM320_StdPeriph_Driver/SWM320_timr.c | 521 +- .../SWM320_StdPeriph_Driver/SWM320_timr.h | 35 +- .../SWM320_StdPeriph_Driver/SWM320_uart.c | 402 +- .../SWM320_StdPeriph_Driver/SWM320_uart.h | 132 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c | 63 +- .../libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h | 21 +- 46 files changed, 8358 insertions(+), 8270 deletions(-) diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h index 423290614f..5aa6db83fa 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/SWM320.h @@ -8,83 +8,83 @@ */ typedef enum IRQn { -/****** Cortex-M0 Processor Exceptions Numbers **********************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ - -/****** Cortex-M4 specific Interrupt Numbers ************************************************/ - GPIOA0_IRQn = 0, - GPIOA1_IRQn = 1, - GPIOA2_IRQn = 2, - GPIOA3_IRQn = 3, - GPIOA4_IRQn = 4, - GPIOA5_IRQn = 5, - GPIOA6_IRQn = 6, - GPIOA7_IRQn = 7, - GPIOB0_IRQn = 8, - GPIOB1_IRQn = 9, - GPIOB2_IRQn = 10, - GPIOB3_IRQn = 11, - GPIOB4_IRQn = 12, - GPIOB5_IRQn = 13, - GPIOB6_IRQn = 14, - GPIOB7_IRQn = 15, - GPIOC0_IRQn = 16, - GPIOC1_IRQn = 17, - GPIOC2_IRQn = 18, - GPIOC3_IRQn = 19, - GPIOC4_IRQn = 20, - GPIOC5_IRQn = 21, - GPIOC6_IRQn = 22, - GPIOC7_IRQn = 23, - GPIOM0_IRQn = 24, - GPIOM1_IRQn = 25, - GPIOM2_IRQn = 26, - GPIOM3_IRQn = 27, - GPIOM4_IRQn = 28, - GPIOM5_IRQn = 29, - GPIOM6_IRQn = 30, - GPIOM7_IRQn = 31, - DMA_IRQn = 32, - LCD_IRQn = 33, - NORFLC_IRQn = 34, - CAN_IRQn = 35, - PULSE_IRQn = 36, - WDT_IRQn = 37, - PWM_IRQn = 38, - UART0_IRQn = 39, - UART1_IRQn = 40, - UART2_IRQn = 41, - UART3_IRQn = 42, - UART4_IRQn = 43, - I2C0_IRQn = 44, - I2C1_IRQn = 45, - SPI0_IRQn = 46, - ADC0_IRQn = 47, - RTC_IRQn = 48, - BOD_IRQn = 49, - SDIO_IRQn = 50, - GPIOA_IRQn = 51, - GPIOB_IRQn = 52, - GPIOC_IRQn = 53, - GPIOM_IRQn = 54, - GPION_IRQn = 55, - GPIOP_IRQn = 56, - ADC1_IRQn = 57, - FPU_IRQn = 58, - SPI1_IRQn = 59, - TIMR0_IRQn = 60, - TIMR1_IRQn = 61, - TIMR2_IRQn = 62, - TIMR3_IRQn = 63, - TIMR4_IRQn = 64, - TIMR5_IRQn = 65, + /****** Cortex-M0 Processor Exceptions Numbers **********************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ + + /****** Cortex-M4 specific Interrupt Numbers ************************************************/ + GPIOA0_IRQn = 0, + GPIOA1_IRQn = 1, + GPIOA2_IRQn = 2, + GPIOA3_IRQn = 3, + GPIOA4_IRQn = 4, + GPIOA5_IRQn = 5, + GPIOA6_IRQn = 6, + GPIOA7_IRQn = 7, + GPIOB0_IRQn = 8, + GPIOB1_IRQn = 9, + GPIOB2_IRQn = 10, + GPIOB3_IRQn = 11, + GPIOB4_IRQn = 12, + GPIOB5_IRQn = 13, + GPIOB6_IRQn = 14, + GPIOB7_IRQn = 15, + GPIOC0_IRQn = 16, + GPIOC1_IRQn = 17, + GPIOC2_IRQn = 18, + GPIOC3_IRQn = 19, + GPIOC4_IRQn = 20, + GPIOC5_IRQn = 21, + GPIOC6_IRQn = 22, + GPIOC7_IRQn = 23, + GPIOM0_IRQn = 24, + GPIOM1_IRQn = 25, + GPIOM2_IRQn = 26, + GPIOM3_IRQn = 27, + GPIOM4_IRQn = 28, + GPIOM5_IRQn = 29, + GPIOM6_IRQn = 30, + GPIOM7_IRQn = 31, + DMA_IRQn = 32, + LCD_IRQn = 33, + NORFLC_IRQn = 34, + CAN_IRQn = 35, + PULSE_IRQn = 36, + WDT_IRQn = 37, + PWM_IRQn = 38, + UART0_IRQn = 39, + UART1_IRQn = 40, + UART2_IRQn = 41, + UART3_IRQn = 42, + UART4_IRQn = 43, + I2C0_IRQn = 44, + I2C1_IRQn = 45, + SPI0_IRQn = 46, + ADC0_IRQn = 47, + RTC_IRQn = 48, + BOD_IRQn = 49, + SDIO_IRQn = 50, + GPIOA_IRQn = 51, + GPIOB_IRQn = 52, + GPIOC_IRQn = 53, + GPIOM_IRQn = 54, + GPION_IRQn = 55, + GPIOP_IRQn = 56, + ADC1_IRQn = 57, + FPU_IRQn = 58, + SPI1_IRQn = 59, + TIMR0_IRQn = 60, + TIMR1_IRQn = 61, + TIMR2_IRQn = 62, + TIMR3_IRQn = 63, + TIMR4_IRQn = 64, + TIMR5_IRQn = 65, } IRQn_Type; /* @@ -94,3512 +94,3455 @@ typedef enum IRQn */ /* Configuration of the Cortex-M0 Processor and Core Peripherals */ -#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< SWM320 provides an MPU */ -#define __NVIC_PRIO_BITS 3 /*!< SWM320 uses 3 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ -#define __FPU_PRESENT 0 /*!< FPU present */ - -#if defined ( __CC_ARM ) - #pragma anon_unions +#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1 /*!< SWM320 provides an MPU */ +#define __NVIC_PRIO_BITS 3 /*!< SWM320 uses 3 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 0 /*!< FPU present */ + +#if defined(__CC_ARM) +#pragma anon_unions #endif #include -#include "core_cm4.h" /* Cortex-M0 processor and core peripherals */ +#include "core_cm4.h" /* Cortex-M0 processor and core peripherals */ #include "system_SWM320.h" - /******************************************************************************/ /* Device Specific Peripheral registers structures */ /******************************************************************************/ -typedef struct { - __IO uint32_t CLKSEL; //Clock Select +typedef struct +{ + __IO uint32_t CLKSEL; //Clock Select + + __IO uint32_t CLKDIV; + + __IO uint32_t CLKEN; //Clock Enable - __IO uint32_t CLKDIV; + __IO uint32_t SLEEP; - __IO uint32_t CLKEN; //Clock Enable + uint32_t RESERVED0[6]; - __IO uint32_t SLEEP; - - uint32_t RESERVED0[6]; - - __IO uint32_t RTCBKP_ISO; //[0] 1 RTC备份电æº�域处于隔离状æ€� 0 RTC备份电æº�域å�¯è®¿é—® - - __IO uint32_t RTCWKEN; //[0] 1 使能RTC唤醒功能 + __IO uint32_t RTCBKP_ISO; //[0] 1 RTC备份电æº�域处于隔离状æ€� 0 RTC备份电æº�域å�¯è®¿é—® - uint32_t RESERVED[52+64]; + __IO uint32_t RTCWKEN; //[0] 1 使能RTC唤醒功能 - __IO uint32_t PAWKEN; //Port A Wakeup Enable - __IO uint32_t PBWKEN; - __IO uint32_t PCWKEN; - - uint32_t RESERVED2[1+4]; + uint32_t RESERVED[52 + 64]; - __IO uint32_t PAWKSR; //Port A Wakeup Status Register,写1清零 - __IO uint32_t PBWKSR; - __IO uint32_t PCWKSR; + __IO uint32_t PAWKEN; //Port A Wakeup Enable + __IO uint32_t PBWKEN; + __IO uint32_t PCWKEN; - uint32_t RESERVED3[64-10]; + uint32_t RESERVED2[1 + 4]; - __IO uint32_t RSTCR; //Reset Control Register - __IO uint32_t RSTSR; //Reset Status Register + __IO uint32_t PAWKSR; //Port A Wakeup Status Register,写1清零 + __IO uint32_t PBWKSR; + __IO uint32_t PCWKSR; - uint32_t RESERVED4[61+64]; + uint32_t RESERVED3[64 - 10]; + + __IO uint32_t RSTCR; //Reset Control Register + __IO uint32_t RSTSR; //Reset Status Register + + uint32_t RESERVED4[61 + 64]; + + __IO uint32_t BKP[3]; //æ•°æ�®å¤‡ä»½å¯„存器 - __IO uint32_t BKP[3]; //æ•°æ�®å¤‡ä»½å¯„存器 - //RTC Power Domain: 0x4001E000 - uint32_t RESERVED5[(0x4001E000-0x40000508)/4-1]; - - __IO uint32_t RTCBKP[8]; //RTC电æº�域数æ�®å¤‡ä»½å¯„存器 - - __IO uint32_t LRCCR; //Low speed RC Control Register - __IO uint32_t LRCTRIM0; //Low speed RC Trim + uint32_t RESERVED5[(0x4001E000 - 0x40000508) / 4 - 1]; + + __IO uint32_t RTCBKP[8]; //RTC电æº�域数æ�®å¤‡ä»½å¯„存器 + + __IO uint32_t LRCCR; //Low speed RC Control Register + __IO uint32_t LRCTRIM0; //Low speed RC Trim __IO uint32_t LRCTRIM1; - - uint32_t RESERVED6; - - __IO uint32_t RTCLDOTRIM; //RTC Power Domain LDO Trim - + + uint32_t RESERVED6; + + __IO uint32_t RTCLDOTRIM; //RTC Power Domain LDO Trim + //Analog Control: 0x40031000 - uint32_t RESERVED7[(0x40031000-0x4001E030)/4-1]; - - __IO uint32_t HRCCR; //High speed RC Control Register - - uint32_t RESERVED8[7]; - + uint32_t RESERVED7[(0x40031000 - 0x4001E030) / 4 - 1]; + + __IO uint32_t HRCCR; //High speed RC Control Register + + uint32_t RESERVED8[7]; + __IO uint32_t XTALCR; - + __IO uint32_t PLLCR; __IO uint32_t PLLDIV; __IO uint32_t PLLSET; - __IO uint32_t PLLLOCK; //[0] 1 PLLå·²é”�定 - + __IO uint32_t PLLLOCK; //[0] 1 PLLå·²é”�定 + __IO uint32_t BODIE; __IO uint32_t BODIF; - - __IO uint32_t ADC1IN7; + + __IO uint32_t ADC1IN7; } SYS_TypeDef; +#define SYS_CLKSEL_LFCK_Pos 0 //Low Frequency Clock Source 0 LRC 1 PLL +#define SYS_CLKSEL_LFCK_Msk (0x01 << SYS_CLKSEL_LFCK_Pos) +#define SYS_CLKSEL_HFCK_Pos 1 //High Frequency Clock Source 0 HRC 1 XTAL +#define SYS_CLKSEL_HFCK_Msk (0x01 << SYS_CLKSEL_HFCK_Pos) +#define SYS_CLKSEL_SYS_Pos 2 //系统时钟选择 0 LFCK 1 HFCK +#define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos) + +#define SYS_CLKDIV_SYS_Pos 0 //系统时钟分频 0 1分频 1 2分频 +#define SYS_CLKDIV_SYS_Msk (0x01 << SYS_CLKDIV_SYS_Pos) +#define SYS_CLKDIV_PWM_Pos 1 //PWM 时钟分频 0 1分频 1 8分频 +#define SYS_CLKDIV_PWM_Msk (0x01 << SYS_CLKDIV_PWM_Pos) +#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAM时钟分频 0 1分频 1 2分频 2 4分频 +#define SYS_CLKDIV_SDRAM_Msk (0x03 << SYS_CLKDIV_SDRAM_Pos) +#define SYS_CLKDIV_SDIO_Pos 4 //SDIO时钟分频 0 1分频 1 2分频 2 4分频 3 8分频 +#define SYS_CLKDIV_SDIO_Msk (0x03 << SYS_CLKDIV_SDIO_Pos) + +#define SYS_CLKEN_GPIOA_Pos 0 +#define SYS_CLKEN_GPIOA_Msk (0x01 << SYS_CLKEN_GPIOA_Pos) +#define SYS_CLKEN_GPIOB_Pos 1 +#define SYS_CLKEN_GPIOB_Msk (0x01 << SYS_CLKEN_GPIOB_Pos) +#define SYS_CLKEN_GPIOC_Pos 2 +#define SYS_CLKEN_GPIOC_Msk (0x01 << SYS_CLKEN_GPIOC_Pos) +#define SYS_CLKEN_GPIOM_Pos 4 +#define SYS_CLKEN_GPIOM_Msk (0x01 << SYS_CLKEN_GPIOM_Pos) +#define SYS_CLKEN_GPION_Pos 5 +#define SYS_CLKEN_GPION_Msk (0x01 << SYS_CLKEN_GPION_Pos) +#define SYS_CLKEN_TIMR_Pos 6 +#define SYS_CLKEN_TIMR_Msk (0x01 << SYS_CLKEN_TIMR_Pos) +#define SYS_CLKEN_WDT_Pos 7 +#define SYS_CLKEN_WDT_Msk (0x01 << SYS_CLKEN_WDT_Pos) +#define SYS_CLKEN_ADC0_Pos 8 +#define SYS_CLKEN_ADC0_Msk (0x01 << SYS_CLKEN_ADC0_Pos) +#define SYS_CLKEN_PWM_Pos 9 +#define SYS_CLKEN_PWM_Msk (0x01 << SYS_CLKEN_PWM_Pos) +#define SYS_CLKEN_RTC_Pos 10 +#define SYS_CLKEN_RTC_Msk (0x01 << SYS_CLKEN_RTC_Pos) +#define SYS_CLKEN_UART0_Pos 11 +#define SYS_CLKEN_UART0_Msk (0x01 << SYS_CLKEN_UART0_Pos) +#define SYS_CLKEN_UART1_Pos 12 +#define SYS_CLKEN_UART1_Msk (0x01 << SYS_CLKEN_UART1_Pos) +#define SYS_CLKEN_UART2_Pos 13 +#define SYS_CLKEN_UART2_Msk (0x01 << SYS_CLKEN_UART2_Pos) +#define SYS_CLKEN_UART3_Pos 14 +#define SYS_CLKEN_UART3_Msk (0x01 << SYS_CLKEN_UART3_Pos) +#define SYS_CLKEN_UART4_Pos 15 +#define SYS_CLKEN_UART4_Msk (0x01 << SYS_CLKEN_UART4_Pos) +#define SYS_CLKEN_SPI0_Pos 16 +#define SYS_CLKEN_SPI0_Msk (0x01 << SYS_CLKEN_SPI0_Pos) +#define SYS_CLKEN_I2C0_Pos 17 +#define SYS_CLKEN_I2C0_Msk (0x01 << SYS_CLKEN_I2C0_Pos) +#define SYS_CLKEN_I2C1_Pos 18 +#define SYS_CLKEN_I2C1_Msk (0x01 << SYS_CLKEN_I2C1_Pos) +#define SYS_CLKEN_I2C2_Pos 19 +#define SYS_CLKEN_I2C2_Msk (0x01 << SYS_CLKEN_I2C2_Pos) +#define SYS_CLKEN_LCD_Pos 20 +#define SYS_CLKEN_LCD_Msk (0x01 << SYS_CLKEN_LCD_Pos) +#define SYS_CLKEN_GPIOP_Pos 21 +#define SYS_CLKEN_GPIOP_Msk (0x01 << SYS_CLKEN_GPIOP_Pos) +#define SYS_CLKEN_ANAC_Pos 22 //模拟控制å�•元时钟使能 +#define SYS_CLKEN_ANAC_Msk (0x01 << SYS_CLKEN_ANAC_Pos) +#define SYS_CLKEN_CRC_Pos 23 +#define SYS_CLKEN_CRC_Msk (0x01 << SYS_CLKEN_CRC_Pos) +#define SYS_CLKEN_RTCBKP_Pos 24 +#define SYS_CLKEN_RTCBKP_Msk (0x01 << SYS_CLKEN_RTCBKP_Pos) +#define SYS_CLKEN_CAN_Pos 25 +#define SYS_CLKEN_CAN_Msk (0x01 << SYS_CLKEN_CAN_Pos) +#define SYS_CLKEN_SDRAM_Pos 26 +#define SYS_CLKEN_SDRAM_Msk (0x01 << SYS_CLKEN_SDRAM_Pos) +#define SYS_CLKEN_NORFL_Pos 27 //NOR Flash +#define SYS_CLKEN_NORFL_Msk (0x01 << SYS_CLKEN_NORFL_Pos) +#define SYS_CLKEN_RAMC_Pos 28 +#define SYS_CLKEN_RAMC_Msk (0x01 << SYS_CLKEN_RAMC_Pos) +#define SYS_CLKEN_SDIO_Pos 29 +#define SYS_CLKEN_SDIO_Msk (0x01 << SYS_CLKEN_SDIO_Pos) +#define SYS_CLKEN_ADC1_Pos 30 +#define SYS_CLKEN_ADC1_Msk (0x01 << SYS_CLKEN_ADC1_Pos) +#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVE电æº�域系统时钟使能 +#define SYS_CLKEN_ALIVE_Msk (0x01 << SYS_CLKEN_ALIVE_Pos) + +#define SYS_SLEEP_SLEEP_Pos 0 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥SLEEP模å¼� +#define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos) +#define SYS_SLEEP_DEEP_Pos 1 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥STOP SLEEP模å¼� +#define SYS_SLEEP_DEEP_Msk (0x01 << SYS_SLEEP_DEEP_Pos) + +#define SYS_RSTCR_SYS_Pos 0 //写1进行系统å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_SYS_Msk (0x01 << SYS_RSTCR_SYS_Pos) +#define SYS_RSTCR_FLASH_Pos 1 //写1对FLASH控制器进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_FLASH_Msk (0x01 << SYS_RSTCR_FLASH_Pos) +#define SYS_RSTCR_PWM_Pos 2 //写1对PWM进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_PWM_Msk (0x01 << SYS_RSTCR_PWM_Pos) +#define SYS_RSTCR_CPU_Pos 3 //写1对CPU进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_CPU_Msk (0x01 << SYS_RSTCR_CPU_Pos) +#define SYS_RSTCR_DMA_Pos 4 //写1对DMA进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_DMA_Msk (0x01 << SYS_RSTCR_DMA_Pos) +#define SYS_RSTCR_NORFLASH_Pos 5 //写1对NOR Flash控制器进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_NORFLASH_Msk (0x01 << SYS_RSTCR_NORFLASH_Pos) +#define SYS_RSTCR_SRAM_Pos 6 //写1对SRAM控制器进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_SRAM_Msk (0x01 << SYS_RSTCR_SRAM_Pos) +#define SYS_RSTCR_SDRAM_Pos 7 //写1对SDRAM控制器进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_SDRAM_Msk (0x01 << SYS_RSTCR_SDRAM_Pos) +#define SYS_RSTCR_SDIO_Pos 8 //写1对SDIO进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_SDIO_Msk (0x01 << SYS_RSTCR_SDIO_Pos) +#define SYS_RSTCR_LCD_Pos 9 //写1对LCD进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_LCD_Msk (0x01 << SYS_RSTCR_LCD_Pos) +#define SYS_RSTCR_CAN_Pos 10 //写1对CAN进行一次å¤�ä½�,硬件自动清零 +#define SYS_RSTCR_CAN_Msk (0x01 << SYS_RSTCR_CAN_Pos) + +#define SYS_RSTSR_POR_Pos 0 //1 出现过PORå¤�ä½�,写1清零 +#define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos) +#define SYS_RSTSR_BOD_Pos 1 //1 出现过BODå¤�ä½�,写1清零 +#define SYS_RSTSR_BOD_Msk (0x01 << SYS_RSTSR_BOD_Pos) +#define SYS_RSTSR_PIN_Pos 2 //1 出现过外部引脚å¤�ä½�,写1清零 +#define SYS_RSTSR_PIN_Msk (0x01 << SYS_RSTSR_PIN_Pos) +#define SYS_RSTSR_WDT_Pos 3 //1 出现过WDTå¤�ä½�,写1清零 +#define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos) +#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 出现过软件å¤�ä½�,写1清零 +#define SYS_RSTSR_SWRST_Msk (0x01 << SYS_RSTSR_SWRST_Pos) + +#define SYS_LRCCR_OFF_Pos 0 //Low Speed RC Off +#define SYS_LRCCR_OFF_Msk (0x01 << SYS_LRCCR_OFF_Pos) + +#define SYS_LRCTRIM0_R_Pos 0 //LRC粗调控制ä½� +#define SYS_LRCTRIM0_R_Msk (0x7FFF << SYS_LRCTRIM0_R_Pos) +#define SYS_LRCTRIM0_M_Pos 15 //LRC中调控制ä½� +#define SYS_LRCTRIM0_M_Msk (0x3F << SYS_LRCTRIM2_M_Pos) +#define SYS_LRCTRIM0_F_Pos 21 //LRC细调控制ä½� +#define SYS_LRCTRIM0_F_Msk (0x7FF << SYS_LRCTRIM0_F_Pos) + +#define SYS_LRCTRIM1_U_Pos 0 //LRC U调控制ä½� +#define SYS_LRCTRIM1_U_Msk (0x7FFF << SYS_LRCTRIM1_U_Pos) + +#define SYS_HRCCR_DBL_Pos 0 //Double Frequency 0 20MHz 1 40MHz +#define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos) +#define SYS_HRCCR_OFF_Pos 1 //High speed RC Off +#define SYS_HRCCR_OFF_Msk (0x01 << SYS_HRCCR_OFF_Pos) + +#define SYS_XTALCR_EN_Pos 0 +#define SYS_XTALCR_EN_Msk (0x01 << SYS_XTALCR_EN_Pos) + +#define SYS_PLLCR_OUTEN_Pos 0 //å�ªèƒ½LOCKå�Žè®¾ç½® +#define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos) +#define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC +#define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos) +#define SYS_PLLCR_OFF_Pos 2 +#define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos) + +#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器 \ + //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV \ + //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV +#define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos) +#define SYS_PLLDIV_ADDIV_Pos 9 //ADC时钟基(å�³VCO输出分频å�Žçš„æ—¶é’Ÿï¼‰ç»�ADDIV分频å�Žä½œä¸ºADC的转æ�¢æ—¶é’Ÿ +#define SYS_PLLDIV_ADDIV_Msk (0x1F << SYS_PLLDIV_ADDIV_Pos) +#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCO输出16分频作为ADC时钟基 1 VCO输出ç»�过32分频作为ADC时钟基 2 VCO输出ç»�过64分频作为ADC时钟基 +#define SYS_PLLDIV_ADVCO_Msk (0x03 << SYS_PLLDIV_ADVCO_Pos) +#define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入æº�时钟分频 +#define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos) +#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频 +#define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos) + +#define SYS_PLLSET_LPFBW_Pos 0 //PLL Low Pass Filter Bandwidth +#define SYS_PLLSET_LPFBW_Msk (0x0F << SYS_PLLSET_LPFBW_Pos) +#define SYS_PLLSET_BIASADJ_Pos 4 //PLL Current Bias Adjustment +#define SYS_PLLSET_BIASADJ_Msk (0x03 << SYS_PLLSET_BIASADJ_Pos) +#define SYS_PLLSET_REFVSEL_Pos 6 //PLL Reference Voltage Select +#define SYS_PLLSET_REFVSEL_Msk (0x03 << SYS_PLLSET_REFVSEL_Pos) +#define SYS_PLLSET_CHPADJL_Pos 8 //PLL charge pump LSB current Adjustment +#define SYS_PLLSET_CHPADJL_Msk (0x07 << SYS_PLLSET_CHPADJL_Pos) +#define SYS_PLLSET_CHPADJM_Pos 11 //PLL charge pump MSB current Adjustment +#define SYS_PLLSET_CHPADJM_Msk (0x03 << SYS_PLLSET_CHPADJM_Pos) + +#define SYS_BODIE_2V2_Pos 1 //BOD 2.2V等级触å�‘中断使能 +#define SYS_BODIE_2V2_Msk (0x01 << SYS_BODIE_2V2_Pos) + +#define SYS_BODIF_2V2_Pos 1 //BOD 2.2V等级触å�‘中断状æ€�,写1清零 +#define SYS_BODIF_2V2_Msk (0x01 << SYS_BODIF_2V2_Pos) + +#define SYS_ADC1IN7_SEL_Pos 0 //ADC1模å�—模拟通é�“7,1 温度传感器 2 电池电压 3 RTC电æº�域BG 4 主电æº�域BG 5 PDM33 +#define SYS_ADC1IN7_SEL_Msk (0x0F << SYS_ADC1IN7_SEL_Pos) +#define SYS_ADC1IN7_IOON_Pos 4 //ADC1模å�—模拟通é�“7所用IO开关 +#define SYS_ADC1IN7_IOON_Msk (0x01 << SYS_ADC1IN7_IOON_Pos) + +typedef struct +{ + __IO uint32_t PORTA_SEL; //ç»™PORTA_SEL[2n+2:2n]赋相应的值,将PORTA.PINn引脚é…�ç½®æˆ�GPIOã€�模拟ã€�数字等功能 + //当赋值为PORTA_PINn_FUNMUX时,PORTA.PINn引脚å�¯é€šè¿‡PORTA_MUX寄存器连接到å�„ç§�数字外设 + __IO uint32_t PORTB_SEL; -#define SYS_CLKSEL_LFCK_Pos 0 //Low Frequency Clock Source 0 LRC 1 PLL -#define SYS_CLKSEL_LFCK_Msk (0x01 << SYS_CLKSEL_LFCK_Pos) -#define SYS_CLKSEL_HFCK_Pos 1 //High Frequency Clock Source 0 HRC 1 XTAL -#define SYS_CLKSEL_HFCK_Msk (0x01 << SYS_CLKSEL_HFCK_Pos) -#define SYS_CLKSEL_SYS_Pos 2 //系统时钟选择 0 LFCK 1 HFCK -#define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos) - -#define SYS_CLKDIV_SYS_Pos 0 //系统时钟分频 0 1分频 1 2分频 -#define SYS_CLKDIV_SYS_Msk (0x01 << SYS_CLKDIV_SYS_Pos) -#define SYS_CLKDIV_PWM_Pos 1 //PWM 时钟分频 0 1分频 1 8分频 -#define SYS_CLKDIV_PWM_Msk (0x01 << SYS_CLKDIV_PWM_Pos) -#define SYS_CLKDIV_SDRAM_Pos 2 //SDRAM时钟分频 0 1分频 1 2分频 2 4分频 -#define SYS_CLKDIV_SDRAM_Msk (0x03 << SYS_CLKDIV_SDRAM_Pos) -#define SYS_CLKDIV_SDIO_Pos 4 //SDIO时钟分频 0 1分频 1 2分频 2 4分频 3 8分频 -#define SYS_CLKDIV_SDIO_Msk (0x03 << SYS_CLKDIV_SDIO_Pos) - -#define SYS_CLKEN_GPIOA_Pos 0 -#define SYS_CLKEN_GPIOA_Msk (0x01 << SYS_CLKEN_GPIOA_Pos) -#define SYS_CLKEN_GPIOB_Pos 1 -#define SYS_CLKEN_GPIOB_Msk (0x01 << SYS_CLKEN_GPIOB_Pos) -#define SYS_CLKEN_GPIOC_Pos 2 -#define SYS_CLKEN_GPIOC_Msk (0x01 << SYS_CLKEN_GPIOC_Pos) -#define SYS_CLKEN_GPIOM_Pos 4 -#define SYS_CLKEN_GPIOM_Msk (0x01 << SYS_CLKEN_GPIOM_Pos) -#define SYS_CLKEN_GPION_Pos 5 -#define SYS_CLKEN_GPION_Msk (0x01 << SYS_CLKEN_GPION_Pos) -#define SYS_CLKEN_TIMR_Pos 6 -#define SYS_CLKEN_TIMR_Msk (0x01 << SYS_CLKEN_TIMR_Pos) -#define SYS_CLKEN_WDT_Pos 7 -#define SYS_CLKEN_WDT_Msk (0x01 << SYS_CLKEN_WDT_Pos) -#define SYS_CLKEN_ADC0_Pos 8 -#define SYS_CLKEN_ADC0_Msk (0x01 << SYS_CLKEN_ADC0_Pos) -#define SYS_CLKEN_PWM_Pos 9 -#define SYS_CLKEN_PWM_Msk (0x01 << SYS_CLKEN_PWM_Pos) -#define SYS_CLKEN_RTC_Pos 10 -#define SYS_CLKEN_RTC_Msk (0x01 << SYS_CLKEN_RTC_Pos) -#define SYS_CLKEN_UART0_Pos 11 -#define SYS_CLKEN_UART0_Msk (0x01 << SYS_CLKEN_UART0_Pos) -#define SYS_CLKEN_UART1_Pos 12 -#define SYS_CLKEN_UART1_Msk (0x01 << SYS_CLKEN_UART1_Pos) -#define SYS_CLKEN_UART2_Pos 13 -#define SYS_CLKEN_UART2_Msk (0x01 << SYS_CLKEN_UART2_Pos) -#define SYS_CLKEN_UART3_Pos 14 -#define SYS_CLKEN_UART3_Msk (0x01 << SYS_CLKEN_UART3_Pos) -#define SYS_CLKEN_UART4_Pos 15 -#define SYS_CLKEN_UART4_Msk (0x01 << SYS_CLKEN_UART4_Pos) -#define SYS_CLKEN_SPI0_Pos 16 -#define SYS_CLKEN_SPI0_Msk (0x01 << SYS_CLKEN_SPI0_Pos) -#define SYS_CLKEN_I2C0_Pos 17 -#define SYS_CLKEN_I2C0_Msk (0x01 << SYS_CLKEN_I2C0_Pos) -#define SYS_CLKEN_I2C1_Pos 18 -#define SYS_CLKEN_I2C1_Msk (0x01 << SYS_CLKEN_I2C1_Pos) -#define SYS_CLKEN_I2C2_Pos 19 -#define SYS_CLKEN_I2C2_Msk (0x01 << SYS_CLKEN_I2C2_Pos) -#define SYS_CLKEN_LCD_Pos 20 -#define SYS_CLKEN_LCD_Msk (0x01 << SYS_CLKEN_LCD_Pos) -#define SYS_CLKEN_GPIOP_Pos 21 -#define SYS_CLKEN_GPIOP_Msk (0x01 << SYS_CLKEN_GPIOP_Pos) -#define SYS_CLKEN_ANAC_Pos 22 //模拟控制å�•元时钟使能 -#define SYS_CLKEN_ANAC_Msk (0x01 << SYS_CLKEN_ANAC_Pos) -#define SYS_CLKEN_CRC_Pos 23 -#define SYS_CLKEN_CRC_Msk (0x01 << SYS_CLKEN_CRC_Pos) -#define SYS_CLKEN_RTCBKP_Pos 24 -#define SYS_CLKEN_RTCBKP_Msk (0x01 << SYS_CLKEN_RTCBKP_Pos) -#define SYS_CLKEN_CAN_Pos 25 -#define SYS_CLKEN_CAN_Msk (0x01 << SYS_CLKEN_CAN_Pos) -#define SYS_CLKEN_SDRAM_Pos 26 -#define SYS_CLKEN_SDRAM_Msk (0x01 << SYS_CLKEN_SDRAM_Pos) -#define SYS_CLKEN_NORFL_Pos 27 //NOR Flash -#define SYS_CLKEN_NORFL_Msk (0x01 << SYS_CLKEN_NORFL_Pos) -#define SYS_CLKEN_RAMC_Pos 28 -#define SYS_CLKEN_RAMC_Msk (0x01 << SYS_CLKEN_RAMC_Pos) -#define SYS_CLKEN_SDIO_Pos 29 -#define SYS_CLKEN_SDIO_Msk (0x01 << SYS_CLKEN_SDIO_Pos) -#define SYS_CLKEN_ADC1_Pos 30 -#define SYS_CLKEN_ADC1_Msk (0x01 << SYS_CLKEN_ADC1_Pos) -#define SYS_CLKEN_ALIVE_Pos 31 //CHIPALIVE电æº�域系统时钟使能 -#define SYS_CLKEN_ALIVE_Msk (0x01 << SYS_CLKEN_ALIVE_Pos) - -#define SYS_SLEEP_SLEEP_Pos 0 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥SLEEP模å¼� -#define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos) -#define SYS_SLEEP_DEEP_Pos 1 //将该ä½�ç½®1å�Žï¼Œç³»ç»Ÿå°†è¿›å…¥STOP SLEEP模å¼� -#define SYS_SLEEP_DEEP_Msk (0x01 << SYS_SLEEP_DEEP_Pos) - -#define SYS_RSTCR_SYS_Pos 0 //写1进行系统å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SYS_Msk (0x01 << SYS_RSTCR_SYS_Pos) -#define SYS_RSTCR_FLASH_Pos 1 //写1对FLASH控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_FLASH_Msk (0x01 << SYS_RSTCR_FLASH_Pos) -#define SYS_RSTCR_PWM_Pos 2 //写1对PWM进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_PWM_Msk (0x01 << SYS_RSTCR_PWM_Pos) -#define SYS_RSTCR_CPU_Pos 3 //写1对CPU进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_CPU_Msk (0x01 << SYS_RSTCR_CPU_Pos) -#define SYS_RSTCR_DMA_Pos 4 //写1对DMA进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_DMA_Msk (0x01 << SYS_RSTCR_DMA_Pos) -#define SYS_RSTCR_NORFLASH_Pos 5 //写1对NOR Flash控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_NORFLASH_Msk (0x01 << SYS_RSTCR_NORFLASH_Pos) -#define SYS_RSTCR_SRAM_Pos 6 //写1对SRAM控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SRAM_Msk (0x01 << SYS_RSTCR_SRAM_Pos) -#define SYS_RSTCR_SDRAM_Pos 7 //写1对SDRAM控制器进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SDRAM_Msk (0x01 << SYS_RSTCR_SDRAM_Pos) -#define SYS_RSTCR_SDIO_Pos 8 //写1对SDIO进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_SDIO_Msk (0x01 << SYS_RSTCR_SDIO_Pos) -#define SYS_RSTCR_LCD_Pos 9 //写1对LCD进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_LCD_Msk (0x01 << SYS_RSTCR_LCD_Pos) -#define SYS_RSTCR_CAN_Pos 10 //写1对CAN进行一次å¤�ä½�,硬件自动清零 -#define SYS_RSTCR_CAN_Msk (0x01 << SYS_RSTCR_CAN_Pos) - -#define SYS_RSTSR_POR_Pos 0 //1 出现过PORå¤�ä½�,写1清零 -#define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos) -#define SYS_RSTSR_BOD_Pos 1 //1 出现过BODå¤�ä½�,写1清零 -#define SYS_RSTSR_BOD_Msk (0x01 << SYS_RSTSR_BOD_Pos) -#define SYS_RSTSR_PIN_Pos 2 //1 出现过外部引脚å¤�ä½�,写1清零 -#define SYS_RSTSR_PIN_Msk (0x01 << SYS_RSTSR_PIN_Pos) -#define SYS_RSTSR_WDT_Pos 3 //1 出现过WDTå¤�ä½�,写1清零 -#define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos) -#define SYS_RSTSR_SWRST_Pos 4 //Software Reset, 1 出现过软件å¤�ä½�,写1清零 -#define SYS_RSTSR_SWRST_Msk (0x01 << SYS_RSTSR_SWRST_Pos) - -#define SYS_LRCCR_OFF_Pos 0 //Low Speed RC Off -#define SYS_LRCCR_OFF_Msk (0x01 << SYS_LRCCR_OFF_Pos) - -#define SYS_LRCTRIM0_R_Pos 0 //LRC粗调控制ä½� -#define SYS_LRCTRIM0_R_Msk (0x7FFF << SYS_LRCTRIM0_R_Pos) -#define SYS_LRCTRIM0_M_Pos 15 //LRC中调控制ä½� -#define SYS_LRCTRIM0_M_Msk (0x3F << SYS_LRCTRIM2_M_Pos) -#define SYS_LRCTRIM0_F_Pos 21 //LRC细调控制ä½� -#define SYS_LRCTRIM0_F_Msk (0x7FF << SYS_LRCTRIM0_F_Pos) - -#define SYS_LRCTRIM1_U_Pos 0 //LRC U调控制ä½� -#define SYS_LRCTRIM1_U_Msk (0x7FFF << SYS_LRCTRIM1_U_Pos) - - -#define SYS_HRCCR_DBL_Pos 0 //Double Frequency 0 20MHz 1 40MHz -#define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos) -#define SYS_HRCCR_OFF_Pos 1 //High speed RC Off -#define SYS_HRCCR_OFF_Msk (0x01 << SYS_HRCCR_OFF_Pos) - -#define SYS_XTALCR_EN_Pos 0 -#define SYS_XTALCR_EN_Msk (0x01 << SYS_XTALCR_EN_Pos) - -#define SYS_PLLCR_OUTEN_Pos 0 //å�ªèƒ½LOCKå�Žè®¾ç½® -#define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos) -#define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC -#define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos) -#define SYS_PLLCR_OFF_Pos 2 -#define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos) - -#define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器 - //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV - //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV -#define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos) -#define SYS_PLLDIV_ADDIV_Pos 9 //ADC时钟基(å�³VCO输出分频å�Žçš„æ—¶é’Ÿï¼‰ç»�ADDIV分频å�Žä½œä¸ºADC的转æ�¢æ—¶é’Ÿ -#define SYS_PLLDIV_ADDIV_Msk (0x1F << SYS_PLLDIV_ADDIV_Pos) -#define SYS_PLLDIV_ADVCO_Pos 14 //0 VCO输出16分频作为ADC时钟基 1 VCO输出ç»�过32分频作为ADC时钟基 2 VCO输出ç»�过64分频作为ADC时钟基 -#define SYS_PLLDIV_ADVCO_Msk (0x03 << SYS_PLLDIV_ADVCO_Pos) -#define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入æº�时钟分频 -#define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos) -#define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频 -#define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos) - -#define SYS_PLLSET_LPFBW_Pos 0 //PLL Low Pass Filter Bandwidth -#define SYS_PLLSET_LPFBW_Msk (0x0F << SYS_PLLSET_LPFBW_Pos) -#define SYS_PLLSET_BIASADJ_Pos 4 //PLL Current Bias Adjustment -#define SYS_PLLSET_BIASADJ_Msk (0x03 << SYS_PLLSET_BIASADJ_Pos) -#define SYS_PLLSET_REFVSEL_Pos 6 //PLL Reference Voltage Select -#define SYS_PLLSET_REFVSEL_Msk (0x03 << SYS_PLLSET_REFVSEL_Pos) -#define SYS_PLLSET_CHPADJL_Pos 8 //PLL charge pump LSB current Adjustment -#define SYS_PLLSET_CHPADJL_Msk (0x07 << SYS_PLLSET_CHPADJL_Pos) -#define SYS_PLLSET_CHPADJM_Pos 11 //PLL charge pump MSB current Adjustment -#define SYS_PLLSET_CHPADJM_Msk (0x03 << SYS_PLLSET_CHPADJM_Pos) - -#define SYS_BODIE_2V2_Pos 1 //BOD 2.2V等级触å�‘中断使能 -#define SYS_BODIE_2V2_Msk (0x01 << SYS_BODIE_2V2_Pos) - -#define SYS_BODIF_2V2_Pos 1 //BOD 2.2V等级触å�‘中断状æ€�,写1清零 -#define SYS_BODIF_2V2_Msk (0x01 << SYS_BODIF_2V2_Pos) - -#define SYS_ADC1IN7_SEL_Pos 0 //ADC1模å�—模拟通é�“7,1 温度传感器 2 电池电压 3 RTC电æº�域BG 4 主电æº�域BG 5 PDM33 -#define SYS_ADC1IN7_SEL_Msk (0x0F << SYS_ADC1IN7_SEL_Pos) -#define SYS_ADC1IN7_IOON_Pos 4 //ADC1模å�—模拟通é�“7所用IO开关 -#define SYS_ADC1IN7_IOON_Msk (0x01 << SYS_ADC1IN7_IOON_Pos) - - - - -typedef struct { - __IO uint32_t PORTA_SEL; //ç»™PORTA_SEL[2n+2:2n]赋相应的值,将PORTA.PINn引脚é…�ç½®æˆ�GPIOã€�模拟ã€�数字等功能 - //当赋值为PORTA_PINn_FUNMUX时,PORTA.PINn引脚å�¯é€šè¿‡PORTA_MUX寄存器连接到å�„ç§�数字外设 - __IO uint32_t PORTB_SEL; - __IO uint32_t PORTC_SEL; - - uint32_t RESERVED[5]; - - __IO uint32_t PORTM_SEL0; - + + uint32_t RESERVED[5]; + + __IO uint32_t PORTM_SEL0; + __IO uint32_t PORTM_SEL1; - - uint32_t RESERVED2[2]; - + + uint32_t RESERVED2[2]; + __IO uint32_t PORTN_SEL0; - + __IO uint32_t PORTN_SEL1; - - uint32_t RESERVED3[2]; - + + uint32_t RESERVED3[2]; + __IO uint32_t PORTP_SEL0; - + __IO uint32_t PORTP_SEL1; - - uint32_t RESERVED4[46]; - + + uint32_t RESERVED4[46]; + __IO uint32_t PORTA_MUX0; - + __IO uint32_t PORTA_MUX1; - - uint32_t RESERVED5[2]; - + + uint32_t RESERVED5[2]; + __IO uint32_t PORTB_MUX0; - + __IO uint32_t PORTB_MUX1; - - uint32_t RESERVED6[2]; - + + uint32_t RESERVED6[2]; + __IO uint32_t PORTC_MUX0; - + __IO uint32_t PORTC_MUX1; - - uint32_t RESERVED7[14]; - + + uint32_t RESERVED7[14]; + __IO uint32_t PORTM_MUX0; - + __IO uint32_t PORTM_MUX1; __IO uint32_t PORTM_MUX2; - + __IO uint32_t PORTM_MUX3; - + __IO uint32_t PORTN_MUX0; - + __IO uint32_t PORTN_MUX1; - + __IO uint32_t PORTN_MUX2; - - uint32_t RESERVED8; - + + uint32_t RESERVED8; + __IO uint32_t PORTP_MUX0; - + __IO uint32_t PORTP_MUX1; - + __IO uint32_t PORTP_MUX2; - + __IO uint32_t PORTP_MUX3; - - uint32_t RESERVED9[28]; - - __IO uint32_t PORTA_PULLU; //上拉使能 - - uint32_t RESERVED10[3]; - + + uint32_t RESERVED9[28]; + + __IO uint32_t PORTA_PULLU; //上拉使能 + + uint32_t RESERVED10[3]; + __IO uint32_t PORTC_PULLU; - - uint32_t RESERVED11[3]; + + uint32_t RESERVED11[3]; __IO uint32_t PORTM_PULLU; - - uint32_t RESERVED12[3]; + + uint32_t RESERVED12[3]; __IO uint32_t PORTP_PULLU; - - uint32_t RESERVED13[51]; - - __IO uint32_t PORTB_PULLD; //下拉使能 - - uint32_t RESERVED14[3]; + + uint32_t RESERVED13[51]; + + __IO uint32_t PORTB_PULLD; //下拉使能 + + uint32_t RESERVED14[3]; __IO uint32_t PORTD_PULLD; - - uint32_t RESERVED15[3]; + + uint32_t RESERVED15[3]; __IO uint32_t PORTN_PULLD; - - uint32_t RESERVED16[135]; - - __IO uint32_t PORTM_DRIVS; //驱动强度 - - uint32_t RESERVED17[3]; + + uint32_t RESERVED16[135]; + + __IO uint32_t PORTM_DRIVS; //驱动强度 + + uint32_t RESERVED17[3]; __IO uint32_t PORTN_DRIVS; - - uint32_t RESERVED18[3]; + + uint32_t RESERVED18[3]; __IO uint32_t PORTP_DRIVS; - - uint32_t RESERVED19[39]; - - __IO uint32_t PORTA_INEN; //输入使能 - - uint32_t RESERVED20[3]; - + + uint32_t RESERVED19[39]; + + __IO uint32_t PORTA_INEN; //输入使能 + + uint32_t RESERVED20[3]; + __IO uint32_t PORTB_INEN; - - uint32_t RESERVED21[3]; + + uint32_t RESERVED21[3]; __IO uint32_t PORTC_INEN; - - uint32_t RESERVED22[7]; + + uint32_t RESERVED22[7]; __IO uint32_t PORTM_INEN; - - uint32_t RESERVED23[3]; - + + uint32_t RESERVED23[3]; + __IO uint32_t PORTN_INEN; - - uint32_t RESERVED24[3]; + + uint32_t RESERVED24[3]; __IO uint32_t PORTP_INEN; } PORT_TypeDef; - -#define PORT_PORTA_PULLU_PIN0_Pos 0 -#define PORT_PORTA_PULLU_PIN0_Msk (0x01 << PORT_PORTA_PULLU_PIN0_Pos) -#define PORT_PORTA_PULLU_PIN1_Pos 1 -#define PORT_PORTA_PULLU_PIN1_Msk (0x01 << PORT_PORTA_PULLU_PIN1_Pos) -#define PORT_PORTA_PULLU_PIN2_Pos 2 -#define PORT_PORTA_PULLU_PIN2_Msk (0x01 << PORT_PORTA_PULLU_PIN2_Pos) -#define PORT_PORTA_PULLU_PIN3_Pos 3 -#define PORT_PORTA_PULLU_PIN3_Msk (0x01 << PORT_PORTA_PULLU_PIN3_Pos) -#define PORT_PORTA_PULLU_PIN4_Pos 4 -#define PORT_PORTA_PULLU_PIN4_Msk (0x01 << PORT_PORTA_PULLU_PIN4_Pos) -#define PORT_PORTA_PULLU_PIN5_Pos 5 -#define PORT_PORTA_PULLU_PIN5_Msk (0x01 << PORT_PORTA_PULLU_PIN5_Pos) -#define PORT_PORTA_PULLU_PIN6_Pos 6 -#define PORT_PORTA_PULLU_PIN6_Msk (0x01 << PORT_PORTA_PULLU_PIN6_Pos) -#define PORT_PORTA_PULLU_PIN7_Pos 7 -#define PORT_PORTA_PULLU_PIN7_Msk (0x01 << PORT_PORTA_PULLU_PIN7_Pos) -#define PORT_PORTA_PULLU_PIN8_Pos 8 -#define PORT_PORTA_PULLU_PIN8_Msk (0x01 << PORT_PORTA_PULLU_PIN8_Pos) -#define PORT_PORTA_PULLU_PIN9_Pos 9 -#define PORT_PORTA_PULLU_PIN9_Msk (0x01 << PORT_PORTA_PULLU_PIN9_Pos) -#define PORT_PORTA_PULLU_PIN10_Pos 10 -#define PORT_PORTA_PULLU_PIN10_Msk (0x01 << PORT_PORTA_PULLU_PIN10_Pos) -#define PORT_PORTA_PULLU_PIN11_Pos 11 -#define PORT_PORTA_PULLU_PIN11_Msk (0x01 << PORT_PORTA_PULLU_PIN11_Pos) -#define PORT_PORTA_PULLU_PIN12_Pos 12 -#define PORT_PORTA_PULLU_PIN12_Msk (0x01 << PORT_PORTA_PULLU_PIN12_Pos) -#define PORT_PORTA_PULLU_PIN13_Pos 13 -#define PORT_PORTA_PULLU_PIN13_Msk (0x01 << PORT_PORTA_PULLU_PIN13_Pos) -#define PORT_PORTA_PULLU_PIN14_Pos 14 -#define PORT_PORTA_PULLU_PIN14_Msk (0x01 << PORT_PORTA_PULLU_PIN14_Pos) -#define PORT_PORTA_PULLU_PIN15_Pos 15 -#define PORT_PORTA_PULLU_PIN15_Msk (0x01 << PORT_PORTA_PULLU_PIN15_Pos) - -#define PORT_PORTC_PULLU_PIN0_Pos 0 -#define PORT_PORTC_PULLU_PIN0_Msk (0x01 << PORT_PORTC_PULLU_PIN0_Pos) -#define PORT_PORTC_PULLU_PIN1_Pos 1 -#define PORT_PORTC_PULLU_PIN1_Msk (0x01 << PORT_PORTC_PULLU_PIN1_Pos) -#define PORT_PORTC_PULLU_PIN2_Pos 2 -#define PORT_PORTC_PULLU_PIN2_Msk (0x01 << PORT_PORTC_PULLU_PIN2_Pos) -#define PORT_PORTC_PULLU_PIN3_Pos 3 -#define PORT_PORTC_PULLU_PIN3_Msk (0x01 << PORT_PORTC_PULLU_PIN3_Pos) -#define PORT_PORTC_PULLU_PIN4_Pos 4 -#define PORT_PORTC_PULLU_PIN4_Msk (0x01 << PORT_PORTC_PULLU_PIN4_Pos) -#define PORT_PORTC_PULLU_PIN5_Pos 5 -#define PORT_PORTC_PULLU_PIN5_Msk (0x01 << PORT_PORTC_PULLU_PIN5_Pos) -#define PORT_PORTC_PULLU_PIN6_Pos 6 -#define PORT_PORTC_PULLU_PIN6_Msk (0x01 << PORT_PORTC_PULLU_PIN6_Pos) -#define PORT_PORTC_PULLU_PIN7_Pos 7 -#define PORT_PORTC_PULLU_PIN7_Msk (0x01 << PORT_PORTC_PULLU_PIN7_Pos) -#define PORT_PORTC_PULLU_PIN8_Pos 8 -#define PORT_PORTC_PULLU_PIN8_Msk (0x01 << PORT_PORTC_PULLU_PIN8_Pos) -#define PORT_PORTC_PULLU_PIN9_Pos 9 -#define PORT_PORTC_PULLU_PIN9_Msk (0x01 << PORT_PORTC_PULLU_PIN9_Pos) -#define PORT_PORTC_PULLU_PIN10_Pos 10 -#define PORT_PORTC_PULLU_PIN10_Msk (0x01 << PORT_PORTC_PULLU_PIN10_Pos) -#define PORT_PORTC_PULLU_PIN11_Pos 11 -#define PORT_PORTC_PULLU_PIN11_Msk (0x01 << PORT_PORTC_PULLU_PIN11_Pos) -#define PORT_PORTC_PULLU_PIN12_Pos 12 -#define PORT_PORTC_PULLU_PIN12_Msk (0x01 << PORT_PORTC_PULLU_PIN12_Pos) -#define PORT_PORTC_PULLU_PIN13_Pos 13 -#define PORT_PORTC_PULLU_PIN13_Msk (0x01 << PORT_PORTC_PULLU_PIN13_Pos) -#define PORT_PORTC_PULLU_PIN14_Pos 14 -#define PORT_PORTC_PULLU_PIN14_Msk (0x01 << PORT_PORTC_PULLU_PIN14_Pos) -#define PORT_PORTC_PULLU_PIN15_Pos 15 -#define PORT_PORTC_PULLU_PIN15_Msk (0x01 << PORT_PORTC_PULLU_PIN15_Pos) - -#define PORT_PORTM_PULLU_PIN0_Pos 0 -#define PORT_PORTM_PULLU_PIN0_Msk (0x01 << PORT_PORTM_PULLU_PIN0_Pos) -#define PORT_PORTM_PULLU_PIN1_Pos 1 -#define PORT_PORTM_PULLU_PIN1_Msk (0x01 << PORT_PORTM_PULLU_PIN1_Pos) -#define PORT_PORTM_PULLU_PIN2_Pos 2 -#define PORT_PORTM_PULLU_PIN2_Msk (0x01 << PORT_PORTM_PULLU_PIN2_Pos) -#define PORT_PORTM_PULLU_PIN3_Pos 3 -#define PORT_PORTM_PULLU_PIN3_Msk (0x01 << PORT_PORTM_PULLU_PIN3_Pos) -#define PORT_PORTM_PULLU_PIN4_Pos 4 -#define PORT_PORTM_PULLU_PIN4_Msk (0x01 << PORT_PORTM_PULLU_PIN4_Pos) -#define PORT_PORTM_PULLU_PIN5_Pos 5 -#define PORT_PORTM_PULLU_PIN5_Msk (0x01 << PORT_PORTM_PULLU_PIN5_Pos) -#define PORT_PORTM_PULLU_PIN6_Pos 6 -#define PORT_PORTM_PULLU_PIN6_Msk (0x01 << PORT_PORTM_PULLU_PIN6_Pos) -#define PORT_PORTM_PULLU_PIN7_Pos 7 -#define PORT_PORTM_PULLU_PIN7_Msk (0x01 << PORT_PORTM_PULLU_PIN7_Pos) -#define PORT_PORTM_PULLU_PIN8_Pos 8 -#define PORT_PORTM_PULLU_PIN8_Msk (0x01 << PORT_PORTM_PULLU_PIN8_Pos) -#define PORT_PORTM_PULLU_PIN9_Pos 9 -#define PORT_PORTM_PULLU_PIN9_Msk (0x01 << PORT_PORTM_PULLU_PIN9_Pos) -#define PORT_PORTM_PULLU_PIN10_Pos 10 -#define PORT_PORTM_PULLU_PIN10_Msk (0x01 << PORT_PORTM_PULLU_PIN10_Pos) -#define PORT_PORTM_PULLU_PIN11_Pos 11 -#define PORT_PORTM_PULLU_PIN11_Msk (0x01 << PORT_PORTM_PULLU_PIN11_Pos) -#define PORT_PORTM_PULLU_PIN12_Pos 12 -#define PORT_PORTM_PULLU_PIN12_Msk (0x01 << PORT_PORTM_PULLU_PIN12_Pos) -#define PORT_PORTM_PULLU_PIN13_Pos 13 -#define PORT_PORTM_PULLU_PIN13_Msk (0x01 << PORT_PORTM_PULLU_PIN13_Pos) -#define PORT_PORTM_PULLU_PIN14_Pos 14 -#define PORT_PORTM_PULLU_PIN14_Msk (0x01 << PORT_PORTM_PULLU_PIN14_Pos) -#define PORT_PORTM_PULLU_PIN15_Pos 15 -#define PORT_PORTM_PULLU_PIN15_Msk (0x01 << PORT_PORTM_PULLU_PIN15_Pos) -#define PORT_PORTM_PULLU_PIN16_Pos 16 -#define PORT_PORTM_PULLU_PIN16_Msk (0x01 << PORT_PORTM_PULLU_PIN16_Pos) -#define PORT_PORTM_PULLU_PIN17_Pos 17 -#define PORT_PORTM_PULLU_PIN17_Msk (0x01 << PORT_PORTM_PULLU_PIN17_Pos) -#define PORT_PORTM_PULLU_PIN18_Pos 18 -#define PORT_PORTM_PULLU_PIN18_Msk (0x01 << PORT_PORTM_PULLU_PIN18_Pos) -#define PORT_PORTM_PULLU_PIN19_Pos 19 -#define PORT_PORTM_PULLU_PIN19_Msk (0x01 << PORT_PORTM_PULLU_PIN19_Pos) -#define PORT_PORTM_PULLU_PIN20_Pos 20 -#define PORT_PORTM_PULLU_PIN20_Msk (0x01 << PORT_PORTM_PULLU_PIN20_Pos) -#define PORT_PORTM_PULLU_PIN21_Pos 21 -#define PORT_PORTM_PULLU_PIN21_Msk (0x01 << PORT_PORTM_PULLU_PIN21_Pos) -#define PORT_PORTM_PULLU_PIN22_Pos 22 -#define PORT_PORTM_PULLU_PIN22_Msk (0x01 << PORT_PORTM_PULLU_PIN22_Pos) -#define PORT_PORTM_PULLU_PIN23_Pos 23 -#define PORT_PORTM_PULLU_PIN23_Msk (0x01 << PORT_PORTM_PULLU_PIN23_Pos) - -#define PORT_PORTP_PULLU_PIN0_Pos 0 -#define PORT_PORTP_PULLU_PIN0_Msk (0x01 << PORT_PORTP_PULLU_PIN0_Pos) -#define PORT_PORTP_PULLU_PIN1_Pos 1 -#define PORT_PORTP_PULLU_PIN1_Msk (0x01 << PORT_PORTP_PULLU_PIN1_Pos) -#define PORT_PORTP_PULLU_PIN2_Pos 2 -#define PORT_PORTP_PULLU_PIN2_Msk (0x01 << PORT_PORTP_PULLU_PIN2_Pos) -#define PORT_PORTP_PULLU_PIN3_Pos 3 -#define PORT_PORTP_PULLU_PIN3_Msk (0x01 << PORT_PORTP_PULLU_PIN3_Pos) -#define PORT_PORTP_PULLU_PIN4_Pos 4 -#define PORT_PORTP_PULLU_PIN4_Msk (0x01 << PORT_PORTP_PULLU_PIN4_Pos) -#define PORT_PORTP_PULLU_PIN5_Pos 5 -#define PORT_PORTP_PULLU_PIN5_Msk (0x01 << PORT_PORTP_PULLU_PIN5_Pos) -#define PORT_PORTP_PULLU_PIN6_Pos 6 -#define PORT_PORTP_PULLU_PIN6_Msk (0x01 << PORT_PORTP_PULLU_PIN6_Pos) -#define PORT_PORTP_PULLU_PIN7_Pos 7 -#define PORT_PORTP_PULLU_PIN7_Msk (0x01 << PORT_PORTP_PULLU_PIN7_Pos) -#define PORT_PORTP_PULLU_PIN8_Pos 8 -#define PORT_PORTP_PULLU_PIN8_Msk (0x01 << PORT_PORTP_PULLU_PIN8_Pos) -#define PORT_PORTP_PULLU_PIN9_Pos 9 -#define PORT_PORTP_PULLU_PIN9_Msk (0x01 << PORT_PORTP_PULLU_PIN9_Pos) -#define PORT_PORTP_PULLU_PIN10_Pos 10 -#define PORT_PORTP_PULLU_PIN10_Msk (0x01 << PORT_PORTP_PULLU_PIN10_Pos) -#define PORT_PORTP_PULLU_PIN11_Pos 11 -#define PORT_PORTP_PULLU_PIN11_Msk (0x01 << PORT_PORTP_PULLU_PIN11_Pos) -#define PORT_PORTP_PULLU_PIN12_Pos 12 -#define PORT_PORTP_PULLU_PIN12_Msk (0x01 << PORT_PORTP_PULLU_PIN12_Pos) -#define PORT_PORTP_PULLU_PIN13_Pos 13 -#define PORT_PORTP_PULLU_PIN13_Msk (0x01 << PORT_PORTP_PULLU_PIN13_Pos) -#define PORT_PORTP_PULLU_PIN14_Pos 14 -#define PORT_PORTP_PULLU_PIN14_Msk (0x01 << PORT_PORTP_PULLU_PIN14_Pos) -#define PORT_PORTP_PULLU_PIN15_Pos 15 -#define PORT_PORTP_PULLU_PIN15_Msk (0x01 << PORT_PORTP_PULLU_PIN15_Pos) -#define PORT_PORTP_PULLU_PIN16_Pos 16 -#define PORT_PORTP_PULLU_PIN16_Msk (0x01 << PORT_PORTP_PULLU_PIN16_Pos) -#define PORT_PORTP_PULLU_PIN17_Pos 17 -#define PORT_PORTP_PULLU_PIN17_Msk (0x01 << PORT_PORTP_PULLU_PIN17_Pos) -#define PORT_PORTP_PULLU_PIN18_Pos 18 -#define PORT_PORTP_PULLU_PIN18_Msk (0x01 << PORT_PORTP_PULLU_PIN18_Pos) -#define PORT_PORTP_PULLU_PIN19_Pos 19 -#define PORT_PORTP_PULLU_PIN19_Msk (0x01 << PORT_PORTP_PULLU_PIN19_Pos) -#define PORT_PORTP_PULLU_PIN20_Pos 20 -#define PORT_PORTP_PULLU_PIN20_Msk (0x01 << PORT_PORTP_PULLU_PIN20_Pos) -#define PORT_PORTP_PULLU_PIN21_Pos 21 -#define PORT_PORTP_PULLU_PIN21_Msk (0x01 << PORT_PORTP_PULLU_PIN21_Pos) -#define PORT_PORTP_PULLU_PIN22_Pos 22 -#define PORT_PORTP_PULLU_PIN22_Msk (0x01 << PORT_PORTP_PULLU_PIN22_Pos) -#define PORT_PORTP_PULLU_PIN23_Pos 23 -#define PORT_PORTP_PULLU_PIN23_Msk (0x01 << PORT_PORTP_PULLU_PIN23_Pos) - -#define PORT_PORTB_PULLD_PIN0_Pos 0 -#define PORT_PORTB_PULLD_PIN0_Msk (0x01 << PORT_PORTB_PULLD_PIN0_Pos) -#define PORT_PORTB_PULLD_PIN1_Pos 1 -#define PORT_PORTB_PULLD_PIN1_Msk (0x01 << PORT_PORTB_PULLD_PIN1_Pos) -#define PORT_PORTB_PULLD_PIN2_Pos 2 -#define PORT_PORTB_PULLD_PIN2_Msk (0x01 << PORT_PORTB_PULLD_PIN2_Pos) -#define PORT_PORTB_PULLD_PIN3_Pos 3 -#define PORT_PORTB_PULLD_PIN3_Msk (0x01 << PORT_PORTB_PULLD_PIN3_Pos) -#define PORT_PORTB_PULLD_PIN4_Pos 4 -#define PORT_PORTB_PULLD_PIN4_Msk (0x01 << PORT_PORTB_PULLD_PIN4_Pos) -#define PORT_PORTB_PULLD_PIN5_Pos 5 -#define PORT_PORTB_PULLD_PIN5_Msk (0x01 << PORT_PORTB_PULLD_PIN5_Pos) -#define PORT_PORTB_PULLD_PIN6_Pos 6 -#define PORT_PORTB_PULLD_PIN6_Msk (0x01 << PORT_PORTB_PULLD_PIN6_Pos) -#define PORT_PORTB_PULLD_PIN7_Pos 7 -#define PORT_PORTB_PULLD_PIN7_Msk (0x01 << PORT_PORTB_PULLD_PIN7_Pos) -#define PORT_PORTB_PULLD_PIN8_Pos 8 -#define PORT_PORTB_PULLD_PIN8_Msk (0x01 << PORT_PORTB_PULLD_PIN8_Pos) -#define PORT_PORTB_PULLD_PIN9_Pos 9 -#define PORT_PORTB_PULLD_PIN9_Msk (0x01 << PORT_PORTB_PULLD_PIN9_Pos) -#define PORT_PORTB_PULLD_PIN10_Pos 10 -#define PORT_PORTB_PULLD_PIN10_Msk (0x01 << PORT_PORTB_PULLD_PIN10_Pos) -#define PORT_PORTB_PULLD_PIN11_Pos 11 -#define PORT_PORTB_PULLD_PIN11_Msk (0x01 << PORT_PORTB_PULLD_PIN11_Pos) -#define PORT_PORTB_PULLD_PIN12_Pos 12 -#define PORT_PORTB_PULLD_PIN12_Msk (0x01 << PORT_PORTB_PULLD_PIN12_Pos) -#define PORT_PORTB_PULLD_PIN13_Pos 13 -#define PORT_PORTB_PULLD_PIN13_Msk (0x01 << PORT_PORTB_PULLD_PIN13_Pos) -#define PORT_PORTB_PULLD_PIN14_Pos 14 -#define PORT_PORTB_PULLD_PIN14_Msk (0x01 << PORT_PORTB_PULLD_PIN14_Pos) -#define PORT_PORTB_PULLD_PIN15_Pos 15 -#define PORT_PORTB_PULLD_PIN15_Msk (0x01 << PORT_PORTB_PULLD_PIN15_Pos) - -#define PORT_PORTN_PULLD_PIN0_Pos 0 -#define PORT_PORTN_PULLD_PIN0_Msk (0x01 << PORT_PORTN_PULLD_PIN0_Pos) -#define PORT_PORTN_PULLD_PIN1_Pos 1 -#define PORT_PORTN_PULLD_PIN1_Msk (0x01 << PORT_PORTN_PULLD_PIN1_Pos) -#define PORT_PORTN_PULLD_PIN2_Pos 2 -#define PORT_PORTN_PULLD_PIN2_Msk (0x01 << PORT_PORTN_PULLD_PIN2_Pos) -#define PORT_PORTN_PULLD_PIN3_Pos 3 -#define PORT_PORTN_PULLD_PIN3_Msk (0x01 << PORT_PORTN_PULLD_PIN3_Pos) -#define PORT_PORTN_PULLD_PIN4_Pos 4 -#define PORT_PORTN_PULLD_PIN4_Msk (0x01 << PORT_PORTN_PULLD_PIN4_Pos) -#define PORT_PORTN_PULLD_PIN5_Pos 5 -#define PORT_PORTN_PULLD_PIN5_Msk (0x01 << PORT_PORTN_PULLD_PIN5_Pos) -#define PORT_PORTN_PULLD_PIN6_Pos 6 -#define PORT_PORTN_PULLD_PIN6_Msk (0x01 << PORT_PORTN_PULLD_PIN6_Pos) -#define PORT_PORTN_PULLD_PIN7_Pos 7 -#define PORT_PORTN_PULLD_PIN7_Msk (0x01 << PORT_PORTN_PULLD_PIN7_Pos) -#define PORT_PORTN_PULLD_PIN8_Pos 8 -#define PORT_PORTN_PULLD_PIN8_Msk (0x01 << PORT_PORTN_PULLD_PIN8_Pos) -#define PORT_PORTN_PULLD_PIN9_Pos 9 -#define PORT_PORTN_PULLD_PIN9_Msk (0x01 << PORT_PORTN_PULLD_PIN9_Pos) -#define PORT_PORTN_PULLD_PIN10_Pos 10 -#define PORT_PORTN_PULLD_PIN10_Msk (0x01 << PORT_PORTN_PULLD_PIN10_Pos) -#define PORT_PORTN_PULLD_PIN11_Pos 11 -#define PORT_PORTN_PULLD_PIN11_Msk (0x01 << PORT_PORTN_PULLD_PIN11_Pos) -#define PORT_PORTN_PULLD_PIN12_Pos 12 -#define PORT_PORTN_PULLD_PIN12_Msk (0x01 << PORT_PORTN_PULLD_PIN12_Pos) -#define PORT_PORTN_PULLD_PIN13_Pos 13 -#define PORT_PORTN_PULLD_PIN13_Msk (0x01 << PORT_PORTN_PULLD_PIN13_Pos) -#define PORT_PORTN_PULLD_PIN14_Pos 14 -#define PORT_PORTN_PULLD_PIN14_Msk (0x01 << PORT_PORTN_PULLD_PIN14_Pos) -#define PORT_PORTN_PULLD_PIN15_Pos 15 -#define PORT_PORTN_PULLD_PIN15_Msk (0x01 << PORT_PORTN_PULLD_PIN15_Pos) -#define PORT_PORTN_PULLD_PIN16_Pos 16 -#define PORT_PORTN_PULLD_PIN16_Msk (0x01 << PORT_PORTN_PULLD_PIN16_Pos) -#define PORT_PORTN_PULLD_PIN17_Pos 17 -#define PORT_PORTN_PULLD_PIN17_Msk (0x01 << PORT_PORTN_PULLD_PIN17_Pos) -#define PORT_PORTN_PULLD_PIN18_Pos 18 -#define PORT_PORTN_PULLD_PIN18_Msk (0x01 << PORT_PORTN_PULLD_PIN18_Pos) -#define PORT_PORTN_PULLD_PIN19_Pos 19 -#define PORT_PORTN_PULLD_PIN19_Msk (0x01 << PORT_PORTN_PULLD_PIN19_Pos) -#define PORT_PORTN_PULLD_PIN20_Pos 20 -#define PORT_PORTN_PULLD_PIN20_Msk (0x01 << PORT_PORTN_PULLD_PIN20_Pos) -#define PORT_PORTN_PULLD_PIN21_Pos 21 -#define PORT_PORTN_PULLD_PIN21_Msk (0x01 << PORT_PORTN_PULLD_PIN21_Pos) -#define PORT_PORTN_PULLD_PIN22_Pos 22 -#define PORT_PORTN_PULLD_PIN22_Msk (0x01 << PORT_PORTN_PULLD_PIN22_Pos) -#define PORT_PORTN_PULLD_PIN23_Pos 23 -#define PORT_PORTN_PULLD_PIN23_Msk (0x01 << PORT_PORTN_PULLD_PIN23_Pos) - -#define PORT_PORTM_DRIVS_PIN0_Pos 0 -#define PORT_PORTM_DRIVS_PIN0_Msk (0x01 << PORT_PORTM_DRIVS_PIN0_Pos) -#define PORT_PORTM_DRIVS_PIN1_Pos 1 -#define PORT_PORTM_DRIVS_PIN1_Msk (0x01 << PORT_PORTM_DRIVS_PIN1_Pos) -#define PORT_PORTM_DRIVS_PIN2_Pos 2 -#define PORT_PORTM_DRIVS_PIN2_Msk (0x01 << PORT_PORTM_DRIVS_PIN2_Pos) -#define PORT_PORTM_DRIVS_PIN3_Pos 3 -#define PORT_PORTM_DRIVS_PIN3_Msk (0x01 << PORT_PORTM_DRIVS_PIN3_Pos) -#define PORT_PORTM_DRIVS_PIN4_Pos 4 -#define PORT_PORTM_DRIVS_PIN4_Msk (0x01 << PORT_PORTM_DRIVS_PIN4_Pos) -#define PORT_PORTM_DRIVS_PIN5_Pos 5 -#define PORT_PORTM_DRIVS_PIN5_Msk (0x01 << PORT_PORTM_DRIVS_PIN5_Pos) -#define PORT_PORTM_DRIVS_PIN6_Pos 6 -#define PORT_PORTM_DRIVS_PIN6_Msk (0x01 << PORT_PORTM_DRIVS_PIN6_Pos) -#define PORT_PORTM_DRIVS_PIN7_Pos 7 -#define PORT_PORTM_DRIVS_PIN7_Msk (0x01 << PORT_PORTM_DRIVS_PIN7_Pos) -#define PORT_PORTM_DRIVS_PIN8_Pos 8 -#define PORT_PORTM_DRIVS_PIN8_Msk (0x01 << PORT_PORTM_DRIVS_PIN8_Pos) -#define PORT_PORTM_DRIVS_PIN9_Pos 9 -#define PORT_PORTM_DRIVS_PIN9_Msk (0x01 << PORT_PORTM_DRIVS_PIN9_Pos) -#define PORT_PORTM_DRIVS_PIN10_Pos 10 -#define PORT_PORTM_DRIVS_PIN10_Msk (0x01 << PORT_PORTM_DRIVS_PIN10_Pos) -#define PORT_PORTM_DRIVS_PIN11_Pos 11 -#define PORT_PORTM_DRIVS_PIN11_Msk (0x01 << PORT_PORTM_DRIVS_PIN11_Pos) -#define PORT_PORTM_DRIVS_PIN12_Pos 12 -#define PORT_PORTM_DRIVS_PIN12_Msk (0x01 << PORT_PORTM_DRIVS_PIN12_Pos) -#define PORT_PORTM_DRIVS_PIN13_Pos 13 -#define PORT_PORTM_DRIVS_PIN13_Msk (0x01 << PORT_PORTM_DRIVS_PIN13_Pos) -#define PORT_PORTM_DRIVS_PIN14_Pos 14 -#define PORT_PORTM_DRIVS_PIN14_Msk (0x01 << PORT_PORTM_DRIVS_PIN14_Pos) -#define PORT_PORTM_DRIVS_PIN15_Pos 15 -#define PORT_PORTM_DRIVS_PIN15_Msk (0x01 << PORT_PORTM_DRIVS_PIN15_Pos) -#define PORT_PORTM_DRIVS_PIN16_Pos 16 -#define PORT_PORTM_DRIVS_PIN16_Msk (0x01 << PORT_PORTM_DRIVS_PIN16_Pos) -#define PORT_PORTM_DRIVS_PIN17_Pos 17 -#define PORT_PORTM_DRIVS_PIN17_Msk (0x01 << PORT_PORTM_DRIVS_PIN17_Pos) -#define PORT_PORTM_DRIVS_PIN18_Pos 18 -#define PORT_PORTM_DRIVS_PIN18_Msk (0x01 << PORT_PORTM_DRIVS_PIN18_Pos) -#define PORT_PORTM_DRIVS_PIN19_Pos 19 -#define PORT_PORTM_DRIVS_PIN19_Msk (0x01 << PORT_PORTM_DRIVS_PIN19_Pos) -#define PORT_PORTM_DRIVS_PIN20_Pos 20 -#define PORT_PORTM_DRIVS_PIN20_Msk (0x01 << PORT_PORTM_DRIVS_PIN20_Pos) -#define PORT_PORTM_DRIVS_PIN21_Pos 21 -#define PORT_PORTM_DRIVS_PIN21_Msk (0x01 << PORT_PORTM_DRIVS_PIN21_Pos) -#define PORT_PORTM_DRIVS_PIN22_Pos 22 -#define PORT_PORTM_DRIVS_PIN22_Msk (0x01 << PORT_PORTM_DRIVS_PIN22_Pos) -#define PORT_PORTM_DRIVS_PIN23_Pos 23 -#define PORT_PORTM_DRIVS_PIN23_Msk (0x01 << PORT_PORTM_DRIVS_PIN23_Pos) - -#define PORT_PORTN_DRIVS_PIN0_Pos 0 -#define PORT_PORTN_DRIVS_PIN0_Msk (0x01 << PORT_PORTN_DRIVS_PIN0_Pos) -#define PORT_PORTN_DRIVS_PIN1_Pos 1 -#define PORT_PORTN_DRIVS_PIN1_Msk (0x01 << PORT_PORTN_DRIVS_PIN1_Pos) -#define PORT_PORTN_DRIVS_PIN2_Pos 2 -#define PORT_PORTN_DRIVS_PIN2_Msk (0x01 << PORT_PORTN_DRIVS_PIN2_Pos) -#define PORT_PORTN_DRIVS_PIN3_Pos 3 -#define PORT_PORTN_DRIVS_PIN3_Msk (0x01 << PORT_PORTN_DRIVS_PIN3_Pos) -#define PORT_PORTN_DRIVS_PIN4_Pos 4 -#define PORT_PORTN_DRIVS_PIN4_Msk (0x01 << PORT_PORTN_DRIVS_PIN4_Pos) -#define PORT_PORTN_DRIVS_PIN5_Pos 5 -#define PORT_PORTN_DRIVS_PIN5_Msk (0x01 << PORT_PORTN_DRIVS_PIN5_Pos) -#define PORT_PORTN_DRIVS_PIN6_Pos 6 -#define PORT_PORTN_DRIVS_PIN6_Msk (0x01 << PORT_PORTN_DRIVS_PIN6_Pos) -#define PORT_PORTN_DRIVS_PIN7_Pos 7 -#define PORT_PORTN_DRIVS_PIN7_Msk (0x01 << PORT_PORTN_DRIVS_PIN7_Pos) -#define PORT_PORTN_DRIVS_PIN8_Pos 8 -#define PORT_PORTN_DRIVS_PIN8_Msk (0x01 << PORT_PORTN_DRIVS_PIN8_Pos) -#define PORT_PORTN_DRIVS_PIN9_Pos 9 -#define PORT_PORTN_DRIVS_PIN9_Msk (0x01 << PORT_PORTN_DRIVS_PIN9_Pos) -#define PORT_PORTN_DRIVS_PIN10_Pos 10 -#define PORT_PORTN_DRIVS_PIN10_Msk (0x01 << PORT_PORTN_DRIVS_PIN10_Pos) -#define PORT_PORTN_DRIVS_PIN11_Pos 11 -#define PORT_PORTN_DRIVS_PIN11_Msk (0x01 << PORT_PORTN_DRIVS_PIN11_Pos) -#define PORT_PORTN_DRIVS_PIN12_Pos 12 -#define PORT_PORTN_DRIVS_PIN12_Msk (0x01 << PORT_PORTN_DRIVS_PIN12_Pos) -#define PORT_PORTN_DRIVS_PIN13_Pos 13 -#define PORT_PORTN_DRIVS_PIN13_Msk (0x01 << PORT_PORTN_DRIVS_PIN13_Pos) -#define PORT_PORTN_DRIVS_PIN14_Pos 14 -#define PORT_PORTN_DRIVS_PIN14_Msk (0x01 << PORT_PORTN_DRIVS_PIN14_Pos) -#define PORT_PORTN_DRIVS_PIN15_Pos 15 -#define PORT_PORTN_DRIVS_PIN15_Msk (0x01 << PORT_PORTN_DRIVS_PIN15_Pos) -#define PORT_PORTN_DRIVS_PIN16_Pos 16 -#define PORT_PORTN_DRIVS_PIN16_Msk (0x01 << PORT_PORTN_DRIVS_PIN16_Pos) -#define PORT_PORTN_DRIVS_PIN17_Pos 17 -#define PORT_PORTN_DRIVS_PIN17_Msk (0x01 << PORT_PORTN_DRIVS_PIN17_Pos) -#define PORT_PORTN_DRIVS_PIN18_Pos 18 -#define PORT_PORTN_DRIVS_PIN18_Msk (0x01 << PORT_PORTN_DRIVS_PIN18_Pos) -#define PORT_PORTN_DRIVS_PIN19_Pos 19 -#define PORT_PORTN_DRIVS_PIN19_Msk (0x01 << PORT_PORTN_DRIVS_PIN19_Pos) -#define PORT_PORTN_DRIVS_PIN20_Pos 20 -#define PORT_PORTN_DRIVS_PIN20_Msk (0x01 << PORT_PORTN_DRIVS_PIN20_Pos) -#define PORT_PORTN_DRIVS_PIN21_Pos 21 -#define PORT_PORTN_DRIVS_PIN21_Msk (0x01 << PORT_PORTN_DRIVS_PIN21_Pos) -#define PORT_PORTN_DRIVS_PIN22_Pos 22 -#define PORT_PORTN_DRIVS_PIN22_Msk (0x01 << PORT_PORTN_DRIVS_PIN22_Pos) -#define PORT_PORTN_DRIVS_PIN23_Pos 23 -#define PORT_PORTN_DRIVS_PIN23_Msk (0x01 << PORT_PORTN_DRIVS_PIN23_Pos) - -#define PORT_PORTP_DRIVS_PIN0_Pos 0 -#define PORT_PORTP_DRIVS_PIN0_Msk (0x01 << PORT_PORTP_DRIVS_PIN0_Pos) -#define PORT_PORTP_DRIVS_PIN1_Pos 1 -#define PORT_PORTP_DRIVS_PIN1_Msk (0x01 << PORT_PORTP_DRIVS_PIN1_Pos) -#define PORT_PORTP_DRIVS_PIN2_Pos 2 -#define PORT_PORTP_DRIVS_PIN2_Msk (0x01 << PORT_PORTP_DRIVS_PIN2_Pos) -#define PORT_PORTP_DRIVS_PIN3_Pos 3 -#define PORT_PORTP_DRIVS_PIN3_Msk (0x01 << PORT_PORTP_DRIVS_PIN3_Pos) -#define PORT_PORTP_DRIVS_PIN4_Pos 4 -#define PORT_PORTP_DRIVS_PIN4_Msk (0x01 << PORT_PORTP_DRIVS_PIN4_Pos) -#define PORT_PORTP_DRIVS_PIN5_Pos 5 -#define PORT_PORTP_DRIVS_PIN5_Msk (0x01 << PORT_PORTP_DRIVS_PIN5_Pos) -#define PORT_PORTP_DRIVS_PIN6_Pos 6 -#define PORT_PORTP_DRIVS_PIN6_Msk (0x01 << PORT_PORTP_DRIVS_PIN6_Pos) -#define PORT_PORTP_DRIVS_PIN7_Pos 7 -#define PORT_PORTP_DRIVS_PIN7_Msk (0x01 << PORT_PORTP_DRIVS_PIN7_Pos) -#define PORT_PORTP_DRIVS_PIN8_Pos 8 -#define PORT_PORTP_DRIVS_PIN8_Msk (0x01 << PORT_PORTP_DRIVS_PIN8_Pos) -#define PORT_PORTP_DRIVS_PIN9_Pos 9 -#define PORT_PORTP_DRIVS_PIN9_Msk (0x01 << PORT_PORTP_DRIVS_PIN9_Pos) -#define PORT_PORTP_DRIVS_PIN10_Pos 10 -#define PORT_PORTP_DRIVS_PIN10_Msk (0x01 << PORT_PORTP_DRIVS_PIN10_Pos) -#define PORT_PORTP_DRIVS_PIN11_Pos 11 -#define PORT_PORTP_DRIVS_PIN11_Msk (0x01 << PORT_PORTP_DRIVS_PIN11_Pos) -#define PORT_PORTP_DRIVS_PIN12_Pos 12 -#define PORT_PORTP_DRIVS_PIN12_Msk (0x01 << PORT_PORTP_DRIVS_PIN12_Pos) -#define PORT_PORTP_DRIVS_PIN13_Pos 13 -#define PORT_PORTP_DRIVS_PIN13_Msk (0x01 << PORT_PORTP_DRIVS_PIN13_Pos) -#define PORT_PORTP_DRIVS_PIN14_Pos 14 -#define PORT_PORTP_DRIVS_PIN14_Msk (0x01 << PORT_PORTP_DRIVS_PIN14_Pos) -#define PORT_PORTP_DRIVS_PIN15_Pos 15 -#define PORT_PORTP_DRIVS_PIN15_Msk (0x01 << PORT_PORTP_DRIVS_PIN15_Pos) -#define PORT_PORTP_DRIVS_PIN16_Pos 16 -#define PORT_PORTP_DRIVS_PIN16_Msk (0x01 << PORT_PORTP_DRIVS_PIN16_Pos) -#define PORT_PORTP_DRIVS_PIN17_Pos 17 -#define PORT_PORTP_DRIVS_PIN17_Msk (0x01 << PORT_PORTP_DRIVS_PIN17_Pos) -#define PORT_PORTP_DRIVS_PIN18_Pos 18 -#define PORT_PORTP_DRIVS_PIN18_Msk (0x01 << PORT_PORTP_DRIVS_PIN18_Pos) -#define PORT_PORTP_DRIVS_PIN19_Pos 19 -#define PORT_PORTP_DRIVS_PIN19_Msk (0x01 << PORT_PORTP_DRIVS_PIN19_Pos) -#define PORT_PORTP_DRIVS_PIN20_Pos 20 -#define PORT_PORTP_DRIVS_PIN20_Msk (0x01 << PORT_PORTP_DRIVS_PIN20_Pos) -#define PORT_PORTP_DRIVS_PIN21_Pos 21 -#define PORT_PORTP_DRIVS_PIN21_Msk (0x01 << PORT_PORTP_DRIVS_PIN21_Pos) -#define PORT_PORTP_DRIVS_PIN22_Pos 22 -#define PORT_PORTP_DRIVS_PIN22_Msk (0x01 << PORT_PORTP_DRIVS_PIN22_Pos) -#define PORT_PORTP_DRIVS_PIN23_Pos 23 -#define PORT_PORTP_DRIVS_PIN23_Msk (0x01 << PORT_PORTP_DRIVS_PIN23_Pos) - -#define PORT_PORTA_INEN_PIN0_Pos 0 -#define PORT_PORTA_INEN_PIN0_Msk (0x01 << PORT_PORTA_INEN_PIN0_Pos) -#define PORT_PORTA_INEN_PIN1_Pos 1 -#define PORT_PORTA_INEN_PIN1_Msk (0x01 << PORT_PORTA_INEN_PIN1_Pos) -#define PORT_PORTA_INEN_PIN2_Pos 2 -#define PORT_PORTA_INEN_PIN2_Msk (0x01 << PORT_PORTA_INEN_PIN2_Pos) -#define PORT_PORTA_INEN_PIN3_Pos 3 -#define PORT_PORTA_INEN_PIN3_Msk (0x01 << PORT_PORTA_INEN_PIN3_Pos) -#define PORT_PORTA_INEN_PIN4_Pos 4 -#define PORT_PORTA_INEN_PIN4_Msk (0x01 << PORT_PORTA_INEN_PIN4_Pos) -#define PORT_PORTA_INEN_PIN5_Pos 5 -#define PORT_PORTA_INEN_PIN5_Msk (0x01 << PORT_PORTA_INEN_PIN5_Pos) -#define PORT_PORTA_INEN_PIN6_Pos 6 -#define PORT_PORTA_INEN_PIN6_Msk (0x01 << PORT_PORTA_INEN_PIN6_Pos) -#define PORT_PORTA_INEN_PIN7_Pos 7 -#define PORT_PORTA_INEN_PIN7_Msk (0x01 << PORT_PORTA_INEN_PIN7_Pos) -#define PORT_PORTA_INEN_PIN8_Pos 8 -#define PORT_PORTA_INEN_PIN8_Msk (0x01 << PORT_PORTA_INEN_PIN8_Pos) -#define PORT_PORTA_INEN_PIN9_Pos 9 -#define PORT_PORTA_INEN_PIN9_Msk (0x01 << PORT_PORTA_INEN_PIN9_Pos) -#define PORT_PORTA_INEN_PIN10_Pos 10 -#define PORT_PORTA_INEN_PIN10_Msk (0x01 << PORT_PORTA_INEN_PIN10_Pos) -#define PORT_PORTA_INEN_PIN11_Pos 11 -#define PORT_PORTA_INEN_PIN11_Msk (0x01 << PORT_PORTA_INEN_PIN11_Pos) -#define PORT_PORTA_INEN_PIN12_Pos 12 -#define PORT_PORTA_INEN_PIN12_Msk (0x01 << PORT_PORTA_INEN_PIN12_Pos) -#define PORT_PORTA_INEN_PIN13_Pos 13 -#define PORT_PORTA_INEN_PIN13_Msk (0x01 << PORT_PORTA_INEN_PIN13_Pos) -#define PORT_PORTA_INEN_PIN14_Pos 14 -#define PORT_PORTA_INEN_PIN14_Msk (0x01 << PORT_PORTA_INEN_PIN14_Pos) -#define PORT_PORTA_INEN_PIN15_Pos 15 -#define PORT_PORTA_INEN_PIN15_Msk (0x01 << PORT_PORTA_INEN_PIN15_Pos) - -#define PORT_PORTB_INEN_PIN0_Pos 0 -#define PORT_PORTB_INEN_PIN0_Msk (0x01 << PORT_PORTB_INEN_PIN0_Pos) -#define PORT_PORTB_INEN_PIN1_Pos 1 -#define PORT_PORTB_INEN_PIN1_Msk (0x01 << PORT_PORTB_INEN_PIN1_Pos) -#define PORT_PORTB_INEN_PIN2_Pos 2 -#define PORT_PORTB_INEN_PIN2_Msk (0x01 << PORT_PORTB_INEN_PIN2_Pos) -#define PORT_PORTB_INEN_PIN3_Pos 3 -#define PORT_PORTB_INEN_PIN3_Msk (0x01 << PORT_PORTB_INEN_PIN3_Pos) -#define PORT_PORTB_INEN_PIN4_Pos 4 -#define PORT_PORTB_INEN_PIN4_Msk (0x01 << PORT_PORTB_INEN_PIN4_Pos) -#define PORT_PORTB_INEN_PIN5_Pos 5 -#define PORT_PORTB_INEN_PIN5_Msk (0x01 << PORT_PORTB_INEN_PIN5_Pos) -#define PORT_PORTB_INEN_PIN6_Pos 6 -#define PORT_PORTB_INEN_PIN6_Msk (0x01 << PORT_PORTB_INEN_PIN6_Pos) -#define PORT_PORTB_INEN_PIN7_Pos 7 -#define PORT_PORTB_INEN_PIN7_Msk (0x01 << PORT_PORTB_INEN_PIN7_Pos) -#define PORT_PORTB_INEN_PIN8_Pos 8 -#define PORT_PORTB_INEN_PIN8_Msk (0x01 << PORT_PORTB_INEN_PIN8_Pos) -#define PORT_PORTB_INEN_PIN9_Pos 9 -#define PORT_PORTB_INEN_PIN9_Msk (0x01 << PORT_PORTB_INEN_PIN9_Pos) -#define PORT_PORTB_INEN_PIN10_Pos 10 -#define PORT_PORTB_INEN_PIN10_Msk (0x01 << PORT_PORTB_INEN_PIN10_Pos) -#define PORT_PORTB_INEN_PIN11_Pos 11 -#define PORT_PORTB_INEN_PIN11_Msk (0x01 << PORT_PORTB_INEN_PIN11_Pos) -#define PORT_PORTB_INEN_PIN12_Pos 12 -#define PORT_PORTB_INEN_PIN12_Msk (0x01 << PORT_PORTB_INEN_PIN12_Pos) -#define PORT_PORTB_INEN_PIN13_Pos 13 -#define PORT_PORTB_INEN_PIN13_Msk (0x01 << PORT_PORTB_INEN_PIN13_Pos) -#define PORT_PORTB_INEN_PIN14_Pos 14 -#define PORT_PORTB_INEN_PIN14_Msk (0x01 << PORT_PORTB_INEN_PIN14_Pos) -#define PORT_PORTB_INEN_PIN15_Pos 15 -#define PORT_PORTB_INEN_PIN15_Msk (0x01 << PORT_PORTB_INEN_PIN15_Pos) - -#define PORT_PORTC_INEN_PIN0_Pos 0 -#define PORT_PORTC_INEN_PIN0_Msk (0x01 << PORT_PORTC_INEN_PIN0_Pos) -#define PORT_PORTC_INEN_PIN1_Pos 1 -#define PORT_PORTC_INEN_PIN1_Msk (0x01 << PORT_PORTC_INEN_PIN1_Pos) -#define PORT_PORTC_INEN_PIN2_Pos 2 -#define PORT_PORTC_INEN_PIN2_Msk (0x01 << PORT_PORTC_INEN_PIN2_Pos) -#define PORT_PORTC_INEN_PIN3_Pos 3 -#define PORT_PORTC_INEN_PIN3_Msk (0x01 << PORT_PORTC_INEN_PIN3_Pos) -#define PORT_PORTC_INEN_PIN4_Pos 4 -#define PORT_PORTC_INEN_PIN4_Msk (0x01 << PORT_PORTC_INEN_PIN4_Pos) -#define PORT_PORTC_INEN_PIN5_Pos 5 -#define PORT_PORTC_INEN_PIN5_Msk (0x01 << PORT_PORTC_INEN_PIN5_Pos) -#define PORT_PORTC_INEN_PIN6_Pos 6 -#define PORT_PORTC_INEN_PIN6_Msk (0x01 << PORT_PORTC_INEN_PIN6_Pos) -#define PORT_PORTC_INEN_PIN7_Pos 7 -#define PORT_PORTC_INEN_PIN7_Msk (0x01 << PORT_PORTC_INEN_PIN7_Pos) -#define PORT_PORTC_INEN_PIN8_Pos 8 -#define PORT_PORTC_INEN_PIN8_Msk (0x01 << PORT_PORTC_INEN_PIN8_Pos) -#define PORT_PORTC_INEN_PIN9_Pos 9 -#define PORT_PORTC_INEN_PIN9_Msk (0x01 << PORT_PORTC_INEN_PIN9_Pos) -#define PORT_PORTC_INEN_PIN10_Pos 10 -#define PORT_PORTC_INEN_PIN10_Msk (0x01 << PORT_PORTC_INEN_PIN10_Pos) -#define PORT_PORTC_INEN_PIN11_Pos 11 -#define PORT_PORTC_INEN_PIN11_Msk (0x01 << PORT_PORTC_INEN_PIN11_Pos) -#define PORT_PORTC_INEN_PIN12_Pos 12 -#define PORT_PORTC_INEN_PIN12_Msk (0x01 << PORT_PORTC_INEN_PIN12_Pos) -#define PORT_PORTC_INEN_PIN13_Pos 13 -#define PORT_PORTC_INEN_PIN13_Msk (0x01 << PORT_PORTC_INEN_PIN13_Pos) -#define PORT_PORTC_INEN_PIN14_Pos 14 -#define PORT_PORTC_INEN_PIN14_Msk (0x01 << PORT_PORTC_INEN_PIN14_Pos) -#define PORT_PORTC_INEN_PIN15_Pos 15 -#define PORT_PORTC_INEN_PIN15_Msk (0x01 << PORT_PORTC_INEN_PIN15_Pos) - -#define PORT_PORTM_INEN_PIN0_Pos 0 -#define PORT_PORTM_INEN_PIN0_Msk (0x01 << PORT_PORTM_INEN_PIN0_Pos) -#define PORT_PORTM_INEN_PIN1_Pos 1 -#define PORT_PORTM_INEN_PIN1_Msk (0x01 << PORT_PORTM_INEN_PIN1_Pos) -#define PORT_PORTM_INEN_PIN2_Pos 2 -#define PORT_PORTM_INEN_PIN2_Msk (0x01 << PORT_PORTM_INEN_PIN2_Pos) -#define PORT_PORTM_INEN_PIN3_Pos 3 -#define PORT_PORTM_INEN_PIN3_Msk (0x01 << PORT_PORTM_INEN_PIN3_Pos) -#define PORT_PORTM_INEN_PIN4_Pos 4 -#define PORT_PORTM_INEN_PIN4_Msk (0x01 << PORT_PORTM_INEN_PIN4_Pos) -#define PORT_PORTM_INEN_PIN5_Pos 5 -#define PORT_PORTM_INEN_PIN5_Msk (0x01 << PORT_PORTM_INEN_PIN5_Pos) -#define PORT_PORTM_INEN_PIN6_Pos 6 -#define PORT_PORTM_INEN_PIN6_Msk (0x01 << PORT_PORTM_INEN_PIN6_Pos) -#define PORT_PORTM_INEN_PIN7_Pos 7 -#define PORT_PORTM_INEN_PIN7_Msk (0x01 << PORT_PORTM_INEN_PIN7_Pos) -#define PORT_PORTM_INEN_PIN8_Pos 8 -#define PORT_PORTM_INEN_PIN8_Msk (0x01 << PORT_PORTM_INEN_PIN8_Pos) -#define PORT_PORTM_INEN_PIN9_Pos 9 -#define PORT_PORTM_INEN_PIN9_Msk (0x01 << PORT_PORTM_INEN_PIN9_Pos) -#define PORT_PORTM_INEN_PIN10_Pos 10 -#define PORT_PORTM_INEN_PIN10_Msk (0x01 << PORT_PORTM_INEN_PIN10_Pos) -#define PORT_PORTM_INEN_PIN11_Pos 11 -#define PORT_PORTM_INEN_PIN11_Msk (0x01 << PORT_PORTM_INEN_PIN11_Pos) -#define PORT_PORTM_INEN_PIN12_Pos 12 -#define PORT_PORTM_INEN_PIN12_Msk (0x01 << PORT_PORTM_INEN_PIN12_Pos) -#define PORT_PORTM_INEN_PIN13_Pos 13 -#define PORT_PORTM_INEN_PIN13_Msk (0x01 << PORT_PORTM_INEN_PIN13_Pos) -#define PORT_PORTM_INEN_PIN14_Pos 14 -#define PORT_PORTM_INEN_PIN14_Msk (0x01 << PORT_PORTM_INEN_PIN14_Pos) -#define PORT_PORTM_INEN_PIN15_Pos 15 -#define PORT_PORTM_INEN_PIN15_Msk (0x01 << PORT_PORTM_INEN_PIN15_Pos) -#define PORT_PORTM_INEN_PIN16_Pos 16 -#define PORT_PORTM_INEN_PIN16_Msk (0x01 << PORT_PORTM_INEN_PIN16_Pos) -#define PORT_PORTM_INEN_PIN17_Pos 17 -#define PORT_PORTM_INEN_PIN17_Msk (0x01 << PORT_PORTM_INEN_PIN17_Pos) -#define PORT_PORTM_INEN_PIN18_Pos 18 -#define PORT_PORTM_INEN_PIN18_Msk (0x01 << PORT_PORTM_INEN_PIN18_Pos) -#define PORT_PORTM_INEN_PIN19_Pos 19 -#define PORT_PORTM_INEN_PIN19_Msk (0x01 << PORT_PORTM_INEN_PIN19_Pos) -#define PORT_PORTM_INEN_PIN20_Pos 20 -#define PORT_PORTM_INEN_PIN20_Msk (0x01 << PORT_PORTM_INEN_PIN20_Pos) -#define PORT_PORTM_INEN_PIN21_Pos 21 -#define PORT_PORTM_INEN_PIN21_Msk (0x01 << PORT_PORTM_INEN_PIN21_Pos) -#define PORT_PORTM_INEN_PIN22_Pos 22 -#define PORT_PORTM_INEN_PIN22_Msk (0x01 << PORT_PORTM_INEN_PIN22_Pos) -#define PORT_PORTM_INEN_PIN23_Pos 23 -#define PORT_PORTM_INEN_PIN23_Msk (0x01 << PORT_PORTM_INEN_PIN23_Pos) - -#define PORT_PORTN_INEN_PIN0_Pos 0 -#define PORT_PORTN_INEN_PIN0_Msk (0x01 << PORT_PORTN_INEN_PIN0_Pos) -#define PORT_PORTN_INEN_PIN1_Pos 1 -#define PORT_PORTN_INEN_PIN1_Msk (0x01 << PORT_PORTN_INEN_PIN1_Pos) -#define PORT_PORTN_INEN_PIN2_Pos 2 -#define PORT_PORTN_INEN_PIN2_Msk (0x01 << PORT_PORTN_INEN_PIN2_Pos) -#define PORT_PORTN_INEN_PIN3_Pos 3 -#define PORT_PORTN_INEN_PIN3_Msk (0x01 << PORT_PORTN_INEN_PIN3_Pos) -#define PORT_PORTN_INEN_PIN4_Pos 4 -#define PORT_PORTN_INEN_PIN4_Msk (0x01 << PORT_PORTN_INEN_PIN4_Pos) -#define PORT_PORTN_INEN_PIN5_Pos 5 -#define PORT_PORTN_INEN_PIN5_Msk (0x01 << PORT_PORTN_INEN_PIN5_Pos) -#define PORT_PORTN_INEN_PIN6_Pos 6 -#define PORT_PORTN_INEN_PIN6_Msk (0x01 << PORT_PORTN_INEN_PIN6_Pos) -#define PORT_PORTN_INEN_PIN7_Pos 7 -#define PORT_PORTN_INEN_PIN7_Msk (0x01 << PORT_PORTN_INEN_PIN7_Pos) -#define PORT_PORTN_INEN_PIN8_Pos 8 -#define PORT_PORTN_INEN_PIN8_Msk (0x01 << PORT_PORTN_INEN_PIN8_Pos) -#define PORT_PORTN_INEN_PIN9_Pos 9 -#define PORT_PORTN_INEN_PIN9_Msk (0x01 << PORT_PORTN_INEN_PIN9_Pos) -#define PORT_PORTN_INEN_PIN10_Pos 10 -#define PORT_PORTN_INEN_PIN10_Msk (0x01 << PORT_PORTN_INEN_PIN10_Pos) -#define PORT_PORTN_INEN_PIN11_Pos 11 -#define PORT_PORTN_INEN_PIN11_Msk (0x01 << PORT_PORTN_INEN_PIN11_Pos) -#define PORT_PORTN_INEN_PIN12_Pos 12 -#define PORT_PORTN_INEN_PIN12_Msk (0x01 << PORT_PORTN_INEN_PIN12_Pos) -#define PORT_PORTN_INEN_PIN13_Pos 13 -#define PORT_PORTN_INEN_PIN13_Msk (0x01 << PORT_PORTN_INEN_PIN13_Pos) -#define PORT_PORTN_INEN_PIN14_Pos 14 -#define PORT_PORTN_INEN_PIN14_Msk (0x01 << PORT_PORTN_INEN_PIN14_Pos) -#define PORT_PORTN_INEN_PIN15_Pos 15 -#define PORT_PORTN_INEN_PIN15_Msk (0x01 << PORT_PORTN_INEN_PIN15_Pos) -#define PORT_PORTN_INEN_PIN16_Pos 16 -#define PORT_PORTN_INEN_PIN16_Msk (0x01 << PORT_PORTN_INEN_PIN16_Pos) -#define PORT_PORTN_INEN_PIN17_Pos 17 -#define PORT_PORTN_INEN_PIN17_Msk (0x01 << PORT_PORTN_INEN_PIN17_Pos) -#define PORT_PORTN_INEN_PIN18_Pos 18 -#define PORT_PORTN_INEN_PIN18_Msk (0x01 << PORT_PORTN_INEN_PIN18_Pos) -#define PORT_PORTN_INEN_PIN19_Pos 19 -#define PORT_PORTN_INEN_PIN19_Msk (0x01 << PORT_PORTN_INEN_PIN19_Pos) -#define PORT_PORTN_INEN_PIN20_Pos 20 -#define PORT_PORTN_INEN_PIN20_Msk (0x01 << PORT_PORTN_INEN_PIN20_Pos) -#define PORT_PORTN_INEN_PIN21_Pos 21 -#define PORT_PORTN_INEN_PIN21_Msk (0x01 << PORT_PORTN_INEN_PIN21_Pos) -#define PORT_PORTN_INEN_PIN22_Pos 22 -#define PORT_PORTN_INEN_PIN22_Msk (0x01 << PORT_PORTN_INEN_PIN22_Pos) -#define PORT_PORTN_INEN_PIN23_Pos 23 -#define PORT_PORTN_INEN_PIN23_Msk (0x01 << PORT_PORTN_INEN_PIN23_Pos) - -#define PORT_PORTP_INEN_PIN0_Pos 0 -#define PORT_PORTP_INEN_PIN0_Msk (0x01 << PORT_PORTP_INEN_PIN0_Pos) -#define PORT_PORTP_INEN_PIN1_Pos 1 -#define PORT_PORTP_INEN_PIN1_Msk (0x01 << PORT_PORTP_INEN_PIN1_Pos) -#define PORT_PORTP_INEN_PIN2_Pos 2 -#define PORT_PORTP_INEN_PIN2_Msk (0x01 << PORT_PORTP_INEN_PIN2_Pos) -#define PORT_PORTP_INEN_PIN3_Pos 3 -#define PORT_PORTP_INEN_PIN3_Msk (0x01 << PORT_PORTP_INEN_PIN3_Pos) -#define PORT_PORTP_INEN_PIN4_Pos 4 -#define PORT_PORTP_INEN_PIN4_Msk (0x01 << PORT_PORTP_INEN_PIN4_Pos) -#define PORT_PORTP_INEN_PIN5_Pos 5 -#define PORT_PORTP_INEN_PIN5_Msk (0x01 << PORT_PORTP_INEN_PIN5_Pos) -#define PORT_PORTP_INEN_PIN6_Pos 6 -#define PORT_PORTP_INEN_PIN6_Msk (0x01 << PORT_PORTP_INEN_PIN6_Pos) -#define PORT_PORTP_INEN_PIN7_Pos 7 -#define PORT_PORTP_INEN_PIN7_Msk (0x01 << PORT_PORTP_INEN_PIN7_Pos) -#define PORT_PORTP_INEN_PIN8_Pos 8 -#define PORT_PORTP_INEN_PIN8_Msk (0x01 << PORT_PORTP_INEN_PIN8_Pos) -#define PORT_PORTP_INEN_PIN9_Pos 9 -#define PORT_PORTP_INEN_PIN9_Msk (0x01 << PORT_PORTP_INEN_PIN9_Pos) -#define PORT_PORTP_INEN_PIN10_Pos 10 -#define PORT_PORTP_INEN_PIN10_Msk (0x01 << PORT_PORTP_INEN_PIN10_Pos) -#define PORT_PORTP_INEN_PIN11_Pos 11 -#define PORT_PORTP_INEN_PIN11_Msk (0x01 << PORT_PORTP_INEN_PIN11_Pos) -#define PORT_PORTP_INEN_PIN12_Pos 12 -#define PORT_PORTP_INEN_PIN12_Msk (0x01 << PORT_PORTP_INEN_PIN12_Pos) -#define PORT_PORTP_INEN_PIN13_Pos 13 -#define PORT_PORTP_INEN_PIN13_Msk (0x01 << PORT_PORTP_INEN_PIN13_Pos) -#define PORT_PORTP_INEN_PIN14_Pos 14 -#define PORT_PORTP_INEN_PIN14_Msk (0x01 << PORT_PORTP_INEN_PIN14_Pos) -#define PORT_PORTP_INEN_PIN15_Pos 15 -#define PORT_PORTP_INEN_PIN15_Msk (0x01 << PORT_PORTP_INEN_PIN15_Pos) -#define PORT_PORTP_INEN_PIN16_Pos 16 -#define PORT_PORTP_INEN_PIN16_Msk (0x01 << PORT_PORTP_INEN_PIN16_Pos) -#define PORT_PORTP_INEN_PIN17_Pos 17 -#define PORT_PORTP_INEN_PIN17_Msk (0x01 << PORT_PORTP_INEN_PIN17_Pos) -#define PORT_PORTP_INEN_PIN18_Pos 18 -#define PORT_PORTP_INEN_PIN18_Msk (0x01 << PORT_PORTP_INEN_PIN18_Pos) -#define PORT_PORTP_INEN_PIN19_Pos 19 -#define PORT_PORTP_INEN_PIN19_Msk (0x01 << PORT_PORTP_INEN_PIN19_Pos) -#define PORT_PORTP_INEN_PIN20_Pos 20 -#define PORT_PORTP_INEN_PIN20_Msk (0x01 << PORT_PORTP_INEN_PIN20_Pos) -#define PORT_PORTP_INEN_PIN21_Pos 21 -#define PORT_PORTP_INEN_PIN21_Msk (0x01 << PORT_PORTP_INEN_PIN21_Pos) -#define PORT_PORTP_INEN_PIN22_Pos 22 -#define PORT_PORTP_INEN_PIN22_Msk (0x01 << PORT_PORTP_INEN_PIN22_Pos) -#define PORT_PORTP_INEN_PIN23_Pos 23 -#define PORT_PORTP_INEN_PIN23_Msk (0x01 << PORT_PORTP_INEN_PIN23_Pos) - - - - -typedef struct { - __IO uint32_t DATA; -#define PIN0 0 -#define PIN1 1 -#define PIN2 2 -#define PIN3 3 -#define PIN4 4 -#define PIN5 5 -#define PIN6 6 -#define PIN7 7 -#define PIN8 8 -#define PIN9 9 -#define PIN10 10 -#define PIN11 11 -#define PIN12 12 -#define PIN13 13 -#define PIN14 14 -#define PIN15 15 -#define PIN16 16 -#define PIN17 17 -#define PIN18 18 -#define PIN19 19 -#define PIN20 20 -#define PIN21 21 -#define PIN22 22 -#define PIN23 23 -#define PIN24 24 - - __IO uint32_t DIR; //0 输入 1 输出 - - __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触å�‘中断 0 边沿触å�‘中断 - - __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触å�‘中断时,此ä½�ç½®1表示上å�‡æ²¿å’Œä¸‹é™�沿都触å�‘中断,置0时触å�‘边沿由INTRISEEN选择 - - __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上å�‡æ²¿/高电平触å�‘中断 0 下é™�沿/低电平触å�‘中断 - - __IO uint32_t INTEN; //1 中断使能 0 中断ç¦�æ­¢ - - __IO uint32_t INTRAWSTAT; //中断检测å�•元是å�¦æ£€æµ‹åˆ°äº†è§¦å�‘中断的æ�¡ä»¶ 1 检测到了中断触å�‘æ�¡ä»¶ 0 没有检测到中断触å�‘æ�¡ä»¶ - - __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0 - - __IO uint32_t INTCLR; //写1清除中断标志,å�ªå¯¹è¾¹æ²¿è§¦å�‘中断有用 +#define PORT_PORTA_PULLU_PIN0_Pos 0 +#define PORT_PORTA_PULLU_PIN0_Msk (0x01 << PORT_PORTA_PULLU_PIN0_Pos) +#define PORT_PORTA_PULLU_PIN1_Pos 1 +#define PORT_PORTA_PULLU_PIN1_Msk (0x01 << PORT_PORTA_PULLU_PIN1_Pos) +#define PORT_PORTA_PULLU_PIN2_Pos 2 +#define PORT_PORTA_PULLU_PIN2_Msk (0x01 << PORT_PORTA_PULLU_PIN2_Pos) +#define PORT_PORTA_PULLU_PIN3_Pos 3 +#define PORT_PORTA_PULLU_PIN3_Msk (0x01 << PORT_PORTA_PULLU_PIN3_Pos) +#define PORT_PORTA_PULLU_PIN4_Pos 4 +#define PORT_PORTA_PULLU_PIN4_Msk (0x01 << PORT_PORTA_PULLU_PIN4_Pos) +#define PORT_PORTA_PULLU_PIN5_Pos 5 +#define PORT_PORTA_PULLU_PIN5_Msk (0x01 << PORT_PORTA_PULLU_PIN5_Pos) +#define PORT_PORTA_PULLU_PIN6_Pos 6 +#define PORT_PORTA_PULLU_PIN6_Msk (0x01 << PORT_PORTA_PULLU_PIN6_Pos) +#define PORT_PORTA_PULLU_PIN7_Pos 7 +#define PORT_PORTA_PULLU_PIN7_Msk (0x01 << PORT_PORTA_PULLU_PIN7_Pos) +#define PORT_PORTA_PULLU_PIN8_Pos 8 +#define PORT_PORTA_PULLU_PIN8_Msk (0x01 << PORT_PORTA_PULLU_PIN8_Pos) +#define PORT_PORTA_PULLU_PIN9_Pos 9 +#define PORT_PORTA_PULLU_PIN9_Msk (0x01 << PORT_PORTA_PULLU_PIN9_Pos) +#define PORT_PORTA_PULLU_PIN10_Pos 10 +#define PORT_PORTA_PULLU_PIN10_Msk (0x01 << PORT_PORTA_PULLU_PIN10_Pos) +#define PORT_PORTA_PULLU_PIN11_Pos 11 +#define PORT_PORTA_PULLU_PIN11_Msk (0x01 << PORT_PORTA_PULLU_PIN11_Pos) +#define PORT_PORTA_PULLU_PIN12_Pos 12 +#define PORT_PORTA_PULLU_PIN12_Msk (0x01 << PORT_PORTA_PULLU_PIN12_Pos) +#define PORT_PORTA_PULLU_PIN13_Pos 13 +#define PORT_PORTA_PULLU_PIN13_Msk (0x01 << PORT_PORTA_PULLU_PIN13_Pos) +#define PORT_PORTA_PULLU_PIN14_Pos 14 +#define PORT_PORTA_PULLU_PIN14_Msk (0x01 << PORT_PORTA_PULLU_PIN14_Pos) +#define PORT_PORTA_PULLU_PIN15_Pos 15 +#define PORT_PORTA_PULLU_PIN15_Msk (0x01 << PORT_PORTA_PULLU_PIN15_Pos) + +#define PORT_PORTC_PULLU_PIN0_Pos 0 +#define PORT_PORTC_PULLU_PIN0_Msk (0x01 << PORT_PORTC_PULLU_PIN0_Pos) +#define PORT_PORTC_PULLU_PIN1_Pos 1 +#define PORT_PORTC_PULLU_PIN1_Msk (0x01 << PORT_PORTC_PULLU_PIN1_Pos) +#define PORT_PORTC_PULLU_PIN2_Pos 2 +#define PORT_PORTC_PULLU_PIN2_Msk (0x01 << PORT_PORTC_PULLU_PIN2_Pos) +#define PORT_PORTC_PULLU_PIN3_Pos 3 +#define PORT_PORTC_PULLU_PIN3_Msk (0x01 << PORT_PORTC_PULLU_PIN3_Pos) +#define PORT_PORTC_PULLU_PIN4_Pos 4 +#define PORT_PORTC_PULLU_PIN4_Msk (0x01 << PORT_PORTC_PULLU_PIN4_Pos) +#define PORT_PORTC_PULLU_PIN5_Pos 5 +#define PORT_PORTC_PULLU_PIN5_Msk (0x01 << PORT_PORTC_PULLU_PIN5_Pos) +#define PORT_PORTC_PULLU_PIN6_Pos 6 +#define PORT_PORTC_PULLU_PIN6_Msk (0x01 << PORT_PORTC_PULLU_PIN6_Pos) +#define PORT_PORTC_PULLU_PIN7_Pos 7 +#define PORT_PORTC_PULLU_PIN7_Msk (0x01 << PORT_PORTC_PULLU_PIN7_Pos) +#define PORT_PORTC_PULLU_PIN8_Pos 8 +#define PORT_PORTC_PULLU_PIN8_Msk (0x01 << PORT_PORTC_PULLU_PIN8_Pos) +#define PORT_PORTC_PULLU_PIN9_Pos 9 +#define PORT_PORTC_PULLU_PIN9_Msk (0x01 << PORT_PORTC_PULLU_PIN9_Pos) +#define PORT_PORTC_PULLU_PIN10_Pos 10 +#define PORT_PORTC_PULLU_PIN10_Msk (0x01 << PORT_PORTC_PULLU_PIN10_Pos) +#define PORT_PORTC_PULLU_PIN11_Pos 11 +#define PORT_PORTC_PULLU_PIN11_Msk (0x01 << PORT_PORTC_PULLU_PIN11_Pos) +#define PORT_PORTC_PULLU_PIN12_Pos 12 +#define PORT_PORTC_PULLU_PIN12_Msk (0x01 << PORT_PORTC_PULLU_PIN12_Pos) +#define PORT_PORTC_PULLU_PIN13_Pos 13 +#define PORT_PORTC_PULLU_PIN13_Msk (0x01 << PORT_PORTC_PULLU_PIN13_Pos) +#define PORT_PORTC_PULLU_PIN14_Pos 14 +#define PORT_PORTC_PULLU_PIN14_Msk (0x01 << PORT_PORTC_PULLU_PIN14_Pos) +#define PORT_PORTC_PULLU_PIN15_Pos 15 +#define PORT_PORTC_PULLU_PIN15_Msk (0x01 << PORT_PORTC_PULLU_PIN15_Pos) + +#define PORT_PORTM_PULLU_PIN0_Pos 0 +#define PORT_PORTM_PULLU_PIN0_Msk (0x01 << PORT_PORTM_PULLU_PIN0_Pos) +#define PORT_PORTM_PULLU_PIN1_Pos 1 +#define PORT_PORTM_PULLU_PIN1_Msk (0x01 << PORT_PORTM_PULLU_PIN1_Pos) +#define PORT_PORTM_PULLU_PIN2_Pos 2 +#define PORT_PORTM_PULLU_PIN2_Msk (0x01 << PORT_PORTM_PULLU_PIN2_Pos) +#define PORT_PORTM_PULLU_PIN3_Pos 3 +#define PORT_PORTM_PULLU_PIN3_Msk (0x01 << PORT_PORTM_PULLU_PIN3_Pos) +#define PORT_PORTM_PULLU_PIN4_Pos 4 +#define PORT_PORTM_PULLU_PIN4_Msk (0x01 << PORT_PORTM_PULLU_PIN4_Pos) +#define PORT_PORTM_PULLU_PIN5_Pos 5 +#define PORT_PORTM_PULLU_PIN5_Msk (0x01 << PORT_PORTM_PULLU_PIN5_Pos) +#define PORT_PORTM_PULLU_PIN6_Pos 6 +#define PORT_PORTM_PULLU_PIN6_Msk (0x01 << PORT_PORTM_PULLU_PIN6_Pos) +#define PORT_PORTM_PULLU_PIN7_Pos 7 +#define PORT_PORTM_PULLU_PIN7_Msk (0x01 << PORT_PORTM_PULLU_PIN7_Pos) +#define PORT_PORTM_PULLU_PIN8_Pos 8 +#define PORT_PORTM_PULLU_PIN8_Msk (0x01 << PORT_PORTM_PULLU_PIN8_Pos) +#define PORT_PORTM_PULLU_PIN9_Pos 9 +#define PORT_PORTM_PULLU_PIN9_Msk (0x01 << PORT_PORTM_PULLU_PIN9_Pos) +#define PORT_PORTM_PULLU_PIN10_Pos 10 +#define PORT_PORTM_PULLU_PIN10_Msk (0x01 << PORT_PORTM_PULLU_PIN10_Pos) +#define PORT_PORTM_PULLU_PIN11_Pos 11 +#define PORT_PORTM_PULLU_PIN11_Msk (0x01 << PORT_PORTM_PULLU_PIN11_Pos) +#define PORT_PORTM_PULLU_PIN12_Pos 12 +#define PORT_PORTM_PULLU_PIN12_Msk (0x01 << PORT_PORTM_PULLU_PIN12_Pos) +#define PORT_PORTM_PULLU_PIN13_Pos 13 +#define PORT_PORTM_PULLU_PIN13_Msk (0x01 << PORT_PORTM_PULLU_PIN13_Pos) +#define PORT_PORTM_PULLU_PIN14_Pos 14 +#define PORT_PORTM_PULLU_PIN14_Msk (0x01 << PORT_PORTM_PULLU_PIN14_Pos) +#define PORT_PORTM_PULLU_PIN15_Pos 15 +#define PORT_PORTM_PULLU_PIN15_Msk (0x01 << PORT_PORTM_PULLU_PIN15_Pos) +#define PORT_PORTM_PULLU_PIN16_Pos 16 +#define PORT_PORTM_PULLU_PIN16_Msk (0x01 << PORT_PORTM_PULLU_PIN16_Pos) +#define PORT_PORTM_PULLU_PIN17_Pos 17 +#define PORT_PORTM_PULLU_PIN17_Msk (0x01 << PORT_PORTM_PULLU_PIN17_Pos) +#define PORT_PORTM_PULLU_PIN18_Pos 18 +#define PORT_PORTM_PULLU_PIN18_Msk (0x01 << PORT_PORTM_PULLU_PIN18_Pos) +#define PORT_PORTM_PULLU_PIN19_Pos 19 +#define PORT_PORTM_PULLU_PIN19_Msk (0x01 << PORT_PORTM_PULLU_PIN19_Pos) +#define PORT_PORTM_PULLU_PIN20_Pos 20 +#define PORT_PORTM_PULLU_PIN20_Msk (0x01 << PORT_PORTM_PULLU_PIN20_Pos) +#define PORT_PORTM_PULLU_PIN21_Pos 21 +#define PORT_PORTM_PULLU_PIN21_Msk (0x01 << PORT_PORTM_PULLU_PIN21_Pos) +#define PORT_PORTM_PULLU_PIN22_Pos 22 +#define PORT_PORTM_PULLU_PIN22_Msk (0x01 << PORT_PORTM_PULLU_PIN22_Pos) +#define PORT_PORTM_PULLU_PIN23_Pos 23 +#define PORT_PORTM_PULLU_PIN23_Msk (0x01 << PORT_PORTM_PULLU_PIN23_Pos) + +#define PORT_PORTP_PULLU_PIN0_Pos 0 +#define PORT_PORTP_PULLU_PIN0_Msk (0x01 << PORT_PORTP_PULLU_PIN0_Pos) +#define PORT_PORTP_PULLU_PIN1_Pos 1 +#define PORT_PORTP_PULLU_PIN1_Msk (0x01 << PORT_PORTP_PULLU_PIN1_Pos) +#define PORT_PORTP_PULLU_PIN2_Pos 2 +#define PORT_PORTP_PULLU_PIN2_Msk (0x01 << PORT_PORTP_PULLU_PIN2_Pos) +#define PORT_PORTP_PULLU_PIN3_Pos 3 +#define PORT_PORTP_PULLU_PIN3_Msk (0x01 << PORT_PORTP_PULLU_PIN3_Pos) +#define PORT_PORTP_PULLU_PIN4_Pos 4 +#define PORT_PORTP_PULLU_PIN4_Msk (0x01 << PORT_PORTP_PULLU_PIN4_Pos) +#define PORT_PORTP_PULLU_PIN5_Pos 5 +#define PORT_PORTP_PULLU_PIN5_Msk (0x01 << PORT_PORTP_PULLU_PIN5_Pos) +#define PORT_PORTP_PULLU_PIN6_Pos 6 +#define PORT_PORTP_PULLU_PIN6_Msk (0x01 << PORT_PORTP_PULLU_PIN6_Pos) +#define PORT_PORTP_PULLU_PIN7_Pos 7 +#define PORT_PORTP_PULLU_PIN7_Msk (0x01 << PORT_PORTP_PULLU_PIN7_Pos) +#define PORT_PORTP_PULLU_PIN8_Pos 8 +#define PORT_PORTP_PULLU_PIN8_Msk (0x01 << PORT_PORTP_PULLU_PIN8_Pos) +#define PORT_PORTP_PULLU_PIN9_Pos 9 +#define PORT_PORTP_PULLU_PIN9_Msk (0x01 << PORT_PORTP_PULLU_PIN9_Pos) +#define PORT_PORTP_PULLU_PIN10_Pos 10 +#define PORT_PORTP_PULLU_PIN10_Msk (0x01 << PORT_PORTP_PULLU_PIN10_Pos) +#define PORT_PORTP_PULLU_PIN11_Pos 11 +#define PORT_PORTP_PULLU_PIN11_Msk (0x01 << PORT_PORTP_PULLU_PIN11_Pos) +#define PORT_PORTP_PULLU_PIN12_Pos 12 +#define PORT_PORTP_PULLU_PIN12_Msk (0x01 << PORT_PORTP_PULLU_PIN12_Pos) +#define PORT_PORTP_PULLU_PIN13_Pos 13 +#define PORT_PORTP_PULLU_PIN13_Msk (0x01 << PORT_PORTP_PULLU_PIN13_Pos) +#define PORT_PORTP_PULLU_PIN14_Pos 14 +#define PORT_PORTP_PULLU_PIN14_Msk (0x01 << PORT_PORTP_PULLU_PIN14_Pos) +#define PORT_PORTP_PULLU_PIN15_Pos 15 +#define PORT_PORTP_PULLU_PIN15_Msk (0x01 << PORT_PORTP_PULLU_PIN15_Pos) +#define PORT_PORTP_PULLU_PIN16_Pos 16 +#define PORT_PORTP_PULLU_PIN16_Msk (0x01 << PORT_PORTP_PULLU_PIN16_Pos) +#define PORT_PORTP_PULLU_PIN17_Pos 17 +#define PORT_PORTP_PULLU_PIN17_Msk (0x01 << PORT_PORTP_PULLU_PIN17_Pos) +#define PORT_PORTP_PULLU_PIN18_Pos 18 +#define PORT_PORTP_PULLU_PIN18_Msk (0x01 << PORT_PORTP_PULLU_PIN18_Pos) +#define PORT_PORTP_PULLU_PIN19_Pos 19 +#define PORT_PORTP_PULLU_PIN19_Msk (0x01 << PORT_PORTP_PULLU_PIN19_Pos) +#define PORT_PORTP_PULLU_PIN20_Pos 20 +#define PORT_PORTP_PULLU_PIN20_Msk (0x01 << PORT_PORTP_PULLU_PIN20_Pos) +#define PORT_PORTP_PULLU_PIN21_Pos 21 +#define PORT_PORTP_PULLU_PIN21_Msk (0x01 << PORT_PORTP_PULLU_PIN21_Pos) +#define PORT_PORTP_PULLU_PIN22_Pos 22 +#define PORT_PORTP_PULLU_PIN22_Msk (0x01 << PORT_PORTP_PULLU_PIN22_Pos) +#define PORT_PORTP_PULLU_PIN23_Pos 23 +#define PORT_PORTP_PULLU_PIN23_Msk (0x01 << PORT_PORTP_PULLU_PIN23_Pos) + +#define PORT_PORTB_PULLD_PIN0_Pos 0 +#define PORT_PORTB_PULLD_PIN0_Msk (0x01 << PORT_PORTB_PULLD_PIN0_Pos) +#define PORT_PORTB_PULLD_PIN1_Pos 1 +#define PORT_PORTB_PULLD_PIN1_Msk (0x01 << PORT_PORTB_PULLD_PIN1_Pos) +#define PORT_PORTB_PULLD_PIN2_Pos 2 +#define PORT_PORTB_PULLD_PIN2_Msk (0x01 << PORT_PORTB_PULLD_PIN2_Pos) +#define PORT_PORTB_PULLD_PIN3_Pos 3 +#define PORT_PORTB_PULLD_PIN3_Msk (0x01 << PORT_PORTB_PULLD_PIN3_Pos) +#define PORT_PORTB_PULLD_PIN4_Pos 4 +#define PORT_PORTB_PULLD_PIN4_Msk (0x01 << PORT_PORTB_PULLD_PIN4_Pos) +#define PORT_PORTB_PULLD_PIN5_Pos 5 +#define PORT_PORTB_PULLD_PIN5_Msk (0x01 << PORT_PORTB_PULLD_PIN5_Pos) +#define PORT_PORTB_PULLD_PIN6_Pos 6 +#define PORT_PORTB_PULLD_PIN6_Msk (0x01 << PORT_PORTB_PULLD_PIN6_Pos) +#define PORT_PORTB_PULLD_PIN7_Pos 7 +#define PORT_PORTB_PULLD_PIN7_Msk (0x01 << PORT_PORTB_PULLD_PIN7_Pos) +#define PORT_PORTB_PULLD_PIN8_Pos 8 +#define PORT_PORTB_PULLD_PIN8_Msk (0x01 << PORT_PORTB_PULLD_PIN8_Pos) +#define PORT_PORTB_PULLD_PIN9_Pos 9 +#define PORT_PORTB_PULLD_PIN9_Msk (0x01 << PORT_PORTB_PULLD_PIN9_Pos) +#define PORT_PORTB_PULLD_PIN10_Pos 10 +#define PORT_PORTB_PULLD_PIN10_Msk (0x01 << PORT_PORTB_PULLD_PIN10_Pos) +#define PORT_PORTB_PULLD_PIN11_Pos 11 +#define PORT_PORTB_PULLD_PIN11_Msk (0x01 << PORT_PORTB_PULLD_PIN11_Pos) +#define PORT_PORTB_PULLD_PIN12_Pos 12 +#define PORT_PORTB_PULLD_PIN12_Msk (0x01 << PORT_PORTB_PULLD_PIN12_Pos) +#define PORT_PORTB_PULLD_PIN13_Pos 13 +#define PORT_PORTB_PULLD_PIN13_Msk (0x01 << PORT_PORTB_PULLD_PIN13_Pos) +#define PORT_PORTB_PULLD_PIN14_Pos 14 +#define PORT_PORTB_PULLD_PIN14_Msk (0x01 << PORT_PORTB_PULLD_PIN14_Pos) +#define PORT_PORTB_PULLD_PIN15_Pos 15 +#define PORT_PORTB_PULLD_PIN15_Msk (0x01 << PORT_PORTB_PULLD_PIN15_Pos) + +#define PORT_PORTN_PULLD_PIN0_Pos 0 +#define PORT_PORTN_PULLD_PIN0_Msk (0x01 << PORT_PORTN_PULLD_PIN0_Pos) +#define PORT_PORTN_PULLD_PIN1_Pos 1 +#define PORT_PORTN_PULLD_PIN1_Msk (0x01 << PORT_PORTN_PULLD_PIN1_Pos) +#define PORT_PORTN_PULLD_PIN2_Pos 2 +#define PORT_PORTN_PULLD_PIN2_Msk (0x01 << PORT_PORTN_PULLD_PIN2_Pos) +#define PORT_PORTN_PULLD_PIN3_Pos 3 +#define PORT_PORTN_PULLD_PIN3_Msk (0x01 << PORT_PORTN_PULLD_PIN3_Pos) +#define PORT_PORTN_PULLD_PIN4_Pos 4 +#define PORT_PORTN_PULLD_PIN4_Msk (0x01 << PORT_PORTN_PULLD_PIN4_Pos) +#define PORT_PORTN_PULLD_PIN5_Pos 5 +#define PORT_PORTN_PULLD_PIN5_Msk (0x01 << PORT_PORTN_PULLD_PIN5_Pos) +#define PORT_PORTN_PULLD_PIN6_Pos 6 +#define PORT_PORTN_PULLD_PIN6_Msk (0x01 << PORT_PORTN_PULLD_PIN6_Pos) +#define PORT_PORTN_PULLD_PIN7_Pos 7 +#define PORT_PORTN_PULLD_PIN7_Msk (0x01 << PORT_PORTN_PULLD_PIN7_Pos) +#define PORT_PORTN_PULLD_PIN8_Pos 8 +#define PORT_PORTN_PULLD_PIN8_Msk (0x01 << PORT_PORTN_PULLD_PIN8_Pos) +#define PORT_PORTN_PULLD_PIN9_Pos 9 +#define PORT_PORTN_PULLD_PIN9_Msk (0x01 << PORT_PORTN_PULLD_PIN9_Pos) +#define PORT_PORTN_PULLD_PIN10_Pos 10 +#define PORT_PORTN_PULLD_PIN10_Msk (0x01 << PORT_PORTN_PULLD_PIN10_Pos) +#define PORT_PORTN_PULLD_PIN11_Pos 11 +#define PORT_PORTN_PULLD_PIN11_Msk (0x01 << PORT_PORTN_PULLD_PIN11_Pos) +#define PORT_PORTN_PULLD_PIN12_Pos 12 +#define PORT_PORTN_PULLD_PIN12_Msk (0x01 << PORT_PORTN_PULLD_PIN12_Pos) +#define PORT_PORTN_PULLD_PIN13_Pos 13 +#define PORT_PORTN_PULLD_PIN13_Msk (0x01 << PORT_PORTN_PULLD_PIN13_Pos) +#define PORT_PORTN_PULLD_PIN14_Pos 14 +#define PORT_PORTN_PULLD_PIN14_Msk (0x01 << PORT_PORTN_PULLD_PIN14_Pos) +#define PORT_PORTN_PULLD_PIN15_Pos 15 +#define PORT_PORTN_PULLD_PIN15_Msk (0x01 << PORT_PORTN_PULLD_PIN15_Pos) +#define PORT_PORTN_PULLD_PIN16_Pos 16 +#define PORT_PORTN_PULLD_PIN16_Msk (0x01 << PORT_PORTN_PULLD_PIN16_Pos) +#define PORT_PORTN_PULLD_PIN17_Pos 17 +#define PORT_PORTN_PULLD_PIN17_Msk (0x01 << PORT_PORTN_PULLD_PIN17_Pos) +#define PORT_PORTN_PULLD_PIN18_Pos 18 +#define PORT_PORTN_PULLD_PIN18_Msk (0x01 << PORT_PORTN_PULLD_PIN18_Pos) +#define PORT_PORTN_PULLD_PIN19_Pos 19 +#define PORT_PORTN_PULLD_PIN19_Msk (0x01 << PORT_PORTN_PULLD_PIN19_Pos) +#define PORT_PORTN_PULLD_PIN20_Pos 20 +#define PORT_PORTN_PULLD_PIN20_Msk (0x01 << PORT_PORTN_PULLD_PIN20_Pos) +#define PORT_PORTN_PULLD_PIN21_Pos 21 +#define PORT_PORTN_PULLD_PIN21_Msk (0x01 << PORT_PORTN_PULLD_PIN21_Pos) +#define PORT_PORTN_PULLD_PIN22_Pos 22 +#define PORT_PORTN_PULLD_PIN22_Msk (0x01 << PORT_PORTN_PULLD_PIN22_Pos) +#define PORT_PORTN_PULLD_PIN23_Pos 23 +#define PORT_PORTN_PULLD_PIN23_Msk (0x01 << PORT_PORTN_PULLD_PIN23_Pos) + +#define PORT_PORTM_DRIVS_PIN0_Pos 0 +#define PORT_PORTM_DRIVS_PIN0_Msk (0x01 << PORT_PORTM_DRIVS_PIN0_Pos) +#define PORT_PORTM_DRIVS_PIN1_Pos 1 +#define PORT_PORTM_DRIVS_PIN1_Msk (0x01 << PORT_PORTM_DRIVS_PIN1_Pos) +#define PORT_PORTM_DRIVS_PIN2_Pos 2 +#define PORT_PORTM_DRIVS_PIN2_Msk (0x01 << PORT_PORTM_DRIVS_PIN2_Pos) +#define PORT_PORTM_DRIVS_PIN3_Pos 3 +#define PORT_PORTM_DRIVS_PIN3_Msk (0x01 << PORT_PORTM_DRIVS_PIN3_Pos) +#define PORT_PORTM_DRIVS_PIN4_Pos 4 +#define PORT_PORTM_DRIVS_PIN4_Msk (0x01 << PORT_PORTM_DRIVS_PIN4_Pos) +#define PORT_PORTM_DRIVS_PIN5_Pos 5 +#define PORT_PORTM_DRIVS_PIN5_Msk (0x01 << PORT_PORTM_DRIVS_PIN5_Pos) +#define PORT_PORTM_DRIVS_PIN6_Pos 6 +#define PORT_PORTM_DRIVS_PIN6_Msk (0x01 << PORT_PORTM_DRIVS_PIN6_Pos) +#define PORT_PORTM_DRIVS_PIN7_Pos 7 +#define PORT_PORTM_DRIVS_PIN7_Msk (0x01 << PORT_PORTM_DRIVS_PIN7_Pos) +#define PORT_PORTM_DRIVS_PIN8_Pos 8 +#define PORT_PORTM_DRIVS_PIN8_Msk (0x01 << PORT_PORTM_DRIVS_PIN8_Pos) +#define PORT_PORTM_DRIVS_PIN9_Pos 9 +#define PORT_PORTM_DRIVS_PIN9_Msk (0x01 << PORT_PORTM_DRIVS_PIN9_Pos) +#define PORT_PORTM_DRIVS_PIN10_Pos 10 +#define PORT_PORTM_DRIVS_PIN10_Msk (0x01 << PORT_PORTM_DRIVS_PIN10_Pos) +#define PORT_PORTM_DRIVS_PIN11_Pos 11 +#define PORT_PORTM_DRIVS_PIN11_Msk (0x01 << PORT_PORTM_DRIVS_PIN11_Pos) +#define PORT_PORTM_DRIVS_PIN12_Pos 12 +#define PORT_PORTM_DRIVS_PIN12_Msk (0x01 << PORT_PORTM_DRIVS_PIN12_Pos) +#define PORT_PORTM_DRIVS_PIN13_Pos 13 +#define PORT_PORTM_DRIVS_PIN13_Msk (0x01 << PORT_PORTM_DRIVS_PIN13_Pos) +#define PORT_PORTM_DRIVS_PIN14_Pos 14 +#define PORT_PORTM_DRIVS_PIN14_Msk (0x01 << PORT_PORTM_DRIVS_PIN14_Pos) +#define PORT_PORTM_DRIVS_PIN15_Pos 15 +#define PORT_PORTM_DRIVS_PIN15_Msk (0x01 << PORT_PORTM_DRIVS_PIN15_Pos) +#define PORT_PORTM_DRIVS_PIN16_Pos 16 +#define PORT_PORTM_DRIVS_PIN16_Msk (0x01 << PORT_PORTM_DRIVS_PIN16_Pos) +#define PORT_PORTM_DRIVS_PIN17_Pos 17 +#define PORT_PORTM_DRIVS_PIN17_Msk (0x01 << PORT_PORTM_DRIVS_PIN17_Pos) +#define PORT_PORTM_DRIVS_PIN18_Pos 18 +#define PORT_PORTM_DRIVS_PIN18_Msk (0x01 << PORT_PORTM_DRIVS_PIN18_Pos) +#define PORT_PORTM_DRIVS_PIN19_Pos 19 +#define PORT_PORTM_DRIVS_PIN19_Msk (0x01 << PORT_PORTM_DRIVS_PIN19_Pos) +#define PORT_PORTM_DRIVS_PIN20_Pos 20 +#define PORT_PORTM_DRIVS_PIN20_Msk (0x01 << PORT_PORTM_DRIVS_PIN20_Pos) +#define PORT_PORTM_DRIVS_PIN21_Pos 21 +#define PORT_PORTM_DRIVS_PIN21_Msk (0x01 << PORT_PORTM_DRIVS_PIN21_Pos) +#define PORT_PORTM_DRIVS_PIN22_Pos 22 +#define PORT_PORTM_DRIVS_PIN22_Msk (0x01 << PORT_PORTM_DRIVS_PIN22_Pos) +#define PORT_PORTM_DRIVS_PIN23_Pos 23 +#define PORT_PORTM_DRIVS_PIN23_Msk (0x01 << PORT_PORTM_DRIVS_PIN23_Pos) + +#define PORT_PORTN_DRIVS_PIN0_Pos 0 +#define PORT_PORTN_DRIVS_PIN0_Msk (0x01 << PORT_PORTN_DRIVS_PIN0_Pos) +#define PORT_PORTN_DRIVS_PIN1_Pos 1 +#define PORT_PORTN_DRIVS_PIN1_Msk (0x01 << PORT_PORTN_DRIVS_PIN1_Pos) +#define PORT_PORTN_DRIVS_PIN2_Pos 2 +#define PORT_PORTN_DRIVS_PIN2_Msk (0x01 << PORT_PORTN_DRIVS_PIN2_Pos) +#define PORT_PORTN_DRIVS_PIN3_Pos 3 +#define PORT_PORTN_DRIVS_PIN3_Msk (0x01 << PORT_PORTN_DRIVS_PIN3_Pos) +#define PORT_PORTN_DRIVS_PIN4_Pos 4 +#define PORT_PORTN_DRIVS_PIN4_Msk (0x01 << PORT_PORTN_DRIVS_PIN4_Pos) +#define PORT_PORTN_DRIVS_PIN5_Pos 5 +#define PORT_PORTN_DRIVS_PIN5_Msk (0x01 << PORT_PORTN_DRIVS_PIN5_Pos) +#define PORT_PORTN_DRIVS_PIN6_Pos 6 +#define PORT_PORTN_DRIVS_PIN6_Msk (0x01 << PORT_PORTN_DRIVS_PIN6_Pos) +#define PORT_PORTN_DRIVS_PIN7_Pos 7 +#define PORT_PORTN_DRIVS_PIN7_Msk (0x01 << PORT_PORTN_DRIVS_PIN7_Pos) +#define PORT_PORTN_DRIVS_PIN8_Pos 8 +#define PORT_PORTN_DRIVS_PIN8_Msk (0x01 << PORT_PORTN_DRIVS_PIN8_Pos) +#define PORT_PORTN_DRIVS_PIN9_Pos 9 +#define PORT_PORTN_DRIVS_PIN9_Msk (0x01 << PORT_PORTN_DRIVS_PIN9_Pos) +#define PORT_PORTN_DRIVS_PIN10_Pos 10 +#define PORT_PORTN_DRIVS_PIN10_Msk (0x01 << PORT_PORTN_DRIVS_PIN10_Pos) +#define PORT_PORTN_DRIVS_PIN11_Pos 11 +#define PORT_PORTN_DRIVS_PIN11_Msk (0x01 << PORT_PORTN_DRIVS_PIN11_Pos) +#define PORT_PORTN_DRIVS_PIN12_Pos 12 +#define PORT_PORTN_DRIVS_PIN12_Msk (0x01 << PORT_PORTN_DRIVS_PIN12_Pos) +#define PORT_PORTN_DRIVS_PIN13_Pos 13 +#define PORT_PORTN_DRIVS_PIN13_Msk (0x01 << PORT_PORTN_DRIVS_PIN13_Pos) +#define PORT_PORTN_DRIVS_PIN14_Pos 14 +#define PORT_PORTN_DRIVS_PIN14_Msk (0x01 << PORT_PORTN_DRIVS_PIN14_Pos) +#define PORT_PORTN_DRIVS_PIN15_Pos 15 +#define PORT_PORTN_DRIVS_PIN15_Msk (0x01 << PORT_PORTN_DRIVS_PIN15_Pos) +#define PORT_PORTN_DRIVS_PIN16_Pos 16 +#define PORT_PORTN_DRIVS_PIN16_Msk (0x01 << PORT_PORTN_DRIVS_PIN16_Pos) +#define PORT_PORTN_DRIVS_PIN17_Pos 17 +#define PORT_PORTN_DRIVS_PIN17_Msk (0x01 << PORT_PORTN_DRIVS_PIN17_Pos) +#define PORT_PORTN_DRIVS_PIN18_Pos 18 +#define PORT_PORTN_DRIVS_PIN18_Msk (0x01 << PORT_PORTN_DRIVS_PIN18_Pos) +#define PORT_PORTN_DRIVS_PIN19_Pos 19 +#define PORT_PORTN_DRIVS_PIN19_Msk (0x01 << PORT_PORTN_DRIVS_PIN19_Pos) +#define PORT_PORTN_DRIVS_PIN20_Pos 20 +#define PORT_PORTN_DRIVS_PIN20_Msk (0x01 << PORT_PORTN_DRIVS_PIN20_Pos) +#define PORT_PORTN_DRIVS_PIN21_Pos 21 +#define PORT_PORTN_DRIVS_PIN21_Msk (0x01 << PORT_PORTN_DRIVS_PIN21_Pos) +#define PORT_PORTN_DRIVS_PIN22_Pos 22 +#define PORT_PORTN_DRIVS_PIN22_Msk (0x01 << PORT_PORTN_DRIVS_PIN22_Pos) +#define PORT_PORTN_DRIVS_PIN23_Pos 23 +#define PORT_PORTN_DRIVS_PIN23_Msk (0x01 << PORT_PORTN_DRIVS_PIN23_Pos) + +#define PORT_PORTP_DRIVS_PIN0_Pos 0 +#define PORT_PORTP_DRIVS_PIN0_Msk (0x01 << PORT_PORTP_DRIVS_PIN0_Pos) +#define PORT_PORTP_DRIVS_PIN1_Pos 1 +#define PORT_PORTP_DRIVS_PIN1_Msk (0x01 << PORT_PORTP_DRIVS_PIN1_Pos) +#define PORT_PORTP_DRIVS_PIN2_Pos 2 +#define PORT_PORTP_DRIVS_PIN2_Msk (0x01 << PORT_PORTP_DRIVS_PIN2_Pos) +#define PORT_PORTP_DRIVS_PIN3_Pos 3 +#define PORT_PORTP_DRIVS_PIN3_Msk (0x01 << PORT_PORTP_DRIVS_PIN3_Pos) +#define PORT_PORTP_DRIVS_PIN4_Pos 4 +#define PORT_PORTP_DRIVS_PIN4_Msk (0x01 << PORT_PORTP_DRIVS_PIN4_Pos) +#define PORT_PORTP_DRIVS_PIN5_Pos 5 +#define PORT_PORTP_DRIVS_PIN5_Msk (0x01 << PORT_PORTP_DRIVS_PIN5_Pos) +#define PORT_PORTP_DRIVS_PIN6_Pos 6 +#define PORT_PORTP_DRIVS_PIN6_Msk (0x01 << PORT_PORTP_DRIVS_PIN6_Pos) +#define PORT_PORTP_DRIVS_PIN7_Pos 7 +#define PORT_PORTP_DRIVS_PIN7_Msk (0x01 << PORT_PORTP_DRIVS_PIN7_Pos) +#define PORT_PORTP_DRIVS_PIN8_Pos 8 +#define PORT_PORTP_DRIVS_PIN8_Msk (0x01 << PORT_PORTP_DRIVS_PIN8_Pos) +#define PORT_PORTP_DRIVS_PIN9_Pos 9 +#define PORT_PORTP_DRIVS_PIN9_Msk (0x01 << PORT_PORTP_DRIVS_PIN9_Pos) +#define PORT_PORTP_DRIVS_PIN10_Pos 10 +#define PORT_PORTP_DRIVS_PIN10_Msk (0x01 << PORT_PORTP_DRIVS_PIN10_Pos) +#define PORT_PORTP_DRIVS_PIN11_Pos 11 +#define PORT_PORTP_DRIVS_PIN11_Msk (0x01 << PORT_PORTP_DRIVS_PIN11_Pos) +#define PORT_PORTP_DRIVS_PIN12_Pos 12 +#define PORT_PORTP_DRIVS_PIN12_Msk (0x01 << PORT_PORTP_DRIVS_PIN12_Pos) +#define PORT_PORTP_DRIVS_PIN13_Pos 13 +#define PORT_PORTP_DRIVS_PIN13_Msk (0x01 << PORT_PORTP_DRIVS_PIN13_Pos) +#define PORT_PORTP_DRIVS_PIN14_Pos 14 +#define PORT_PORTP_DRIVS_PIN14_Msk (0x01 << PORT_PORTP_DRIVS_PIN14_Pos) +#define PORT_PORTP_DRIVS_PIN15_Pos 15 +#define PORT_PORTP_DRIVS_PIN15_Msk (0x01 << PORT_PORTP_DRIVS_PIN15_Pos) +#define PORT_PORTP_DRIVS_PIN16_Pos 16 +#define PORT_PORTP_DRIVS_PIN16_Msk (0x01 << PORT_PORTP_DRIVS_PIN16_Pos) +#define PORT_PORTP_DRIVS_PIN17_Pos 17 +#define PORT_PORTP_DRIVS_PIN17_Msk (0x01 << PORT_PORTP_DRIVS_PIN17_Pos) +#define PORT_PORTP_DRIVS_PIN18_Pos 18 +#define PORT_PORTP_DRIVS_PIN18_Msk (0x01 << PORT_PORTP_DRIVS_PIN18_Pos) +#define PORT_PORTP_DRIVS_PIN19_Pos 19 +#define PORT_PORTP_DRIVS_PIN19_Msk (0x01 << PORT_PORTP_DRIVS_PIN19_Pos) +#define PORT_PORTP_DRIVS_PIN20_Pos 20 +#define PORT_PORTP_DRIVS_PIN20_Msk (0x01 << PORT_PORTP_DRIVS_PIN20_Pos) +#define PORT_PORTP_DRIVS_PIN21_Pos 21 +#define PORT_PORTP_DRIVS_PIN21_Msk (0x01 << PORT_PORTP_DRIVS_PIN21_Pos) +#define PORT_PORTP_DRIVS_PIN22_Pos 22 +#define PORT_PORTP_DRIVS_PIN22_Msk (0x01 << PORT_PORTP_DRIVS_PIN22_Pos) +#define PORT_PORTP_DRIVS_PIN23_Pos 23 +#define PORT_PORTP_DRIVS_PIN23_Msk (0x01 << PORT_PORTP_DRIVS_PIN23_Pos) + +#define PORT_PORTA_INEN_PIN0_Pos 0 +#define PORT_PORTA_INEN_PIN0_Msk (0x01 << PORT_PORTA_INEN_PIN0_Pos) +#define PORT_PORTA_INEN_PIN1_Pos 1 +#define PORT_PORTA_INEN_PIN1_Msk (0x01 << PORT_PORTA_INEN_PIN1_Pos) +#define PORT_PORTA_INEN_PIN2_Pos 2 +#define PORT_PORTA_INEN_PIN2_Msk (0x01 << PORT_PORTA_INEN_PIN2_Pos) +#define PORT_PORTA_INEN_PIN3_Pos 3 +#define PORT_PORTA_INEN_PIN3_Msk (0x01 << PORT_PORTA_INEN_PIN3_Pos) +#define PORT_PORTA_INEN_PIN4_Pos 4 +#define PORT_PORTA_INEN_PIN4_Msk (0x01 << PORT_PORTA_INEN_PIN4_Pos) +#define PORT_PORTA_INEN_PIN5_Pos 5 +#define PORT_PORTA_INEN_PIN5_Msk (0x01 << PORT_PORTA_INEN_PIN5_Pos) +#define PORT_PORTA_INEN_PIN6_Pos 6 +#define PORT_PORTA_INEN_PIN6_Msk (0x01 << PORT_PORTA_INEN_PIN6_Pos) +#define PORT_PORTA_INEN_PIN7_Pos 7 +#define PORT_PORTA_INEN_PIN7_Msk (0x01 << PORT_PORTA_INEN_PIN7_Pos) +#define PORT_PORTA_INEN_PIN8_Pos 8 +#define PORT_PORTA_INEN_PIN8_Msk (0x01 << PORT_PORTA_INEN_PIN8_Pos) +#define PORT_PORTA_INEN_PIN9_Pos 9 +#define PORT_PORTA_INEN_PIN9_Msk (0x01 << PORT_PORTA_INEN_PIN9_Pos) +#define PORT_PORTA_INEN_PIN10_Pos 10 +#define PORT_PORTA_INEN_PIN10_Msk (0x01 << PORT_PORTA_INEN_PIN10_Pos) +#define PORT_PORTA_INEN_PIN11_Pos 11 +#define PORT_PORTA_INEN_PIN11_Msk (0x01 << PORT_PORTA_INEN_PIN11_Pos) +#define PORT_PORTA_INEN_PIN12_Pos 12 +#define PORT_PORTA_INEN_PIN12_Msk (0x01 << PORT_PORTA_INEN_PIN12_Pos) +#define PORT_PORTA_INEN_PIN13_Pos 13 +#define PORT_PORTA_INEN_PIN13_Msk (0x01 << PORT_PORTA_INEN_PIN13_Pos) +#define PORT_PORTA_INEN_PIN14_Pos 14 +#define PORT_PORTA_INEN_PIN14_Msk (0x01 << PORT_PORTA_INEN_PIN14_Pos) +#define PORT_PORTA_INEN_PIN15_Pos 15 +#define PORT_PORTA_INEN_PIN15_Msk (0x01 << PORT_PORTA_INEN_PIN15_Pos) + +#define PORT_PORTB_INEN_PIN0_Pos 0 +#define PORT_PORTB_INEN_PIN0_Msk (0x01 << PORT_PORTB_INEN_PIN0_Pos) +#define PORT_PORTB_INEN_PIN1_Pos 1 +#define PORT_PORTB_INEN_PIN1_Msk (0x01 << PORT_PORTB_INEN_PIN1_Pos) +#define PORT_PORTB_INEN_PIN2_Pos 2 +#define PORT_PORTB_INEN_PIN2_Msk (0x01 << PORT_PORTB_INEN_PIN2_Pos) +#define PORT_PORTB_INEN_PIN3_Pos 3 +#define PORT_PORTB_INEN_PIN3_Msk (0x01 << PORT_PORTB_INEN_PIN3_Pos) +#define PORT_PORTB_INEN_PIN4_Pos 4 +#define PORT_PORTB_INEN_PIN4_Msk (0x01 << PORT_PORTB_INEN_PIN4_Pos) +#define PORT_PORTB_INEN_PIN5_Pos 5 +#define PORT_PORTB_INEN_PIN5_Msk (0x01 << PORT_PORTB_INEN_PIN5_Pos) +#define PORT_PORTB_INEN_PIN6_Pos 6 +#define PORT_PORTB_INEN_PIN6_Msk (0x01 << PORT_PORTB_INEN_PIN6_Pos) +#define PORT_PORTB_INEN_PIN7_Pos 7 +#define PORT_PORTB_INEN_PIN7_Msk (0x01 << PORT_PORTB_INEN_PIN7_Pos) +#define PORT_PORTB_INEN_PIN8_Pos 8 +#define PORT_PORTB_INEN_PIN8_Msk (0x01 << PORT_PORTB_INEN_PIN8_Pos) +#define PORT_PORTB_INEN_PIN9_Pos 9 +#define PORT_PORTB_INEN_PIN9_Msk (0x01 << PORT_PORTB_INEN_PIN9_Pos) +#define PORT_PORTB_INEN_PIN10_Pos 10 +#define PORT_PORTB_INEN_PIN10_Msk (0x01 << PORT_PORTB_INEN_PIN10_Pos) +#define PORT_PORTB_INEN_PIN11_Pos 11 +#define PORT_PORTB_INEN_PIN11_Msk (0x01 << PORT_PORTB_INEN_PIN11_Pos) +#define PORT_PORTB_INEN_PIN12_Pos 12 +#define PORT_PORTB_INEN_PIN12_Msk (0x01 << PORT_PORTB_INEN_PIN12_Pos) +#define PORT_PORTB_INEN_PIN13_Pos 13 +#define PORT_PORTB_INEN_PIN13_Msk (0x01 << PORT_PORTB_INEN_PIN13_Pos) +#define PORT_PORTB_INEN_PIN14_Pos 14 +#define PORT_PORTB_INEN_PIN14_Msk (0x01 << PORT_PORTB_INEN_PIN14_Pos) +#define PORT_PORTB_INEN_PIN15_Pos 15 +#define PORT_PORTB_INEN_PIN15_Msk (0x01 << PORT_PORTB_INEN_PIN15_Pos) + +#define PORT_PORTC_INEN_PIN0_Pos 0 +#define PORT_PORTC_INEN_PIN0_Msk (0x01 << PORT_PORTC_INEN_PIN0_Pos) +#define PORT_PORTC_INEN_PIN1_Pos 1 +#define PORT_PORTC_INEN_PIN1_Msk (0x01 << PORT_PORTC_INEN_PIN1_Pos) +#define PORT_PORTC_INEN_PIN2_Pos 2 +#define PORT_PORTC_INEN_PIN2_Msk (0x01 << PORT_PORTC_INEN_PIN2_Pos) +#define PORT_PORTC_INEN_PIN3_Pos 3 +#define PORT_PORTC_INEN_PIN3_Msk (0x01 << PORT_PORTC_INEN_PIN3_Pos) +#define PORT_PORTC_INEN_PIN4_Pos 4 +#define PORT_PORTC_INEN_PIN4_Msk (0x01 << PORT_PORTC_INEN_PIN4_Pos) +#define PORT_PORTC_INEN_PIN5_Pos 5 +#define PORT_PORTC_INEN_PIN5_Msk (0x01 << PORT_PORTC_INEN_PIN5_Pos) +#define PORT_PORTC_INEN_PIN6_Pos 6 +#define PORT_PORTC_INEN_PIN6_Msk (0x01 << PORT_PORTC_INEN_PIN6_Pos) +#define PORT_PORTC_INEN_PIN7_Pos 7 +#define PORT_PORTC_INEN_PIN7_Msk (0x01 << PORT_PORTC_INEN_PIN7_Pos) +#define PORT_PORTC_INEN_PIN8_Pos 8 +#define PORT_PORTC_INEN_PIN8_Msk (0x01 << PORT_PORTC_INEN_PIN8_Pos) +#define PORT_PORTC_INEN_PIN9_Pos 9 +#define PORT_PORTC_INEN_PIN9_Msk (0x01 << PORT_PORTC_INEN_PIN9_Pos) +#define PORT_PORTC_INEN_PIN10_Pos 10 +#define PORT_PORTC_INEN_PIN10_Msk (0x01 << PORT_PORTC_INEN_PIN10_Pos) +#define PORT_PORTC_INEN_PIN11_Pos 11 +#define PORT_PORTC_INEN_PIN11_Msk (0x01 << PORT_PORTC_INEN_PIN11_Pos) +#define PORT_PORTC_INEN_PIN12_Pos 12 +#define PORT_PORTC_INEN_PIN12_Msk (0x01 << PORT_PORTC_INEN_PIN12_Pos) +#define PORT_PORTC_INEN_PIN13_Pos 13 +#define PORT_PORTC_INEN_PIN13_Msk (0x01 << PORT_PORTC_INEN_PIN13_Pos) +#define PORT_PORTC_INEN_PIN14_Pos 14 +#define PORT_PORTC_INEN_PIN14_Msk (0x01 << PORT_PORTC_INEN_PIN14_Pos) +#define PORT_PORTC_INEN_PIN15_Pos 15 +#define PORT_PORTC_INEN_PIN15_Msk (0x01 << PORT_PORTC_INEN_PIN15_Pos) + +#define PORT_PORTM_INEN_PIN0_Pos 0 +#define PORT_PORTM_INEN_PIN0_Msk (0x01 << PORT_PORTM_INEN_PIN0_Pos) +#define PORT_PORTM_INEN_PIN1_Pos 1 +#define PORT_PORTM_INEN_PIN1_Msk (0x01 << PORT_PORTM_INEN_PIN1_Pos) +#define PORT_PORTM_INEN_PIN2_Pos 2 +#define PORT_PORTM_INEN_PIN2_Msk (0x01 << PORT_PORTM_INEN_PIN2_Pos) +#define PORT_PORTM_INEN_PIN3_Pos 3 +#define PORT_PORTM_INEN_PIN3_Msk (0x01 << PORT_PORTM_INEN_PIN3_Pos) +#define PORT_PORTM_INEN_PIN4_Pos 4 +#define PORT_PORTM_INEN_PIN4_Msk (0x01 << PORT_PORTM_INEN_PIN4_Pos) +#define PORT_PORTM_INEN_PIN5_Pos 5 +#define PORT_PORTM_INEN_PIN5_Msk (0x01 << PORT_PORTM_INEN_PIN5_Pos) +#define PORT_PORTM_INEN_PIN6_Pos 6 +#define PORT_PORTM_INEN_PIN6_Msk (0x01 << PORT_PORTM_INEN_PIN6_Pos) +#define PORT_PORTM_INEN_PIN7_Pos 7 +#define PORT_PORTM_INEN_PIN7_Msk (0x01 << PORT_PORTM_INEN_PIN7_Pos) +#define PORT_PORTM_INEN_PIN8_Pos 8 +#define PORT_PORTM_INEN_PIN8_Msk (0x01 << PORT_PORTM_INEN_PIN8_Pos) +#define PORT_PORTM_INEN_PIN9_Pos 9 +#define PORT_PORTM_INEN_PIN9_Msk (0x01 << PORT_PORTM_INEN_PIN9_Pos) +#define PORT_PORTM_INEN_PIN10_Pos 10 +#define PORT_PORTM_INEN_PIN10_Msk (0x01 << PORT_PORTM_INEN_PIN10_Pos) +#define PORT_PORTM_INEN_PIN11_Pos 11 +#define PORT_PORTM_INEN_PIN11_Msk (0x01 << PORT_PORTM_INEN_PIN11_Pos) +#define PORT_PORTM_INEN_PIN12_Pos 12 +#define PORT_PORTM_INEN_PIN12_Msk (0x01 << PORT_PORTM_INEN_PIN12_Pos) +#define PORT_PORTM_INEN_PIN13_Pos 13 +#define PORT_PORTM_INEN_PIN13_Msk (0x01 << PORT_PORTM_INEN_PIN13_Pos) +#define PORT_PORTM_INEN_PIN14_Pos 14 +#define PORT_PORTM_INEN_PIN14_Msk (0x01 << PORT_PORTM_INEN_PIN14_Pos) +#define PORT_PORTM_INEN_PIN15_Pos 15 +#define PORT_PORTM_INEN_PIN15_Msk (0x01 << PORT_PORTM_INEN_PIN15_Pos) +#define PORT_PORTM_INEN_PIN16_Pos 16 +#define PORT_PORTM_INEN_PIN16_Msk (0x01 << PORT_PORTM_INEN_PIN16_Pos) +#define PORT_PORTM_INEN_PIN17_Pos 17 +#define PORT_PORTM_INEN_PIN17_Msk (0x01 << PORT_PORTM_INEN_PIN17_Pos) +#define PORT_PORTM_INEN_PIN18_Pos 18 +#define PORT_PORTM_INEN_PIN18_Msk (0x01 << PORT_PORTM_INEN_PIN18_Pos) +#define PORT_PORTM_INEN_PIN19_Pos 19 +#define PORT_PORTM_INEN_PIN19_Msk (0x01 << PORT_PORTM_INEN_PIN19_Pos) +#define PORT_PORTM_INEN_PIN20_Pos 20 +#define PORT_PORTM_INEN_PIN20_Msk (0x01 << PORT_PORTM_INEN_PIN20_Pos) +#define PORT_PORTM_INEN_PIN21_Pos 21 +#define PORT_PORTM_INEN_PIN21_Msk (0x01 << PORT_PORTM_INEN_PIN21_Pos) +#define PORT_PORTM_INEN_PIN22_Pos 22 +#define PORT_PORTM_INEN_PIN22_Msk (0x01 << PORT_PORTM_INEN_PIN22_Pos) +#define PORT_PORTM_INEN_PIN23_Pos 23 +#define PORT_PORTM_INEN_PIN23_Msk (0x01 << PORT_PORTM_INEN_PIN23_Pos) + +#define PORT_PORTN_INEN_PIN0_Pos 0 +#define PORT_PORTN_INEN_PIN0_Msk (0x01 << PORT_PORTN_INEN_PIN0_Pos) +#define PORT_PORTN_INEN_PIN1_Pos 1 +#define PORT_PORTN_INEN_PIN1_Msk (0x01 << PORT_PORTN_INEN_PIN1_Pos) +#define PORT_PORTN_INEN_PIN2_Pos 2 +#define PORT_PORTN_INEN_PIN2_Msk (0x01 << PORT_PORTN_INEN_PIN2_Pos) +#define PORT_PORTN_INEN_PIN3_Pos 3 +#define PORT_PORTN_INEN_PIN3_Msk (0x01 << PORT_PORTN_INEN_PIN3_Pos) +#define PORT_PORTN_INEN_PIN4_Pos 4 +#define PORT_PORTN_INEN_PIN4_Msk (0x01 << PORT_PORTN_INEN_PIN4_Pos) +#define PORT_PORTN_INEN_PIN5_Pos 5 +#define PORT_PORTN_INEN_PIN5_Msk (0x01 << PORT_PORTN_INEN_PIN5_Pos) +#define PORT_PORTN_INEN_PIN6_Pos 6 +#define PORT_PORTN_INEN_PIN6_Msk (0x01 << PORT_PORTN_INEN_PIN6_Pos) +#define PORT_PORTN_INEN_PIN7_Pos 7 +#define PORT_PORTN_INEN_PIN7_Msk (0x01 << PORT_PORTN_INEN_PIN7_Pos) +#define PORT_PORTN_INEN_PIN8_Pos 8 +#define PORT_PORTN_INEN_PIN8_Msk (0x01 << PORT_PORTN_INEN_PIN8_Pos) +#define PORT_PORTN_INEN_PIN9_Pos 9 +#define PORT_PORTN_INEN_PIN9_Msk (0x01 << PORT_PORTN_INEN_PIN9_Pos) +#define PORT_PORTN_INEN_PIN10_Pos 10 +#define PORT_PORTN_INEN_PIN10_Msk (0x01 << PORT_PORTN_INEN_PIN10_Pos) +#define PORT_PORTN_INEN_PIN11_Pos 11 +#define PORT_PORTN_INEN_PIN11_Msk (0x01 << PORT_PORTN_INEN_PIN11_Pos) +#define PORT_PORTN_INEN_PIN12_Pos 12 +#define PORT_PORTN_INEN_PIN12_Msk (0x01 << PORT_PORTN_INEN_PIN12_Pos) +#define PORT_PORTN_INEN_PIN13_Pos 13 +#define PORT_PORTN_INEN_PIN13_Msk (0x01 << PORT_PORTN_INEN_PIN13_Pos) +#define PORT_PORTN_INEN_PIN14_Pos 14 +#define PORT_PORTN_INEN_PIN14_Msk (0x01 << PORT_PORTN_INEN_PIN14_Pos) +#define PORT_PORTN_INEN_PIN15_Pos 15 +#define PORT_PORTN_INEN_PIN15_Msk (0x01 << PORT_PORTN_INEN_PIN15_Pos) +#define PORT_PORTN_INEN_PIN16_Pos 16 +#define PORT_PORTN_INEN_PIN16_Msk (0x01 << PORT_PORTN_INEN_PIN16_Pos) +#define PORT_PORTN_INEN_PIN17_Pos 17 +#define PORT_PORTN_INEN_PIN17_Msk (0x01 << PORT_PORTN_INEN_PIN17_Pos) +#define PORT_PORTN_INEN_PIN18_Pos 18 +#define PORT_PORTN_INEN_PIN18_Msk (0x01 << PORT_PORTN_INEN_PIN18_Pos) +#define PORT_PORTN_INEN_PIN19_Pos 19 +#define PORT_PORTN_INEN_PIN19_Msk (0x01 << PORT_PORTN_INEN_PIN19_Pos) +#define PORT_PORTN_INEN_PIN20_Pos 20 +#define PORT_PORTN_INEN_PIN20_Msk (0x01 << PORT_PORTN_INEN_PIN20_Pos) +#define PORT_PORTN_INEN_PIN21_Pos 21 +#define PORT_PORTN_INEN_PIN21_Msk (0x01 << PORT_PORTN_INEN_PIN21_Pos) +#define PORT_PORTN_INEN_PIN22_Pos 22 +#define PORT_PORTN_INEN_PIN22_Msk (0x01 << PORT_PORTN_INEN_PIN22_Pos) +#define PORT_PORTN_INEN_PIN23_Pos 23 +#define PORT_PORTN_INEN_PIN23_Msk (0x01 << PORT_PORTN_INEN_PIN23_Pos) + +#define PORT_PORTP_INEN_PIN0_Pos 0 +#define PORT_PORTP_INEN_PIN0_Msk (0x01 << PORT_PORTP_INEN_PIN0_Pos) +#define PORT_PORTP_INEN_PIN1_Pos 1 +#define PORT_PORTP_INEN_PIN1_Msk (0x01 << PORT_PORTP_INEN_PIN1_Pos) +#define PORT_PORTP_INEN_PIN2_Pos 2 +#define PORT_PORTP_INEN_PIN2_Msk (0x01 << PORT_PORTP_INEN_PIN2_Pos) +#define PORT_PORTP_INEN_PIN3_Pos 3 +#define PORT_PORTP_INEN_PIN3_Msk (0x01 << PORT_PORTP_INEN_PIN3_Pos) +#define PORT_PORTP_INEN_PIN4_Pos 4 +#define PORT_PORTP_INEN_PIN4_Msk (0x01 << PORT_PORTP_INEN_PIN4_Pos) +#define PORT_PORTP_INEN_PIN5_Pos 5 +#define PORT_PORTP_INEN_PIN5_Msk (0x01 << PORT_PORTP_INEN_PIN5_Pos) +#define PORT_PORTP_INEN_PIN6_Pos 6 +#define PORT_PORTP_INEN_PIN6_Msk (0x01 << PORT_PORTP_INEN_PIN6_Pos) +#define PORT_PORTP_INEN_PIN7_Pos 7 +#define PORT_PORTP_INEN_PIN7_Msk (0x01 << PORT_PORTP_INEN_PIN7_Pos) +#define PORT_PORTP_INEN_PIN8_Pos 8 +#define PORT_PORTP_INEN_PIN8_Msk (0x01 << PORT_PORTP_INEN_PIN8_Pos) +#define PORT_PORTP_INEN_PIN9_Pos 9 +#define PORT_PORTP_INEN_PIN9_Msk (0x01 << PORT_PORTP_INEN_PIN9_Pos) +#define PORT_PORTP_INEN_PIN10_Pos 10 +#define PORT_PORTP_INEN_PIN10_Msk (0x01 << PORT_PORTP_INEN_PIN10_Pos) +#define PORT_PORTP_INEN_PIN11_Pos 11 +#define PORT_PORTP_INEN_PIN11_Msk (0x01 << PORT_PORTP_INEN_PIN11_Pos) +#define PORT_PORTP_INEN_PIN12_Pos 12 +#define PORT_PORTP_INEN_PIN12_Msk (0x01 << PORT_PORTP_INEN_PIN12_Pos) +#define PORT_PORTP_INEN_PIN13_Pos 13 +#define PORT_PORTP_INEN_PIN13_Msk (0x01 << PORT_PORTP_INEN_PIN13_Pos) +#define PORT_PORTP_INEN_PIN14_Pos 14 +#define PORT_PORTP_INEN_PIN14_Msk (0x01 << PORT_PORTP_INEN_PIN14_Pos) +#define PORT_PORTP_INEN_PIN15_Pos 15 +#define PORT_PORTP_INEN_PIN15_Msk (0x01 << PORT_PORTP_INEN_PIN15_Pos) +#define PORT_PORTP_INEN_PIN16_Pos 16 +#define PORT_PORTP_INEN_PIN16_Msk (0x01 << PORT_PORTP_INEN_PIN16_Pos) +#define PORT_PORTP_INEN_PIN17_Pos 17 +#define PORT_PORTP_INEN_PIN17_Msk (0x01 << PORT_PORTP_INEN_PIN17_Pos) +#define PORT_PORTP_INEN_PIN18_Pos 18 +#define PORT_PORTP_INEN_PIN18_Msk (0x01 << PORT_PORTP_INEN_PIN18_Pos) +#define PORT_PORTP_INEN_PIN19_Pos 19 +#define PORT_PORTP_INEN_PIN19_Msk (0x01 << PORT_PORTP_INEN_PIN19_Pos) +#define PORT_PORTP_INEN_PIN20_Pos 20 +#define PORT_PORTP_INEN_PIN20_Msk (0x01 << PORT_PORTP_INEN_PIN20_Pos) +#define PORT_PORTP_INEN_PIN21_Pos 21 +#define PORT_PORTP_INEN_PIN21_Msk (0x01 << PORT_PORTP_INEN_PIN21_Pos) +#define PORT_PORTP_INEN_PIN22_Pos 22 +#define PORT_PORTP_INEN_PIN22_Msk (0x01 << PORT_PORTP_INEN_PIN22_Pos) +#define PORT_PORTP_INEN_PIN23_Pos 23 +#define PORT_PORTP_INEN_PIN23_Msk (0x01 << PORT_PORTP_INEN_PIN23_Pos) + +typedef struct +{ + __IO uint32_t DATA; +#define PIN0 0 +#define PIN1 1 +#define PIN2 2 +#define PIN3 3 +#define PIN4 4 +#define PIN5 5 +#define PIN6 6 +#define PIN7 7 +#define PIN8 8 +#define PIN9 9 +#define PIN10 10 +#define PIN11 11 +#define PIN12 12 +#define PIN13 13 +#define PIN14 14 +#define PIN15 15 +#define PIN16 16 +#define PIN17 17 +#define PIN18 18 +#define PIN19 19 +#define PIN20 20 +#define PIN21 21 +#define PIN22 22 +#define PIN23 23 +#define PIN24 24 + + __IO uint32_t DIR; //0 输入 1 输出 + + __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触å�‘中断 0 边沿触å�‘中断 + + __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触å�‘中断时,此ä½�ç½®1表示上å�‡æ²¿å’Œä¸‹é™�沿都触å�‘中断,置0时触å�‘边沿由INTRISEEN选择 + + __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上å�‡æ²¿/高电平触å�‘中断 0 下é™�沿/低电平触å�‘中断 + + __IO uint32_t INTEN; //1 中断使能 0 中断ç¦�æ­¢ + + __IO uint32_t INTRAWSTAT; //中断检测å�•元是å�¦æ£€æµ‹åˆ°äº†è§¦å�‘中断的æ�¡ä»¶ 1 检测到了中断触å�‘æ�¡ä»¶ 0 没有检测到中断触å�‘æ�¡ä»¶ + + __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0 + + __IO uint32_t INTCLR; //写1清除中断标志,å�ªå¯¹è¾¹æ²¿è§¦å�‘中断有用 } GPIO_TypeDef; +#define GPIO_DATA_PIN0_Pos 0 +#define GPIO_DATA_PIN0_Msk (0x01 << GPIO_DATA_PIN0_Pos) +#define GPIO_DATA_PIN1_Pos 1 +#define GPIO_DATA_PIN1_Msk (0x01 << GPIO_DATA_PIN1_Pos) +#define GPIO_DATA_PIN2_Pos 2 +#define GPIO_DATA_PIN2_Msk (0x01 << GPIO_DATA_PIN2_Pos) +#define GPIO_DATA_PIN3_Pos 3 +#define GPIO_DATA_PIN3_Msk (0x01 << GPIO_DATA_PIN3_Pos) +#define GPIO_DATA_PIN4_Pos 4 +#define GPIO_DATA_PIN4_Msk (0x01 << GPIO_DATA_PIN4_Pos) +#define GPIO_DATA_PIN5_Pos 5 +#define GPIO_DATA_PIN5_Msk (0x01 << GPIO_DATA_PIN5_Pos) +#define GPIO_DATA_PIN6_Pos 6 +#define GPIO_DATA_PIN6_Msk (0x01 << GPIO_DATA_PIN6_Pos) +#define GPIO_DATA_PIN7_Pos 7 +#define GPIO_DATA_PIN7_Msk (0x01 << GPIO_DATA_PIN7_Pos) +#define GPIO_DATA_PIN8_Pos 8 +#define GPIO_DATA_PIN8_Msk (0x01 << GPIO_DATA_PIN8_Pos) +#define GPIO_DATA_PIN9_Pos 9 +#define GPIO_DATA_PIN9_Msk (0x01 << GPIO_DATA_PIN9_Pos) +#define GPIO_DATA_PIN10_Pos 10 +#define GPIO_DATA_PIN10_Msk (0x01 << GPIO_DATA_PIN10_Pos) +#define GPIO_DATA_PIN11_Pos 11 +#define GPIO_DATA_PIN11_Msk (0x01 << GPIO_DATA_PIN11_Pos) +#define GPIO_DATA_PIN12_Pos 12 +#define GPIO_DATA_PIN12_Msk (0x01 << GPIO_DATA_PIN12_Pos) +#define GPIO_DATA_PIN13_Pos 13 +#define GPIO_DATA_PIN13_Msk (0x01 << GPIO_DATA_PIN13_Pos) +#define GPIO_DATA_PIN14_Pos 14 +#define GPIO_DATA_PIN14_Msk (0x01 << GPIO_DATA_PIN14_Pos) +#define GPIO_DATA_PIN15_Pos 15 +#define GPIO_DATA_PIN15_Msk (0x01 << GPIO_DATA_PIN15_Pos) +#define GPIO_DATA_PIN16_Pos 16 +#define GPIO_DATA_PIN16_Msk (0x01 << GPIO_DATA_PIN16_Pos) +#define GPIO_DATA_PIN17_Pos 17 +#define GPIO_DATA_PIN17_Msk (0x01 << GPIO_DATA_PIN17_Pos) +#define GPIO_DATA_PIN18_Pos 18 +#define GPIO_DATA_PIN18_Msk (0x01 << GPIO_DATA_PIN18_Pos) +#define GPIO_DATA_PIN19_Pos 19 +#define GPIO_DATA_PIN19_Msk (0x01 << GPIO_DATA_PIN19_Pos) +#define GPIO_DATA_PIN20_Pos 20 +#define GPIO_DATA_PIN20_Msk (0x01 << GPIO_DATA_PIN20_Pos) +#define GPIO_DATA_PIN21_Pos 21 +#define GPIO_DATA_PIN21_Msk (0x01 << GPIO_DATA_PIN21_Pos) +#define GPIO_DATA_PIN22_Pos 22 +#define GPIO_DATA_PIN22_Msk (0x01 << GPIO_DATA_PIN22_Pos) +#define GPIO_DATA_PIN23_Pos 23 +#define GPIO_DATA_PIN23_Msk (0x01 << GPIO_DATA_PIN23_Pos) + +#define GPIO_DIR_PIN0_Pos 0 +#define GPIO_DIR_PIN0_Msk (0x01 << GPIO_DIR_PIN0_Pos) +#define GPIO_DIR_PIN1_Pos 1 +#define GPIO_DIR_PIN1_Msk (0x01 << GPIO_DIR_PIN1_Pos) +#define GPIO_DIR_PIN2_Pos 2 +#define GPIO_DIR_PIN2_Msk (0x01 << GPIO_DIR_PIN2_Pos) +#define GPIO_DIR_PIN3_Pos 3 +#define GPIO_DIR_PIN3_Msk (0x01 << GPIO_DIR_PIN3_Pos) +#define GPIO_DIR_PIN4_Pos 4 +#define GPIO_DIR_PIN4_Msk (0x01 << GPIO_DIR_PIN4_Pos) +#define GPIO_DIR_PIN5_Pos 5 +#define GPIO_DIR_PIN5_Msk (0x01 << GPIO_DIR_PIN5_Pos) +#define GPIO_DIR_PIN6_Pos 6 +#define GPIO_DIR_PIN6_Msk (0x01 << GPIO_DIR_PIN6_Pos) +#define GPIO_DIR_PIN7_Pos 7 +#define GPIO_DIR_PIN7_Msk (0x01 << GPIO_DIR_PIN7_Pos) +#define GPIO_DIR_PIN8_Pos 8 +#define GPIO_DIR_PIN8_Msk (0x01 << GPIO_DIR_PIN8_Pos) +#define GPIO_DIR_PIN9_Pos 9 +#define GPIO_DIR_PIN9_Msk (0x01 << GPIO_DIR_PIN9_Pos) +#define GPIO_DIR_PIN10_Pos 10 +#define GPIO_DIR_PIN10_Msk (0x01 << GPIO_DIR_PIN10_Pos) +#define GPIO_DIR_PIN11_Pos 11 +#define GPIO_DIR_PIN11_Msk (0x01 << GPIO_DIR_PIN11_Pos) +#define GPIO_DIR_PIN12_Pos 12 +#define GPIO_DIR_PIN12_Msk (0x01 << GPIO_DIR_PIN12_Pos) +#define GPIO_DIR_PIN13_Pos 13 +#define GPIO_DIR_PIN13_Msk (0x01 << GPIO_DIR_PIN13_Pos) +#define GPIO_DIR_PIN14_Pos 14 +#define GPIO_DIR_PIN14_Msk (0x01 << GPIO_DIR_PIN14_Pos) +#define GPIO_DIR_PIN15_Pos 15 +#define GPIO_DIR_PIN15_Msk (0x01 << GPIO_DIR_PIN15_Pos) +#define GPIO_DIR_PIN16_Pos 16 +#define GPIO_DIR_PIN16_Msk (0x01 << GPIO_DIR_PIN16_Pos) +#define GPIO_DIR_PIN17_Pos 17 +#define GPIO_DIR_PIN17_Msk (0x01 << GPIO_DIR_PIN17_Pos) +#define GPIO_DIR_PIN18_Pos 18 +#define GPIO_DIR_PIN18_Msk (0x01 << GPIO_DIR_PIN18_Pos) +#define GPIO_DIR_PIN19_Pos 19 +#define GPIO_DIR_PIN19_Msk (0x01 << GPIO_DIR_PIN19_Pos) +#define GPIO_DIR_PIN20_Pos 20 +#define GPIO_DIR_PIN20_Msk (0x01 << GPIO_DIR_PIN20_Pos) +#define GPIO_DIR_PIN21_Pos 21 +#define GPIO_DIR_PIN21_Msk (0x01 << GPIO_DIR_PIN21_Pos) +#define GPIO_DIR_PIN22_Pos 22 +#define GPIO_DIR_PIN22_Msk (0x01 << GPIO_DIR_PIN22_Pos) +#define GPIO_DIR_PIN23_Pos 23 +#define GPIO_DIR_PIN23_Msk (0x01 << GPIO_DIR_PIN23_Pos) + +#define GPIO_INTLVLTRG_PIN0_Pos 0 +#define GPIO_INTLVLTRG_PIN0_Msk (0x01 << GPIO_INTLVLTRG_PIN0_Pos) +#define GPIO_INTLVLTRG_PIN1_Pos 1 +#define GPIO_INTLVLTRG_PIN1_Msk (0x01 << GPIO_INTLVLTRG_PIN1_Pos) +#define GPIO_INTLVLTRG_PIN2_Pos 2 +#define GPIO_INTLVLTRG_PIN2_Msk (0x01 << GPIO_INTLVLTRG_PIN2_Pos) +#define GPIO_INTLVLTRG_PIN3_Pos 3 +#define GPIO_INTLVLTRG_PIN3_Msk (0x01 << GPIO_INTLVLTRG_PIN3_Pos) +#define GPIO_INTLVLTRG_PIN4_Pos 4 +#define GPIO_INTLVLTRG_PIN4_Msk (0x01 << GPIO_INTLVLTRG_PIN4_Pos) +#define GPIO_INTLVLTRG_PIN5_Pos 5 +#define GPIO_INTLVLTRG_PIN5_Msk (0x01 << GPIO_INTLVLTRG_PIN5_Pos) +#define GPIO_INTLVLTRG_PIN6_Pos 6 +#define GPIO_INTLVLTRG_PIN6_Msk (0x01 << GPIO_INTLVLTRG_PIN6_Pos) +#define GPIO_INTLVLTRG_PIN7_Pos 7 +#define GPIO_INTLVLTRG_PIN7_Msk (0x01 << GPIO_INTLVLTRG_PIN7_Pos) +#define GPIO_INTLVLTRG_PIN8_Pos 8 +#define GPIO_INTLVLTRG_PIN8_Msk (0x01 << GPIO_INTLVLTRG_PIN8_Pos) +#define GPIO_INTLVLTRG_PIN9_Pos 9 +#define GPIO_INTLVLTRG_PIN9_Msk (0x01 << GPIO_INTLVLTRG_PIN9_Pos) +#define GPIO_INTLVLTRG_PIN10_Pos 10 +#define GPIO_INTLVLTRG_PIN10_Msk (0x01 << GPIO_INTLVLTRG_PIN10_Pos) +#define GPIO_INTLVLTRG_PIN11_Pos 11 +#define GPIO_INTLVLTRG_PIN11_Msk (0x01 << GPIO_INTLVLTRG_PIN11_Pos) +#define GPIO_INTLVLTRG_PIN12_Pos 12 +#define GPIO_INTLVLTRG_PIN12_Msk (0x01 << GPIO_INTLVLTRG_PIN12_Pos) +#define GPIO_INTLVLTRG_PIN13_Pos 13 +#define GPIO_INTLVLTRG_PIN13_Msk (0x01 << GPIO_INTLVLTRG_PIN13_Pos) +#define GPIO_INTLVLTRG_PIN14_Pos 14 +#define GPIO_INTLVLTRG_PIN14_Msk (0x01 << GPIO_INTLVLTRG_PIN14_Pos) +#define GPIO_INTLVLTRG_PIN15_Pos 15 +#define GPIO_INTLVLTRG_PIN15_Msk (0x01 << GPIO_INTLVLTRG_PIN15_Pos) +#define GPIO_INTLVLTRG_PIN16_Pos 16 +#define GPIO_INTLVLTRG_PIN16_Msk (0x01 << GPIO_INTLVLTRG_PIN16_Pos) +#define GPIO_INTLVLTRG_PIN17_Pos 17 +#define GPIO_INTLVLTRG_PIN17_Msk (0x01 << GPIO_INTLVLTRG_PIN17_Pos) +#define GPIO_INTLVLTRG_PIN18_Pos 18 +#define GPIO_INTLVLTRG_PIN18_Msk (0x01 << GPIO_INTLVLTRG_PIN18_Pos) +#define GPIO_INTLVLTRG_PIN19_Pos 19 +#define GPIO_INTLVLTRG_PIN19_Msk (0x01 << GPIO_INTLVLTRG_PIN19_Pos) +#define GPIO_INTLVLTRG_PIN20_Pos 20 +#define GPIO_INTLVLTRG_PIN20_Msk (0x01 << GPIO_INTLVLTRG_PIN20_Pos) +#define GPIO_INTLVLTRG_PIN21_Pos 21 +#define GPIO_INTLVLTRG_PIN21_Msk (0x01 << GPIO_INTLVLTRG_PIN21_Pos) +#define GPIO_INTLVLTRG_PIN22_Pos 22 +#define GPIO_INTLVLTRG_PIN22_Msk (0x01 << GPIO_INTLVLTRG_PIN22_Pos) +#define GPIO_INTLVLTRG_PIN23_Pos 23 +#define GPIO_INTLVLTRG_PIN23_Msk (0x01 << GPIO_INTLVLTRG_PIN23_Pos) + +#define GPIO_INTBE_PIN0_Pos 0 +#define GPIO_INTBE_PIN0_Msk (0x01 << GPIO_INTBE_PIN0_Pos) +#define GPIO_INTBE_PIN1_Pos 1 +#define GPIO_INTBE_PIN1_Msk (0x01 << GPIO_INTBE_PIN1_Pos) +#define GPIO_INTBE_PIN2_Pos 2 +#define GPIO_INTBE_PIN2_Msk (0x01 << GPIO_INTBE_PIN2_Pos) +#define GPIO_INTBE_PIN3_Pos 3 +#define GPIO_INTBE_PIN3_Msk (0x01 << GPIO_INTBE_PIN3_Pos) +#define GPIO_INTBE_PIN4_Pos 4 +#define GPIO_INTBE_PIN4_Msk (0x01 << GPIO_INTBE_PIN4_Pos) +#define GPIO_INTBE_PIN5_Pos 5 +#define GPIO_INTBE_PIN5_Msk (0x01 << GPIO_INTBE_PIN5_Pos) +#define GPIO_INTBE_PIN6_Pos 6 +#define GPIO_INTBE_PIN6_Msk (0x01 << GPIO_INTBE_PIN6_Pos) +#define GPIO_INTBE_PIN7_Pos 7 +#define GPIO_INTBE_PIN7_Msk (0x01 << GPIO_INTBE_PIN7_Pos) +#define GPIO_INTBE_PIN8_Pos 8 +#define GPIO_INTBE_PIN8_Msk (0x01 << GPIO_INTBE_PIN8_Pos) +#define GPIO_INTBE_PIN9_Pos 9 +#define GPIO_INTBE_PIN9_Msk (0x01 << GPIO_INTBE_PIN9_Pos) +#define GPIO_INTBE_PIN10_Pos 10 +#define GPIO_INTBE_PIN10_Msk (0x01 << GPIO_INTBE_PIN10_Pos) +#define GPIO_INTBE_PIN11_Pos 11 +#define GPIO_INTBE_PIN11_Msk (0x01 << GPIO_INTBE_PIN11_Pos) +#define GPIO_INTBE_PIN12_Pos 12 +#define GPIO_INTBE_PIN12_Msk (0x01 << GPIO_INTBE_PIN12_Pos) +#define GPIO_INTBE_PIN13_Pos 13 +#define GPIO_INTBE_PIN13_Msk (0x01 << GPIO_INTBE_PIN13_Pos) +#define GPIO_INTBE_PIN14_Pos 14 +#define GPIO_INTBE_PIN14_Msk (0x01 << GPIO_INTBE_PIN14_Pos) +#define GPIO_INTBE_PIN15_Pos 15 +#define GPIO_INTBE_PIN15_Msk (0x01 << GPIO_INTBE_PIN15_Pos) +#define GPIO_INTBE_PIN16_Pos 16 +#define GPIO_INTBE_PIN16_Msk (0x01 << GPIO_INTBE_PIN16_Pos) +#define GPIO_INTBE_PIN17_Pos 17 +#define GPIO_INTBE_PIN17_Msk (0x01 << GPIO_INTBE_PIN17_Pos) +#define GPIO_INTBE_PIN18_Pos 18 +#define GPIO_INTBE_PIN18_Msk (0x01 << GPIO_INTBE_PIN18_Pos) +#define GPIO_INTBE_PIN19_Pos 19 +#define GPIO_INTBE_PIN19_Msk (0x01 << GPIO_INTBE_PIN19_Pos) +#define GPIO_INTBE_PIN20_Pos 20 +#define GPIO_INTBE_PIN20_Msk (0x01 << GPIO_INTBE_PIN20_Pos) +#define GPIO_INTBE_PIN21_Pos 21 +#define GPIO_INTBE_PIN21_Msk (0x01 << GPIO_INTBE_PIN21_Pos) +#define GPIO_INTBE_PIN22_Pos 22 +#define GPIO_INTBE_PIN22_Msk (0x01 << GPIO_INTBE_PIN22_Pos) +#define GPIO_INTBE_PIN23_Pos 23 +#define GPIO_INTBE_PIN23_Msk (0x01 << GPIO_INTBE_PIN23_Pos) + +#define GPIO_INTRISEEN_PIN0_Pos 0 +#define GPIO_INTRISEEN_PIN0_Msk (0x01 << GPIO_INTRISEEN_PIN0_Pos) +#define GPIO_INTRISEEN_PIN1_Pos 1 +#define GPIO_INTRISEEN_PIN1_Msk (0x01 << GPIO_INTRISEEN_PIN1_Pos) +#define GPIO_INTRISEEN_PIN2_Pos 2 +#define GPIO_INTRISEEN_PIN2_Msk (0x01 << GPIO_INTRISEEN_PIN2_Pos) +#define GPIO_INTRISEEN_PIN3_Pos 3 +#define GPIO_INTRISEEN_PIN3_Msk (0x01 << GPIO_INTRISEEN_PIN3_Pos) +#define GPIO_INTRISEEN_PIN4_Pos 4 +#define GPIO_INTRISEEN_PIN4_Msk (0x01 << GPIO_INTRISEEN_PIN4_Pos) +#define GPIO_INTRISEEN_PIN5_Pos 5 +#define GPIO_INTRISEEN_PIN5_Msk (0x01 << GPIO_INTRISEEN_PIN5_Pos) +#define GPIO_INTRISEEN_PIN6_Pos 6 +#define GPIO_INTRISEEN_PIN6_Msk (0x01 << GPIO_INTRISEEN_PIN6_Pos) +#define GPIO_INTRISEEN_PIN7_Pos 7 +#define GPIO_INTRISEEN_PIN7_Msk (0x01 << GPIO_INTRISEEN_PIN7_Pos) +#define GPIO_INTRISEEN_PIN8_Pos 8 +#define GPIO_INTRISEEN_PIN8_Msk (0x01 << GPIO_INTRISEEN_PIN8_Pos) +#define GPIO_INTRISEEN_PIN9_Pos 9 +#define GPIO_INTRISEEN_PIN9_Msk (0x01 << GPIO_INTRISEEN_PIN9_Pos) +#define GPIO_INTRISEEN_PIN10_Pos 10 +#define GPIO_INTRISEEN_PIN10_Msk (0x01 << GPIO_INTRISEEN_PIN10_Pos) +#define GPIO_INTRISEEN_PIN11_Pos 11 +#define GPIO_INTRISEEN_PIN11_Msk (0x01 << GPIO_INTRISEEN_PIN11_Pos) +#define GPIO_INTRISEEN_PIN12_Pos 12 +#define GPIO_INTRISEEN_PIN12_Msk (0x01 << GPIO_INTRISEEN_PIN12_Pos) +#define GPIO_INTRISEEN_PIN13_Pos 13 +#define GPIO_INTRISEEN_PIN13_Msk (0x01 << GPIO_INTRISEEN_PIN13_Pos) +#define GPIO_INTRISEEN_PIN14_Pos 14 +#define GPIO_INTRISEEN_PIN14_Msk (0x01 << GPIO_INTRISEEN_PIN14_Pos) +#define GPIO_INTRISEEN_PIN15_Pos 15 +#define GPIO_INTRISEEN_PIN15_Msk (0x01 << GPIO_INTRISEEN_PIN15_Pos) +#define GPIO_INTRISEEN_PIN16_Pos 16 +#define GPIO_INTRISEEN_PIN16_Msk (0x01 << GPIO_INTRISEEN_PIN16_Pos) +#define GPIO_INTRISEEN_PIN17_Pos 17 +#define GPIO_INTRISEEN_PIN17_Msk (0x01 << GPIO_INTRISEEN_PIN17_Pos) +#define GPIO_INTRISEEN_PIN18_Pos 18 +#define GPIO_INTRISEEN_PIN18_Msk (0x01 << GPIO_INTRISEEN_PIN18_Pos) +#define GPIO_INTRISEEN_PIN19_Pos 19 +#define GPIO_INTRISEEN_PIN19_Msk (0x01 << GPIO_INTRISEEN_PIN19_Pos) +#define GPIO_INTRISEEN_PIN20_Pos 20 +#define GPIO_INTRISEEN_PIN20_Msk (0x01 << GPIO_INTRISEEN_PIN20_Pos) +#define GPIO_INTRISEEN_PIN21_Pos 21 +#define GPIO_INTRISEEN_PIN21_Msk (0x01 << GPIO_INTRISEEN_PIN21_Pos) +#define GPIO_INTRISEEN_PIN22_Pos 22 +#define GPIO_INTRISEEN_PIN22_Msk (0x01 << GPIO_INTRISEEN_PIN22_Pos) +#define GPIO_INTRISEEN_PIN23_Pos 23 +#define GPIO_INTRISEEN_PIN23_Msk (0x01 << GPIO_INTRISEEN_PIN23_Pos) + +#define GPIO_INTEN_PIN0_Pos 0 +#define GPIO_INTEN_PIN0_Msk (0x01 << GPIO_INTEN_PIN0_Pos) +#define GPIO_INTEN_PIN1_Pos 1 +#define GPIO_INTEN_PIN1_Msk (0x01 << GPIO_INTEN_PIN1_Pos) +#define GPIO_INTEN_PIN2_Pos 2 +#define GPIO_INTEN_PIN2_Msk (0x01 << GPIO_INTEN_PIN2_Pos) +#define GPIO_INTEN_PIN3_Pos 3 +#define GPIO_INTEN_PIN3_Msk (0x01 << GPIO_INTEN_PIN3_Pos) +#define GPIO_INTEN_PIN4_Pos 4 +#define GPIO_INTEN_PIN4_Msk (0x01 << GPIO_INTEN_PIN4_Pos) +#define GPIO_INTEN_PIN5_Pos 5 +#define GPIO_INTEN_PIN5_Msk (0x01 << GPIO_INTEN_PIN5_Pos) +#define GPIO_INTEN_PIN6_Pos 6 +#define GPIO_INTEN_PIN6_Msk (0x01 << GPIO_INTEN_PIN6_Pos) +#define GPIO_INTEN_PIN7_Pos 7 +#define GPIO_INTEN_PIN7_Msk (0x01 << GPIO_INTEN_PIN7_Pos) +#define GPIO_INTEN_PIN8_Pos 8 +#define GPIO_INTEN_PIN8_Msk (0x01 << GPIO_INTEN_PIN8_Pos) +#define GPIO_INTEN_PIN9_Pos 9 +#define GPIO_INTEN_PIN9_Msk (0x01 << GPIO_INTEN_PIN9_Pos) +#define GPIO_INTEN_PIN10_Pos 10 +#define GPIO_INTEN_PIN10_Msk (0x01 << GPIO_INTEN_PIN10_Pos) +#define GPIO_INTEN_PIN11_Pos 11 +#define GPIO_INTEN_PIN11_Msk (0x01 << GPIO_INTEN_PIN11_Pos) +#define GPIO_INTEN_PIN12_Pos 12 +#define GPIO_INTEN_PIN12_Msk (0x01 << GPIO_INTEN_PIN12_Pos) +#define GPIO_INTEN_PIN13_Pos 13 +#define GPIO_INTEN_PIN13_Msk (0x01 << GPIO_INTEN_PIN13_Pos) +#define GPIO_INTEN_PIN14_Pos 14 +#define GPIO_INTEN_PIN14_Msk (0x01 << GPIO_INTEN_PIN14_Pos) +#define GPIO_INTEN_PIN15_Pos 15 +#define GPIO_INTEN_PIN15_Msk (0x01 << GPIO_INTEN_PIN15_Pos) +#define GPIO_INTEN_PIN16_Pos 16 +#define GPIO_INTEN_PIN16_Msk (0x01 << GPIO_INTEN_PIN16_Pos) +#define GPIO_INTEN_PIN17_Pos 17 +#define GPIO_INTEN_PIN17_Msk (0x01 << GPIO_INTEN_PIN17_Pos) +#define GPIO_INTEN_PIN18_Pos 18 +#define GPIO_INTEN_PIN18_Msk (0x01 << GPIO_INTEN_PIN18_Pos) +#define GPIO_INTEN_PIN19_Pos 19 +#define GPIO_INTEN_PIN19_Msk (0x01 << GPIO_INTEN_PIN19_Pos) +#define GPIO_INTEN_PIN20_Pos 20 +#define GPIO_INTEN_PIN20_Msk (0x01 << GPIO_INTEN_PIN20_Pos) +#define GPIO_INTEN_PIN21_Pos 21 +#define GPIO_INTEN_PIN21_Msk (0x01 << GPIO_INTEN_PIN21_Pos) +#define GPIO_INTEN_PIN22_Pos 22 +#define GPIO_INTEN_PIN22_Msk (0x01 << GPIO_INTEN_PIN22_Pos) +#define GPIO_INTEN_PIN23_Pos 23 +#define GPIO_INTEN_PIN23_Msk (0x01 << GPIO_INTEN_PIN23_Pos) + +#define GPIO_INTRAWSTAT_PIN0_Pos 0 +#define GPIO_INTRAWSTAT_PIN0_Msk (0x01 << GPIO_INTRAWSTAT_PIN0_Pos) +#define GPIO_INTRAWSTAT_PIN1_Pos 1 +#define GPIO_INTRAWSTAT_PIN1_Msk (0x01 << GPIO_INTRAWSTAT_PIN1_Pos) +#define GPIO_INTRAWSTAT_PIN2_Pos 2 +#define GPIO_INTRAWSTAT_PIN2_Msk (0x01 << GPIO_INTRAWSTAT_PIN2_Pos) +#define GPIO_INTRAWSTAT_PIN3_Pos 3 +#define GPIO_INTRAWSTAT_PIN3_Msk (0x01 << GPIO_INTRAWSTAT_PIN3_Pos) +#define GPIO_INTRAWSTAT_PIN4_Pos 4 +#define GPIO_INTRAWSTAT_PIN4_Msk (0x01 << GPIO_INTRAWSTAT_PIN4_Pos) +#define GPIO_INTRAWSTAT_PIN5_Pos 5 +#define GPIO_INTRAWSTAT_PIN5_Msk (0x01 << GPIO_INTRAWSTAT_PIN5_Pos) +#define GPIO_INTRAWSTAT_PIN6_Pos 6 +#define GPIO_INTRAWSTAT_PIN6_Msk (0x01 << GPIO_INTRAWSTAT_PIN6_Pos) +#define GPIO_INTRAWSTAT_PIN7_Pos 7 +#define GPIO_INTRAWSTAT_PIN7_Msk (0x01 << GPIO_INTRAWSTAT_PIN7_Pos) +#define GPIO_INTRAWSTAT_PIN8_Pos 8 +#define GPIO_INTRAWSTAT_PIN8_Msk (0x01 << GPIO_INTRAWSTAT_PIN8_Pos) +#define GPIO_INTRAWSTAT_PIN9_Pos 9 +#define GPIO_INTRAWSTAT_PIN9_Msk (0x01 << GPIO_INTRAWSTAT_PIN9_Pos) +#define GPIO_INTRAWSTAT_PIN10_Pos 10 +#define GPIO_INTRAWSTAT_PIN10_Msk (0x01 << GPIO_INTRAWSTAT_PIN10_Pos) +#define GPIO_INTRAWSTAT_PIN11_Pos 11 +#define GPIO_INTRAWSTAT_PIN11_Msk (0x01 << GPIO_INTRAWSTAT_PIN11_Pos) +#define GPIO_INTRAWSTAT_PIN12_Pos 12 +#define GPIO_INTRAWSTAT_PIN12_Msk (0x01 << GPIO_INTRAWSTAT_PIN12_Pos) +#define GPIO_INTRAWSTAT_PIN13_Pos 13 +#define GPIO_INTRAWSTAT_PIN13_Msk (0x01 << GPIO_INTRAWSTAT_PIN13_Pos) +#define GPIO_INTRAWSTAT_PIN14_Pos 14 +#define GPIO_INTRAWSTAT_PIN14_Msk (0x01 << GPIO_INTRAWSTAT_PIN14_Pos) +#define GPIO_INTRAWSTAT_PIN15_Pos 15 +#define GPIO_INTRAWSTAT_PIN15_Msk (0x01 << GPIO_INTRAWSTAT_PIN15_Pos) +#define GPIO_INTRAWSTAT_PIN16_Pos 16 +#define GPIO_INTRAWSTAT_PIN16_Msk (0x01 << GPIO_INTRAWSTAT_PIN16_Pos) +#define GPIO_INTRAWSTAT_PIN17_Pos 17 +#define GPIO_INTRAWSTAT_PIN17_Msk (0x01 << GPIO_INTRAWSTAT_PIN17_Pos) +#define GPIO_INTRAWSTAT_PIN18_Pos 18 +#define GPIO_INTRAWSTAT_PIN18_Msk (0x01 << GPIO_INTRAWSTAT_PIN18_Pos) +#define GPIO_INTRAWSTAT_PIN19_Pos 19 +#define GPIO_INTRAWSTAT_PIN19_Msk (0x01 << GPIO_INTRAWSTAT_PIN19_Pos) +#define GPIO_INTRAWSTAT_PIN20_Pos 20 +#define GPIO_INTRAWSTAT_PIN20_Msk (0x01 << GPIO_INTRAWSTAT_PIN20_Pos) +#define GPIO_INTRAWSTAT_PIN21_Pos 21 +#define GPIO_INTRAWSTAT_PIN21_Msk (0x01 << GPIO_INTRAWSTAT_PIN21_Pos) +#define GPIO_INTRAWSTAT_PIN22_Pos 22 +#define GPIO_INTRAWSTAT_PIN22_Msk (0x01 << GPIO_INTRAWSTAT_PIN22_Pos) +#define GPIO_INTRAWSTAT_PIN23_Pos 23 +#define GPIO_INTRAWSTAT_PIN23_Msk (0x01 << GPIO_INTRAWSTAT_PIN23_Pos) + +#define GPIO_INTSTAT_PIN0_Pos 0 +#define GPIO_INTSTAT_PIN0_Msk (0x01 << GPIO_INTSTAT_PIN0_Pos) +#define GPIO_INTSTAT_PIN1_Pos 1 +#define GPIO_INTSTAT_PIN1_Msk (0x01 << GPIO_INTSTAT_PIN1_Pos) +#define GPIO_INTSTAT_PIN2_Pos 2 +#define GPIO_INTSTAT_PIN2_Msk (0x01 << GPIO_INTSTAT_PIN2_Pos) +#define GPIO_INTSTAT_PIN3_Pos 3 +#define GPIO_INTSTAT_PIN3_Msk (0x01 << GPIO_INTSTAT_PIN3_Pos) +#define GPIO_INTSTAT_PIN4_Pos 4 +#define GPIO_INTSTAT_PIN4_Msk (0x01 << GPIO_INTSTAT_PIN4_Pos) +#define GPIO_INTSTAT_PIN5_Pos 5 +#define GPIO_INTSTAT_PIN5_Msk (0x01 << GPIO_INTSTAT_PIN5_Pos) +#define GPIO_INTSTAT_PIN6_Pos 6 +#define GPIO_INTSTAT_PIN6_Msk (0x01 << GPIO_INTSTAT_PIN6_Pos) +#define GPIO_INTSTAT_PIN7_Pos 7 +#define GPIO_INTSTAT_PIN7_Msk (0x01 << GPIO_INTSTAT_PIN7_Pos) +#define GPIO_INTSTAT_PIN8_Pos 8 +#define GPIO_INTSTAT_PIN8_Msk (0x01 << GPIO_INTSTAT_PIN8_Pos) +#define GPIO_INTSTAT_PIN9_Pos 9 +#define GPIO_INTSTAT_PIN9_Msk (0x01 << GPIO_INTSTAT_PIN9_Pos) +#define GPIO_INTSTAT_PIN10_Pos 10 +#define GPIO_INTSTAT_PIN10_Msk (0x01 << GPIO_INTSTAT_PIN10_Pos) +#define GPIO_INTSTAT_PIN11_Pos 11 +#define GPIO_INTSTAT_PIN11_Msk (0x01 << GPIO_INTSTAT_PIN11_Pos) +#define GPIO_INTSTAT_PIN12_Pos 12 +#define GPIO_INTSTAT_PIN12_Msk (0x01 << GPIO_INTSTAT_PIN12_Pos) +#define GPIO_INTSTAT_PIN13_Pos 13 +#define GPIO_INTSTAT_PIN13_Msk (0x01 << GPIO_INTSTAT_PIN13_Pos) +#define GPIO_INTSTAT_PIN14_Pos 14 +#define GPIO_INTSTAT_PIN14_Msk (0x01 << GPIO_INTSTAT_PIN14_Pos) +#define GPIO_INTSTAT_PIN15_Pos 15 +#define GPIO_INTSTAT_PIN15_Msk (0x01 << GPIO_INTSTAT_PIN15_Pos) +#define GPIO_INTSTAT_PIN16_Pos 16 +#define GPIO_INTSTAT_PIN16_Msk (0x01 << GPIO_INTSTAT_PIN16_Pos) +#define GPIO_INTSTAT_PIN17_Pos 17 +#define GPIO_INTSTAT_PIN17_Msk (0x01 << GPIO_INTSTAT_PIN17_Pos) +#define GPIO_INTSTAT_PIN18_Pos 18 +#define GPIO_INTSTAT_PIN18_Msk (0x01 << GPIO_INTSTAT_PIN18_Pos) +#define GPIO_INTSTAT_PIN19_Pos 19 +#define GPIO_INTSTAT_PIN19_Msk (0x01 << GPIO_INTSTAT_PIN19_Pos) +#define GPIO_INTSTAT_PIN20_Pos 20 +#define GPIO_INTSTAT_PIN20_Msk (0x01 << GPIO_INTSTAT_PIN20_Pos) +#define GPIO_INTSTAT_PIN21_Pos 21 +#define GPIO_INTSTAT_PIN21_Msk (0x01 << GPIO_INTSTAT_PIN21_Pos) +#define GPIO_INTSTAT_PIN22_Pos 22 +#define GPIO_INTSTAT_PIN22_Msk (0x01 << GPIO_INTSTAT_PIN22_Pos) +#define GPIO_INTSTAT_PIN23_Pos 23 +#define GPIO_INTSTAT_PIN23_Msk (0x01 << GPIO_INTSTAT_PIN23_Pos) + +#define GPIO_INTCLR_PIN0_Pos 0 +#define GPIO_INTCLR_PIN0_Msk (0x01 << GPIO_INTCLR_PIN0_Pos) +#define GPIO_INTCLR_PIN1_Pos 1 +#define GPIO_INTCLR_PIN1_Msk (0x01 << GPIO_INTCLR_PIN1_Pos) +#define GPIO_INTCLR_PIN2_Pos 2 +#define GPIO_INTCLR_PIN2_Msk (0x01 << GPIO_INTCLR_PIN2_Pos) +#define GPIO_INTCLR_PIN3_Pos 3 +#define GPIO_INTCLR_PIN3_Msk (0x01 << GPIO_INTCLR_PIN3_Pos) +#define GPIO_INTCLR_PIN4_Pos 4 +#define GPIO_INTCLR_PIN4_Msk (0x01 << GPIO_INTCLR_PIN4_Pos) +#define GPIO_INTCLR_PIN5_Pos 5 +#define GPIO_INTCLR_PIN5_Msk (0x01 << GPIO_INTCLR_PIN5_Pos) +#define GPIO_INTCLR_PIN6_Pos 6 +#define GPIO_INTCLR_PIN6_Msk (0x01 << GPIO_INTCLR_PIN6_Pos) +#define GPIO_INTCLR_PIN7_Pos 7 +#define GPIO_INTCLR_PIN7_Msk (0x01 << GPIO_INTCLR_PIN7_Pos) +#define GPIO_INTCLR_PIN8_Pos 8 +#define GPIO_INTCLR_PIN8_Msk (0x01 << GPIO_INTCLR_PIN8_Pos) +#define GPIO_INTCLR_PIN9_Pos 9 +#define GPIO_INTCLR_PIN9_Msk (0x01 << GPIO_INTCLR_PIN9_Pos) +#define GPIO_INTCLR_PIN10_Pos 10 +#define GPIO_INTCLR_PIN10_Msk (0x01 << GPIO_INTCLR_PIN10_Pos) +#define GPIO_INTCLR_PIN11_Pos 11 +#define GPIO_INTCLR_PIN11_Msk (0x01 << GPIO_INTCLR_PIN11_Pos) +#define GPIO_INTCLR_PIN12_Pos 12 +#define GPIO_INTCLR_PIN12_Msk (0x01 << GPIO_INTCLR_PIN12_Pos) +#define GPIO_INTCLR_PIN13_Pos 13 +#define GPIO_INTCLR_PIN13_Msk (0x01 << GPIO_INTCLR_PIN13_Pos) +#define GPIO_INTCLR_PIN14_Pos 14 +#define GPIO_INTCLR_PIN14_Msk (0x01 << GPIO_INTCLR_PIN14_Pos) +#define GPIO_INTCLR_PIN15_Pos 15 +#define GPIO_INTCLR_PIN15_Msk (0x01 << GPIO_INTCLR_PIN15_Pos) +#define GPIO_INTCLR_PIN16_Pos 16 +#define GPIO_INTCLR_PIN16_Msk (0x01 << GPIO_INTCLR_PIN16_Pos) +#define GPIO_INTCLR_PIN17_Pos 17 +#define GPIO_INTCLR_PIN17_Msk (0x01 << GPIO_INTCLR_PIN17_Pos) +#define GPIO_INTCLR_PIN18_Pos 18 +#define GPIO_INTCLR_PIN18_Msk (0x01 << GPIO_INTCLR_PIN18_Pos) +#define GPIO_INTCLR_PIN19_Pos 19 +#define GPIO_INTCLR_PIN19_Msk (0x01 << GPIO_INTCLR_PIN19_Pos) +#define GPIO_INTCLR_PIN20_Pos 20 +#define GPIO_INTCLR_PIN20_Msk (0x01 << GPIO_INTCLR_PIN20_Pos) +#define GPIO_INTCLR_PIN21_Pos 21 +#define GPIO_INTCLR_PIN21_Msk (0x01 << GPIO_INTCLR_PIN21_Pos) +#define GPIO_INTCLR_PIN22_Pos 22 +#define GPIO_INTCLR_PIN22_Msk (0x01 << GPIO_INTCLR_PIN22_Pos) +#define GPIO_INTCLR_PIN23_Pos 23 +#define GPIO_INTCLR_PIN23_Msk (0x01 << GPIO_INTCLR_PIN23_Pos) + +typedef struct +{ + __IO uint32_t LDVAL; //定时器加载值,使能å�Žå®šæ—¶å™¨ä»Žæ­¤æ•°å€¼å¼€å§‹å�‘下递å‡�计数 + + __I uint32_t CVAL; //定时器当å‰�值,LDVAL-CVAL å�¯è®¡ç®—出计时时长 -#define GPIO_DATA_PIN0_Pos 0 -#define GPIO_DATA_PIN0_Msk (0x01 << GPIO_DATA_PIN0_Pos) -#define GPIO_DATA_PIN1_Pos 1 -#define GPIO_DATA_PIN1_Msk (0x01 << GPIO_DATA_PIN1_Pos) -#define GPIO_DATA_PIN2_Pos 2 -#define GPIO_DATA_PIN2_Msk (0x01 << GPIO_DATA_PIN2_Pos) -#define GPIO_DATA_PIN3_Pos 3 -#define GPIO_DATA_PIN3_Msk (0x01 << GPIO_DATA_PIN3_Pos) -#define GPIO_DATA_PIN4_Pos 4 -#define GPIO_DATA_PIN4_Msk (0x01 << GPIO_DATA_PIN4_Pos) -#define GPIO_DATA_PIN5_Pos 5 -#define GPIO_DATA_PIN5_Msk (0x01 << GPIO_DATA_PIN5_Pos) -#define GPIO_DATA_PIN6_Pos 6 -#define GPIO_DATA_PIN6_Msk (0x01 << GPIO_DATA_PIN6_Pos) -#define GPIO_DATA_PIN7_Pos 7 -#define GPIO_DATA_PIN7_Msk (0x01 << GPIO_DATA_PIN7_Pos) -#define GPIO_DATA_PIN8_Pos 8 -#define GPIO_DATA_PIN8_Msk (0x01 << GPIO_DATA_PIN8_Pos) -#define GPIO_DATA_PIN9_Pos 9 -#define GPIO_DATA_PIN9_Msk (0x01 << GPIO_DATA_PIN9_Pos) -#define GPIO_DATA_PIN10_Pos 10 -#define GPIO_DATA_PIN10_Msk (0x01 << GPIO_DATA_PIN10_Pos) -#define GPIO_DATA_PIN11_Pos 11 -#define GPIO_DATA_PIN11_Msk (0x01 << GPIO_DATA_PIN11_Pos) -#define GPIO_DATA_PIN12_Pos 12 -#define GPIO_DATA_PIN12_Msk (0x01 << GPIO_DATA_PIN12_Pos) -#define GPIO_DATA_PIN13_Pos 13 -#define GPIO_DATA_PIN13_Msk (0x01 << GPIO_DATA_PIN13_Pos) -#define GPIO_DATA_PIN14_Pos 14 -#define GPIO_DATA_PIN14_Msk (0x01 << GPIO_DATA_PIN14_Pos) -#define GPIO_DATA_PIN15_Pos 15 -#define GPIO_DATA_PIN15_Msk (0x01 << GPIO_DATA_PIN15_Pos) -#define GPIO_DATA_PIN16_Pos 16 -#define GPIO_DATA_PIN16_Msk (0x01 << GPIO_DATA_PIN16_Pos) -#define GPIO_DATA_PIN17_Pos 17 -#define GPIO_DATA_PIN17_Msk (0x01 << GPIO_DATA_PIN17_Pos) -#define GPIO_DATA_PIN18_Pos 18 -#define GPIO_DATA_PIN18_Msk (0x01 << GPIO_DATA_PIN18_Pos) -#define GPIO_DATA_PIN19_Pos 19 -#define GPIO_DATA_PIN19_Msk (0x01 << GPIO_DATA_PIN19_Pos) -#define GPIO_DATA_PIN20_Pos 20 -#define GPIO_DATA_PIN20_Msk (0x01 << GPIO_DATA_PIN20_Pos) -#define GPIO_DATA_PIN21_Pos 21 -#define GPIO_DATA_PIN21_Msk (0x01 << GPIO_DATA_PIN21_Pos) -#define GPIO_DATA_PIN22_Pos 22 -#define GPIO_DATA_PIN22_Msk (0x01 << GPIO_DATA_PIN22_Pos) -#define GPIO_DATA_PIN23_Pos 23 -#define GPIO_DATA_PIN23_Msk (0x01 << GPIO_DATA_PIN23_Pos) - -#define GPIO_DIR_PIN0_Pos 0 -#define GPIO_DIR_PIN0_Msk (0x01 << GPIO_DIR_PIN0_Pos) -#define GPIO_DIR_PIN1_Pos 1 -#define GPIO_DIR_PIN1_Msk (0x01 << GPIO_DIR_PIN1_Pos) -#define GPIO_DIR_PIN2_Pos 2 -#define GPIO_DIR_PIN2_Msk (0x01 << GPIO_DIR_PIN2_Pos) -#define GPIO_DIR_PIN3_Pos 3 -#define GPIO_DIR_PIN3_Msk (0x01 << GPIO_DIR_PIN3_Pos) -#define GPIO_DIR_PIN4_Pos 4 -#define GPIO_DIR_PIN4_Msk (0x01 << GPIO_DIR_PIN4_Pos) -#define GPIO_DIR_PIN5_Pos 5 -#define GPIO_DIR_PIN5_Msk (0x01 << GPIO_DIR_PIN5_Pos) -#define GPIO_DIR_PIN6_Pos 6 -#define GPIO_DIR_PIN6_Msk (0x01 << GPIO_DIR_PIN6_Pos) -#define GPIO_DIR_PIN7_Pos 7 -#define GPIO_DIR_PIN7_Msk (0x01 << GPIO_DIR_PIN7_Pos) -#define GPIO_DIR_PIN8_Pos 8 -#define GPIO_DIR_PIN8_Msk (0x01 << GPIO_DIR_PIN8_Pos) -#define GPIO_DIR_PIN9_Pos 9 -#define GPIO_DIR_PIN9_Msk (0x01 << GPIO_DIR_PIN9_Pos) -#define GPIO_DIR_PIN10_Pos 10 -#define GPIO_DIR_PIN10_Msk (0x01 << GPIO_DIR_PIN10_Pos) -#define GPIO_DIR_PIN11_Pos 11 -#define GPIO_DIR_PIN11_Msk (0x01 << GPIO_DIR_PIN11_Pos) -#define GPIO_DIR_PIN12_Pos 12 -#define GPIO_DIR_PIN12_Msk (0x01 << GPIO_DIR_PIN12_Pos) -#define GPIO_DIR_PIN13_Pos 13 -#define GPIO_DIR_PIN13_Msk (0x01 << GPIO_DIR_PIN13_Pos) -#define GPIO_DIR_PIN14_Pos 14 -#define GPIO_DIR_PIN14_Msk (0x01 << GPIO_DIR_PIN14_Pos) -#define GPIO_DIR_PIN15_Pos 15 -#define GPIO_DIR_PIN15_Msk (0x01 << GPIO_DIR_PIN15_Pos) -#define GPIO_DIR_PIN16_Pos 16 -#define GPIO_DIR_PIN16_Msk (0x01 << GPIO_DIR_PIN16_Pos) -#define GPIO_DIR_PIN17_Pos 17 -#define GPIO_DIR_PIN17_Msk (0x01 << GPIO_DIR_PIN17_Pos) -#define GPIO_DIR_PIN18_Pos 18 -#define GPIO_DIR_PIN18_Msk (0x01 << GPIO_DIR_PIN18_Pos) -#define GPIO_DIR_PIN19_Pos 19 -#define GPIO_DIR_PIN19_Msk (0x01 << GPIO_DIR_PIN19_Pos) -#define GPIO_DIR_PIN20_Pos 20 -#define GPIO_DIR_PIN20_Msk (0x01 << GPIO_DIR_PIN20_Pos) -#define GPIO_DIR_PIN21_Pos 21 -#define GPIO_DIR_PIN21_Msk (0x01 << GPIO_DIR_PIN21_Pos) -#define GPIO_DIR_PIN22_Pos 22 -#define GPIO_DIR_PIN22_Msk (0x01 << GPIO_DIR_PIN22_Pos) -#define GPIO_DIR_PIN23_Pos 23 -#define GPIO_DIR_PIN23_Msk (0x01 << GPIO_DIR_PIN23_Pos) - -#define GPIO_INTLVLTRG_PIN0_Pos 0 -#define GPIO_INTLVLTRG_PIN0_Msk (0x01 << GPIO_INTLVLTRG_PIN0_Pos) -#define GPIO_INTLVLTRG_PIN1_Pos 1 -#define GPIO_INTLVLTRG_PIN1_Msk (0x01 << GPIO_INTLVLTRG_PIN1_Pos) -#define GPIO_INTLVLTRG_PIN2_Pos 2 -#define GPIO_INTLVLTRG_PIN2_Msk (0x01 << GPIO_INTLVLTRG_PIN2_Pos) -#define GPIO_INTLVLTRG_PIN3_Pos 3 -#define GPIO_INTLVLTRG_PIN3_Msk (0x01 << GPIO_INTLVLTRG_PIN3_Pos) -#define GPIO_INTLVLTRG_PIN4_Pos 4 -#define GPIO_INTLVLTRG_PIN4_Msk (0x01 << GPIO_INTLVLTRG_PIN4_Pos) -#define GPIO_INTLVLTRG_PIN5_Pos 5 -#define GPIO_INTLVLTRG_PIN5_Msk (0x01 << GPIO_INTLVLTRG_PIN5_Pos) -#define GPIO_INTLVLTRG_PIN6_Pos 6 -#define GPIO_INTLVLTRG_PIN6_Msk (0x01 << GPIO_INTLVLTRG_PIN6_Pos) -#define GPIO_INTLVLTRG_PIN7_Pos 7 -#define GPIO_INTLVLTRG_PIN7_Msk (0x01 << GPIO_INTLVLTRG_PIN7_Pos) -#define GPIO_INTLVLTRG_PIN8_Pos 8 -#define GPIO_INTLVLTRG_PIN8_Msk (0x01 << GPIO_INTLVLTRG_PIN8_Pos) -#define GPIO_INTLVLTRG_PIN9_Pos 9 -#define GPIO_INTLVLTRG_PIN9_Msk (0x01 << GPIO_INTLVLTRG_PIN9_Pos) -#define GPIO_INTLVLTRG_PIN10_Pos 10 -#define GPIO_INTLVLTRG_PIN10_Msk (0x01 << GPIO_INTLVLTRG_PIN10_Pos) -#define GPIO_INTLVLTRG_PIN11_Pos 11 -#define GPIO_INTLVLTRG_PIN11_Msk (0x01 << GPIO_INTLVLTRG_PIN11_Pos) -#define GPIO_INTLVLTRG_PIN12_Pos 12 -#define GPIO_INTLVLTRG_PIN12_Msk (0x01 << GPIO_INTLVLTRG_PIN12_Pos) -#define GPIO_INTLVLTRG_PIN13_Pos 13 -#define GPIO_INTLVLTRG_PIN13_Msk (0x01 << GPIO_INTLVLTRG_PIN13_Pos) -#define GPIO_INTLVLTRG_PIN14_Pos 14 -#define GPIO_INTLVLTRG_PIN14_Msk (0x01 << GPIO_INTLVLTRG_PIN14_Pos) -#define GPIO_INTLVLTRG_PIN15_Pos 15 -#define GPIO_INTLVLTRG_PIN15_Msk (0x01 << GPIO_INTLVLTRG_PIN15_Pos) -#define GPIO_INTLVLTRG_PIN16_Pos 16 -#define GPIO_INTLVLTRG_PIN16_Msk (0x01 << GPIO_INTLVLTRG_PIN16_Pos) -#define GPIO_INTLVLTRG_PIN17_Pos 17 -#define GPIO_INTLVLTRG_PIN17_Msk (0x01 << GPIO_INTLVLTRG_PIN17_Pos) -#define GPIO_INTLVLTRG_PIN18_Pos 18 -#define GPIO_INTLVLTRG_PIN18_Msk (0x01 << GPIO_INTLVLTRG_PIN18_Pos) -#define GPIO_INTLVLTRG_PIN19_Pos 19 -#define GPIO_INTLVLTRG_PIN19_Msk (0x01 << GPIO_INTLVLTRG_PIN19_Pos) -#define GPIO_INTLVLTRG_PIN20_Pos 20 -#define GPIO_INTLVLTRG_PIN20_Msk (0x01 << GPIO_INTLVLTRG_PIN20_Pos) -#define GPIO_INTLVLTRG_PIN21_Pos 21 -#define GPIO_INTLVLTRG_PIN21_Msk (0x01 << GPIO_INTLVLTRG_PIN21_Pos) -#define GPIO_INTLVLTRG_PIN22_Pos 22 -#define GPIO_INTLVLTRG_PIN22_Msk (0x01 << GPIO_INTLVLTRG_PIN22_Pos) -#define GPIO_INTLVLTRG_PIN23_Pos 23 -#define GPIO_INTLVLTRG_PIN23_Msk (0x01 << GPIO_INTLVLTRG_PIN23_Pos) - -#define GPIO_INTBE_PIN0_Pos 0 -#define GPIO_INTBE_PIN0_Msk (0x01 << GPIO_INTBE_PIN0_Pos) -#define GPIO_INTBE_PIN1_Pos 1 -#define GPIO_INTBE_PIN1_Msk (0x01 << GPIO_INTBE_PIN1_Pos) -#define GPIO_INTBE_PIN2_Pos 2 -#define GPIO_INTBE_PIN2_Msk (0x01 << GPIO_INTBE_PIN2_Pos) -#define GPIO_INTBE_PIN3_Pos 3 -#define GPIO_INTBE_PIN3_Msk (0x01 << GPIO_INTBE_PIN3_Pos) -#define GPIO_INTBE_PIN4_Pos 4 -#define GPIO_INTBE_PIN4_Msk (0x01 << GPIO_INTBE_PIN4_Pos) -#define GPIO_INTBE_PIN5_Pos 5 -#define GPIO_INTBE_PIN5_Msk (0x01 << GPIO_INTBE_PIN5_Pos) -#define GPIO_INTBE_PIN6_Pos 6 -#define GPIO_INTBE_PIN6_Msk (0x01 << GPIO_INTBE_PIN6_Pos) -#define GPIO_INTBE_PIN7_Pos 7 -#define GPIO_INTBE_PIN7_Msk (0x01 << GPIO_INTBE_PIN7_Pos) -#define GPIO_INTBE_PIN8_Pos 8 -#define GPIO_INTBE_PIN8_Msk (0x01 << GPIO_INTBE_PIN8_Pos) -#define GPIO_INTBE_PIN9_Pos 9 -#define GPIO_INTBE_PIN9_Msk (0x01 << GPIO_INTBE_PIN9_Pos) -#define GPIO_INTBE_PIN10_Pos 10 -#define GPIO_INTBE_PIN10_Msk (0x01 << GPIO_INTBE_PIN10_Pos) -#define GPIO_INTBE_PIN11_Pos 11 -#define GPIO_INTBE_PIN11_Msk (0x01 << GPIO_INTBE_PIN11_Pos) -#define GPIO_INTBE_PIN12_Pos 12 -#define GPIO_INTBE_PIN12_Msk (0x01 << GPIO_INTBE_PIN12_Pos) -#define GPIO_INTBE_PIN13_Pos 13 -#define GPIO_INTBE_PIN13_Msk (0x01 << GPIO_INTBE_PIN13_Pos) -#define GPIO_INTBE_PIN14_Pos 14 -#define GPIO_INTBE_PIN14_Msk (0x01 << GPIO_INTBE_PIN14_Pos) -#define GPIO_INTBE_PIN15_Pos 15 -#define GPIO_INTBE_PIN15_Msk (0x01 << GPIO_INTBE_PIN15_Pos) -#define GPIO_INTBE_PIN16_Pos 16 -#define GPIO_INTBE_PIN16_Msk (0x01 << GPIO_INTBE_PIN16_Pos) -#define GPIO_INTBE_PIN17_Pos 17 -#define GPIO_INTBE_PIN17_Msk (0x01 << GPIO_INTBE_PIN17_Pos) -#define GPIO_INTBE_PIN18_Pos 18 -#define GPIO_INTBE_PIN18_Msk (0x01 << GPIO_INTBE_PIN18_Pos) -#define GPIO_INTBE_PIN19_Pos 19 -#define GPIO_INTBE_PIN19_Msk (0x01 << GPIO_INTBE_PIN19_Pos) -#define GPIO_INTBE_PIN20_Pos 20 -#define GPIO_INTBE_PIN20_Msk (0x01 << GPIO_INTBE_PIN20_Pos) -#define GPIO_INTBE_PIN21_Pos 21 -#define GPIO_INTBE_PIN21_Msk (0x01 << GPIO_INTBE_PIN21_Pos) -#define GPIO_INTBE_PIN22_Pos 22 -#define GPIO_INTBE_PIN22_Msk (0x01 << GPIO_INTBE_PIN22_Pos) -#define GPIO_INTBE_PIN23_Pos 23 -#define GPIO_INTBE_PIN23_Msk (0x01 << GPIO_INTBE_PIN23_Pos) - -#define GPIO_INTRISEEN_PIN0_Pos 0 -#define GPIO_INTRISEEN_PIN0_Msk (0x01 << GPIO_INTRISEEN_PIN0_Pos) -#define GPIO_INTRISEEN_PIN1_Pos 1 -#define GPIO_INTRISEEN_PIN1_Msk (0x01 << GPIO_INTRISEEN_PIN1_Pos) -#define GPIO_INTRISEEN_PIN2_Pos 2 -#define GPIO_INTRISEEN_PIN2_Msk (0x01 << GPIO_INTRISEEN_PIN2_Pos) -#define GPIO_INTRISEEN_PIN3_Pos 3 -#define GPIO_INTRISEEN_PIN3_Msk (0x01 << GPIO_INTRISEEN_PIN3_Pos) -#define GPIO_INTRISEEN_PIN4_Pos 4 -#define GPIO_INTRISEEN_PIN4_Msk (0x01 << GPIO_INTRISEEN_PIN4_Pos) -#define GPIO_INTRISEEN_PIN5_Pos 5 -#define GPIO_INTRISEEN_PIN5_Msk (0x01 << GPIO_INTRISEEN_PIN5_Pos) -#define GPIO_INTRISEEN_PIN6_Pos 6 -#define GPIO_INTRISEEN_PIN6_Msk (0x01 << GPIO_INTRISEEN_PIN6_Pos) -#define GPIO_INTRISEEN_PIN7_Pos 7 -#define GPIO_INTRISEEN_PIN7_Msk (0x01 << GPIO_INTRISEEN_PIN7_Pos) -#define GPIO_INTRISEEN_PIN8_Pos 8 -#define GPIO_INTRISEEN_PIN8_Msk (0x01 << GPIO_INTRISEEN_PIN8_Pos) -#define GPIO_INTRISEEN_PIN9_Pos 9 -#define GPIO_INTRISEEN_PIN9_Msk (0x01 << GPIO_INTRISEEN_PIN9_Pos) -#define GPIO_INTRISEEN_PIN10_Pos 10 -#define GPIO_INTRISEEN_PIN10_Msk (0x01 << GPIO_INTRISEEN_PIN10_Pos) -#define GPIO_INTRISEEN_PIN11_Pos 11 -#define GPIO_INTRISEEN_PIN11_Msk (0x01 << GPIO_INTRISEEN_PIN11_Pos) -#define GPIO_INTRISEEN_PIN12_Pos 12 -#define GPIO_INTRISEEN_PIN12_Msk (0x01 << GPIO_INTRISEEN_PIN12_Pos) -#define GPIO_INTRISEEN_PIN13_Pos 13 -#define GPIO_INTRISEEN_PIN13_Msk (0x01 << GPIO_INTRISEEN_PIN13_Pos) -#define GPIO_INTRISEEN_PIN14_Pos 14 -#define GPIO_INTRISEEN_PIN14_Msk (0x01 << GPIO_INTRISEEN_PIN14_Pos) -#define GPIO_INTRISEEN_PIN15_Pos 15 -#define GPIO_INTRISEEN_PIN15_Msk (0x01 << GPIO_INTRISEEN_PIN15_Pos) -#define GPIO_INTRISEEN_PIN16_Pos 16 -#define GPIO_INTRISEEN_PIN16_Msk (0x01 << GPIO_INTRISEEN_PIN16_Pos) -#define GPIO_INTRISEEN_PIN17_Pos 17 -#define GPIO_INTRISEEN_PIN17_Msk (0x01 << GPIO_INTRISEEN_PIN17_Pos) -#define GPIO_INTRISEEN_PIN18_Pos 18 -#define GPIO_INTRISEEN_PIN18_Msk (0x01 << GPIO_INTRISEEN_PIN18_Pos) -#define GPIO_INTRISEEN_PIN19_Pos 19 -#define GPIO_INTRISEEN_PIN19_Msk (0x01 << GPIO_INTRISEEN_PIN19_Pos) -#define GPIO_INTRISEEN_PIN20_Pos 20 -#define GPIO_INTRISEEN_PIN20_Msk (0x01 << GPIO_INTRISEEN_PIN20_Pos) -#define GPIO_INTRISEEN_PIN21_Pos 21 -#define GPIO_INTRISEEN_PIN21_Msk (0x01 << GPIO_INTRISEEN_PIN21_Pos) -#define GPIO_INTRISEEN_PIN22_Pos 22 -#define GPIO_INTRISEEN_PIN22_Msk (0x01 << GPIO_INTRISEEN_PIN22_Pos) -#define GPIO_INTRISEEN_PIN23_Pos 23 -#define GPIO_INTRISEEN_PIN23_Msk (0x01 << GPIO_INTRISEEN_PIN23_Pos) - -#define GPIO_INTEN_PIN0_Pos 0 -#define GPIO_INTEN_PIN0_Msk (0x01 << GPIO_INTEN_PIN0_Pos) -#define GPIO_INTEN_PIN1_Pos 1 -#define GPIO_INTEN_PIN1_Msk (0x01 << GPIO_INTEN_PIN1_Pos) -#define GPIO_INTEN_PIN2_Pos 2 -#define GPIO_INTEN_PIN2_Msk (0x01 << GPIO_INTEN_PIN2_Pos) -#define GPIO_INTEN_PIN3_Pos 3 -#define GPIO_INTEN_PIN3_Msk (0x01 << GPIO_INTEN_PIN3_Pos) -#define GPIO_INTEN_PIN4_Pos 4 -#define GPIO_INTEN_PIN4_Msk (0x01 << GPIO_INTEN_PIN4_Pos) -#define GPIO_INTEN_PIN5_Pos 5 -#define GPIO_INTEN_PIN5_Msk (0x01 << GPIO_INTEN_PIN5_Pos) -#define GPIO_INTEN_PIN6_Pos 6 -#define GPIO_INTEN_PIN6_Msk (0x01 << GPIO_INTEN_PIN6_Pos) -#define GPIO_INTEN_PIN7_Pos 7 -#define GPIO_INTEN_PIN7_Msk (0x01 << GPIO_INTEN_PIN7_Pos) -#define GPIO_INTEN_PIN8_Pos 8 -#define GPIO_INTEN_PIN8_Msk (0x01 << GPIO_INTEN_PIN8_Pos) -#define GPIO_INTEN_PIN9_Pos 9 -#define GPIO_INTEN_PIN9_Msk (0x01 << GPIO_INTEN_PIN9_Pos) -#define GPIO_INTEN_PIN10_Pos 10 -#define GPIO_INTEN_PIN10_Msk (0x01 << GPIO_INTEN_PIN10_Pos) -#define GPIO_INTEN_PIN11_Pos 11 -#define GPIO_INTEN_PIN11_Msk (0x01 << GPIO_INTEN_PIN11_Pos) -#define GPIO_INTEN_PIN12_Pos 12 -#define GPIO_INTEN_PIN12_Msk (0x01 << GPIO_INTEN_PIN12_Pos) -#define GPIO_INTEN_PIN13_Pos 13 -#define GPIO_INTEN_PIN13_Msk (0x01 << GPIO_INTEN_PIN13_Pos) -#define GPIO_INTEN_PIN14_Pos 14 -#define GPIO_INTEN_PIN14_Msk (0x01 << GPIO_INTEN_PIN14_Pos) -#define GPIO_INTEN_PIN15_Pos 15 -#define GPIO_INTEN_PIN15_Msk (0x01 << GPIO_INTEN_PIN15_Pos) -#define GPIO_INTEN_PIN16_Pos 16 -#define GPIO_INTEN_PIN16_Msk (0x01 << GPIO_INTEN_PIN16_Pos) -#define GPIO_INTEN_PIN17_Pos 17 -#define GPIO_INTEN_PIN17_Msk (0x01 << GPIO_INTEN_PIN17_Pos) -#define GPIO_INTEN_PIN18_Pos 18 -#define GPIO_INTEN_PIN18_Msk (0x01 << GPIO_INTEN_PIN18_Pos) -#define GPIO_INTEN_PIN19_Pos 19 -#define GPIO_INTEN_PIN19_Msk (0x01 << GPIO_INTEN_PIN19_Pos) -#define GPIO_INTEN_PIN20_Pos 20 -#define GPIO_INTEN_PIN20_Msk (0x01 << GPIO_INTEN_PIN20_Pos) -#define GPIO_INTEN_PIN21_Pos 21 -#define GPIO_INTEN_PIN21_Msk (0x01 << GPIO_INTEN_PIN21_Pos) -#define GPIO_INTEN_PIN22_Pos 22 -#define GPIO_INTEN_PIN22_Msk (0x01 << GPIO_INTEN_PIN22_Pos) -#define GPIO_INTEN_PIN23_Pos 23 -#define GPIO_INTEN_PIN23_Msk (0x01 << GPIO_INTEN_PIN23_Pos) - -#define GPIO_INTRAWSTAT_PIN0_Pos 0 -#define GPIO_INTRAWSTAT_PIN0_Msk (0x01 << GPIO_INTRAWSTAT_PIN0_Pos) -#define GPIO_INTRAWSTAT_PIN1_Pos 1 -#define GPIO_INTRAWSTAT_PIN1_Msk (0x01 << GPIO_INTRAWSTAT_PIN1_Pos) -#define GPIO_INTRAWSTAT_PIN2_Pos 2 -#define GPIO_INTRAWSTAT_PIN2_Msk (0x01 << GPIO_INTRAWSTAT_PIN2_Pos) -#define GPIO_INTRAWSTAT_PIN3_Pos 3 -#define GPIO_INTRAWSTAT_PIN3_Msk (0x01 << GPIO_INTRAWSTAT_PIN3_Pos) -#define GPIO_INTRAWSTAT_PIN4_Pos 4 -#define GPIO_INTRAWSTAT_PIN4_Msk (0x01 << GPIO_INTRAWSTAT_PIN4_Pos) -#define GPIO_INTRAWSTAT_PIN5_Pos 5 -#define GPIO_INTRAWSTAT_PIN5_Msk (0x01 << GPIO_INTRAWSTAT_PIN5_Pos) -#define GPIO_INTRAWSTAT_PIN6_Pos 6 -#define GPIO_INTRAWSTAT_PIN6_Msk (0x01 << GPIO_INTRAWSTAT_PIN6_Pos) -#define GPIO_INTRAWSTAT_PIN7_Pos 7 -#define GPIO_INTRAWSTAT_PIN7_Msk (0x01 << GPIO_INTRAWSTAT_PIN7_Pos) -#define GPIO_INTRAWSTAT_PIN8_Pos 8 -#define GPIO_INTRAWSTAT_PIN8_Msk (0x01 << GPIO_INTRAWSTAT_PIN8_Pos) -#define GPIO_INTRAWSTAT_PIN9_Pos 9 -#define GPIO_INTRAWSTAT_PIN9_Msk (0x01 << GPIO_INTRAWSTAT_PIN9_Pos) -#define GPIO_INTRAWSTAT_PIN10_Pos 10 -#define GPIO_INTRAWSTAT_PIN10_Msk (0x01 << GPIO_INTRAWSTAT_PIN10_Pos) -#define GPIO_INTRAWSTAT_PIN11_Pos 11 -#define GPIO_INTRAWSTAT_PIN11_Msk (0x01 << GPIO_INTRAWSTAT_PIN11_Pos) -#define GPIO_INTRAWSTAT_PIN12_Pos 12 -#define GPIO_INTRAWSTAT_PIN12_Msk (0x01 << GPIO_INTRAWSTAT_PIN12_Pos) -#define GPIO_INTRAWSTAT_PIN13_Pos 13 -#define GPIO_INTRAWSTAT_PIN13_Msk (0x01 << GPIO_INTRAWSTAT_PIN13_Pos) -#define GPIO_INTRAWSTAT_PIN14_Pos 14 -#define GPIO_INTRAWSTAT_PIN14_Msk (0x01 << GPIO_INTRAWSTAT_PIN14_Pos) -#define GPIO_INTRAWSTAT_PIN15_Pos 15 -#define GPIO_INTRAWSTAT_PIN15_Msk (0x01 << GPIO_INTRAWSTAT_PIN15_Pos) -#define GPIO_INTRAWSTAT_PIN16_Pos 16 -#define GPIO_INTRAWSTAT_PIN16_Msk (0x01 << GPIO_INTRAWSTAT_PIN16_Pos) -#define GPIO_INTRAWSTAT_PIN17_Pos 17 -#define GPIO_INTRAWSTAT_PIN17_Msk (0x01 << GPIO_INTRAWSTAT_PIN17_Pos) -#define GPIO_INTRAWSTAT_PIN18_Pos 18 -#define GPIO_INTRAWSTAT_PIN18_Msk (0x01 << GPIO_INTRAWSTAT_PIN18_Pos) -#define GPIO_INTRAWSTAT_PIN19_Pos 19 -#define GPIO_INTRAWSTAT_PIN19_Msk (0x01 << GPIO_INTRAWSTAT_PIN19_Pos) -#define GPIO_INTRAWSTAT_PIN20_Pos 20 -#define GPIO_INTRAWSTAT_PIN20_Msk (0x01 << GPIO_INTRAWSTAT_PIN20_Pos) -#define GPIO_INTRAWSTAT_PIN21_Pos 21 -#define GPIO_INTRAWSTAT_PIN21_Msk (0x01 << GPIO_INTRAWSTAT_PIN21_Pos) -#define GPIO_INTRAWSTAT_PIN22_Pos 22 -#define GPIO_INTRAWSTAT_PIN22_Msk (0x01 << GPIO_INTRAWSTAT_PIN22_Pos) -#define GPIO_INTRAWSTAT_PIN23_Pos 23 -#define GPIO_INTRAWSTAT_PIN23_Msk (0x01 << GPIO_INTRAWSTAT_PIN23_Pos) - -#define GPIO_INTSTAT_PIN0_Pos 0 -#define GPIO_INTSTAT_PIN0_Msk (0x01 << GPIO_INTSTAT_PIN0_Pos) -#define GPIO_INTSTAT_PIN1_Pos 1 -#define GPIO_INTSTAT_PIN1_Msk (0x01 << GPIO_INTSTAT_PIN1_Pos) -#define GPIO_INTSTAT_PIN2_Pos 2 -#define GPIO_INTSTAT_PIN2_Msk (0x01 << GPIO_INTSTAT_PIN2_Pos) -#define GPIO_INTSTAT_PIN3_Pos 3 -#define GPIO_INTSTAT_PIN3_Msk (0x01 << GPIO_INTSTAT_PIN3_Pos) -#define GPIO_INTSTAT_PIN4_Pos 4 -#define GPIO_INTSTAT_PIN4_Msk (0x01 << GPIO_INTSTAT_PIN4_Pos) -#define GPIO_INTSTAT_PIN5_Pos 5 -#define GPIO_INTSTAT_PIN5_Msk (0x01 << GPIO_INTSTAT_PIN5_Pos) -#define GPIO_INTSTAT_PIN6_Pos 6 -#define GPIO_INTSTAT_PIN6_Msk (0x01 << GPIO_INTSTAT_PIN6_Pos) -#define GPIO_INTSTAT_PIN7_Pos 7 -#define GPIO_INTSTAT_PIN7_Msk (0x01 << GPIO_INTSTAT_PIN7_Pos) -#define GPIO_INTSTAT_PIN8_Pos 8 -#define GPIO_INTSTAT_PIN8_Msk (0x01 << GPIO_INTSTAT_PIN8_Pos) -#define GPIO_INTSTAT_PIN9_Pos 9 -#define GPIO_INTSTAT_PIN9_Msk (0x01 << GPIO_INTSTAT_PIN9_Pos) -#define GPIO_INTSTAT_PIN10_Pos 10 -#define GPIO_INTSTAT_PIN10_Msk (0x01 << GPIO_INTSTAT_PIN10_Pos) -#define GPIO_INTSTAT_PIN11_Pos 11 -#define GPIO_INTSTAT_PIN11_Msk (0x01 << GPIO_INTSTAT_PIN11_Pos) -#define GPIO_INTSTAT_PIN12_Pos 12 -#define GPIO_INTSTAT_PIN12_Msk (0x01 << GPIO_INTSTAT_PIN12_Pos) -#define GPIO_INTSTAT_PIN13_Pos 13 -#define GPIO_INTSTAT_PIN13_Msk (0x01 << GPIO_INTSTAT_PIN13_Pos) -#define GPIO_INTSTAT_PIN14_Pos 14 -#define GPIO_INTSTAT_PIN14_Msk (0x01 << GPIO_INTSTAT_PIN14_Pos) -#define GPIO_INTSTAT_PIN15_Pos 15 -#define GPIO_INTSTAT_PIN15_Msk (0x01 << GPIO_INTSTAT_PIN15_Pos) -#define GPIO_INTSTAT_PIN16_Pos 16 -#define GPIO_INTSTAT_PIN16_Msk (0x01 << GPIO_INTSTAT_PIN16_Pos) -#define GPIO_INTSTAT_PIN17_Pos 17 -#define GPIO_INTSTAT_PIN17_Msk (0x01 << GPIO_INTSTAT_PIN17_Pos) -#define GPIO_INTSTAT_PIN18_Pos 18 -#define GPIO_INTSTAT_PIN18_Msk (0x01 << GPIO_INTSTAT_PIN18_Pos) -#define GPIO_INTSTAT_PIN19_Pos 19 -#define GPIO_INTSTAT_PIN19_Msk (0x01 << GPIO_INTSTAT_PIN19_Pos) -#define GPIO_INTSTAT_PIN20_Pos 20 -#define GPIO_INTSTAT_PIN20_Msk (0x01 << GPIO_INTSTAT_PIN20_Pos) -#define GPIO_INTSTAT_PIN21_Pos 21 -#define GPIO_INTSTAT_PIN21_Msk (0x01 << GPIO_INTSTAT_PIN21_Pos) -#define GPIO_INTSTAT_PIN22_Pos 22 -#define GPIO_INTSTAT_PIN22_Msk (0x01 << GPIO_INTSTAT_PIN22_Pos) -#define GPIO_INTSTAT_PIN23_Pos 23 -#define GPIO_INTSTAT_PIN23_Msk (0x01 << GPIO_INTSTAT_PIN23_Pos) - -#define GPIO_INTCLR_PIN0_Pos 0 -#define GPIO_INTCLR_PIN0_Msk (0x01 << GPIO_INTCLR_PIN0_Pos) -#define GPIO_INTCLR_PIN1_Pos 1 -#define GPIO_INTCLR_PIN1_Msk (0x01 << GPIO_INTCLR_PIN1_Pos) -#define GPIO_INTCLR_PIN2_Pos 2 -#define GPIO_INTCLR_PIN2_Msk (0x01 << GPIO_INTCLR_PIN2_Pos) -#define GPIO_INTCLR_PIN3_Pos 3 -#define GPIO_INTCLR_PIN3_Msk (0x01 << GPIO_INTCLR_PIN3_Pos) -#define GPIO_INTCLR_PIN4_Pos 4 -#define GPIO_INTCLR_PIN4_Msk (0x01 << GPIO_INTCLR_PIN4_Pos) -#define GPIO_INTCLR_PIN5_Pos 5 -#define GPIO_INTCLR_PIN5_Msk (0x01 << GPIO_INTCLR_PIN5_Pos) -#define GPIO_INTCLR_PIN6_Pos 6 -#define GPIO_INTCLR_PIN6_Msk (0x01 << GPIO_INTCLR_PIN6_Pos) -#define GPIO_INTCLR_PIN7_Pos 7 -#define GPIO_INTCLR_PIN7_Msk (0x01 << GPIO_INTCLR_PIN7_Pos) -#define GPIO_INTCLR_PIN8_Pos 8 -#define GPIO_INTCLR_PIN8_Msk (0x01 << GPIO_INTCLR_PIN8_Pos) -#define GPIO_INTCLR_PIN9_Pos 9 -#define GPIO_INTCLR_PIN9_Msk (0x01 << GPIO_INTCLR_PIN9_Pos) -#define GPIO_INTCLR_PIN10_Pos 10 -#define GPIO_INTCLR_PIN10_Msk (0x01 << GPIO_INTCLR_PIN10_Pos) -#define GPIO_INTCLR_PIN11_Pos 11 -#define GPIO_INTCLR_PIN11_Msk (0x01 << GPIO_INTCLR_PIN11_Pos) -#define GPIO_INTCLR_PIN12_Pos 12 -#define GPIO_INTCLR_PIN12_Msk (0x01 << GPIO_INTCLR_PIN12_Pos) -#define GPIO_INTCLR_PIN13_Pos 13 -#define GPIO_INTCLR_PIN13_Msk (0x01 << GPIO_INTCLR_PIN13_Pos) -#define GPIO_INTCLR_PIN14_Pos 14 -#define GPIO_INTCLR_PIN14_Msk (0x01 << GPIO_INTCLR_PIN14_Pos) -#define GPIO_INTCLR_PIN15_Pos 15 -#define GPIO_INTCLR_PIN15_Msk (0x01 << GPIO_INTCLR_PIN15_Pos) -#define GPIO_INTCLR_PIN16_Pos 16 -#define GPIO_INTCLR_PIN16_Msk (0x01 << GPIO_INTCLR_PIN16_Pos) -#define GPIO_INTCLR_PIN17_Pos 17 -#define GPIO_INTCLR_PIN17_Msk (0x01 << GPIO_INTCLR_PIN17_Pos) -#define GPIO_INTCLR_PIN18_Pos 18 -#define GPIO_INTCLR_PIN18_Msk (0x01 << GPIO_INTCLR_PIN18_Pos) -#define GPIO_INTCLR_PIN19_Pos 19 -#define GPIO_INTCLR_PIN19_Msk (0x01 << GPIO_INTCLR_PIN19_Pos) -#define GPIO_INTCLR_PIN20_Pos 20 -#define GPIO_INTCLR_PIN20_Msk (0x01 << GPIO_INTCLR_PIN20_Pos) -#define GPIO_INTCLR_PIN21_Pos 21 -#define GPIO_INTCLR_PIN21_Msk (0x01 << GPIO_INTCLR_PIN21_Pos) -#define GPIO_INTCLR_PIN22_Pos 22 -#define GPIO_INTCLR_PIN22_Msk (0x01 << GPIO_INTCLR_PIN22_Pos) -#define GPIO_INTCLR_PIN23_Pos 23 -#define GPIO_INTCLR_PIN23_Msk (0x01 << GPIO_INTCLR_PIN23_Pos) - - - - -typedef struct { - __IO uint32_t LDVAL; //定时器加载值,使能å�Žå®šæ—¶å™¨ä»Žæ­¤æ•°å€¼å¼€å§‹å�‘下递å‡�计数 - - __I uint32_t CVAL; //定时器当å‰�值,LDVAL-CVAL å�¯è®¡ç®—出计时时长 - - __IO uint32_t CTRL; + __IO uint32_t CTRL; } TIMR_TypeDef; +#define TIMR_CTRL_EN_Pos 0 //æ­¤ä½�赋1导致TIMR从LDVAL开始å�‘下递å‡�计数 +#define TIMR_CTRL_EN_Msk (0x01 << TIMR_CTRL_EN_Pos) +#define TIMR_CTRL_CLKSRC_Pos 1 //æ—¶é’Ÿæº�:0 内部系统时钟 1 外部引脚脉冲计数 +#define TIMR_CTRL_CLKSRC_Msk (0x01 << TIMR_CTRL_CLKSRC_Pos) +#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRx的计数时钟为TIMRx-1的溢出信å�· +#define TIMR_CTRL_CASCADE_Msk (0x01 << TIMR_CTRL_CASCADE_Pos) + +typedef struct +{ + __IO uint32_t PCTRL; //Pulse Control,脉宽测é‡�模å�—控制寄存器 + + __I uint32_t PCVAL; //脉宽测é‡�定时器当å‰�值 + + uint32_t RESERVED[2]; -#define TIMR_CTRL_EN_Pos 0 //æ­¤ä½�赋1导致TIMR从LDVAL开始å�‘下递å‡�计数 -#define TIMR_CTRL_EN_Msk (0x01 << TIMR_CTRL_EN_Pos) -#define TIMR_CTRL_CLKSRC_Pos 1 //æ—¶é’Ÿæº�:0 内部系统时钟 1 外部引脚脉冲计数 -#define TIMR_CTRL_CLKSRC_Msk (0x01 << TIMR_CTRL_CLKSRC_Pos) -#define TIMR_CTRL_CASCADE_Pos 2 //1 TIMRx的计数时钟为TIMRx-1的溢出信å�· -#define TIMR_CTRL_CASCADE_Msk (0x01 << TIMR_CTRL_CASCADE_Pos) + __IO uint32_t IE; + __IO uint32_t IF; -typedef struct { - __IO uint32_t PCTRL; //Pulse Control,脉宽测é‡�模å�—控制寄存器 + __IO uint32_t HALT; +} TIMRG_TypeDef; - __I uint32_t PCVAL; //脉宽测é‡�定时器当å‰�值 +#define TIMRG_PCTRL_EN_Pos 0 //开始测é‡�脉宽,脉宽内32ä½�计数器从0开始å�‘上计数 +#define TIMRG_PCTRL_EN_Msk (0x01 << TIMRG_PCTRL_EN_Pos) +#define TIMRG_PCTRL_HIGH_Pos 1 //0 测é‡�低电平长度 1 测é‡�高电平长度 +#define TIMRG_PCTRL_HIGH_Msk (0x01 << TIMRG_PCTRL_HIGH_Pos) +#define TIMRG_PCTRL_CLKSRC_Pos 2 //æ—¶é’Ÿæº�:0 内部系统时钟 1 脉宽测é‡�模å�—å�˜æˆ�一个计数器,ä¸�å†�具有脉宽测é‡�功能 +#define TIMRG_PCTRL_CLKSRC_Msk (0x01 << TIMRG_PCTRL_CLKSRC_Pos) + +#define TIMRG_IE_TIMR0_Pos 0 +#define TIMRG_IE_TIMR0_Msk (0x01 << TIMRG_IE_TIMR0_Pos) +#define TIMRG_IE_TIMR1_Pos 1 +#define TIMRG_IE_TIMR1_Msk (0x01 << TIMRG_IE_TIMR1_Pos) +#define TIMRG_IE_TIMR2_Pos 2 +#define TIMRG_IE_TIMR2_Msk (0x01 << TIMRG_IE_TIMR2_Pos) +#define TIMRG_IE_TIMR3_Pos 3 +#define TIMRG_IE_TIMR3_Msk (0x01 << TIMRG_IE_TIMR3_Pos) +#define TIMRG_IE_TIMR4_Pos 4 +#define TIMRG_IE_TIMR4_Msk (0x01 << TIMRG_IE_TIMR4_Pos) +#define TIMRG_IE_TIMR5_Pos 5 +#define TIMRG_IE_TIMR5_Msk (0x01 << TIMRG_IE_TIMR5_Pos) +#define TIMRG_IE_PULSE_Pos 16 +#define TIMRG_IE_PULSE_Msk (0x01 << TIMRG_IE_PULSE_Pos) + +#define TIMRG_IF_TIMR0_Pos 0 //写1清零 +#define TIMRG_IF_TIMR0_Msk (0x01 << TIMRG_IF_TIMR0_Pos) +#define TIMRG_IF_TIMR1_Pos 1 +#define TIMRG_IF_TIMR1_Msk (0x01 << TIMRG_IF_TIMR1_Pos) +#define TIMRG_IF_TIMR2_Pos 2 +#define TIMRG_IF_TIMR2_Msk (0x01 << TIMRG_IF_TIMR2_Pos) +#define TIMRG_IF_TIMR3_Pos 3 +#define TIMRG_IF_TIMR3_Msk (0x01 << TIMRG_IF_TIMR3_Pos) +#define TIMRG_IF_TIMR4_Pos 4 +#define TIMRG_IF_TIMR4_Msk (0x01 << TIMRG_IF_TIMR4_Pos) +#define TIMRG_IF_TIMR5_Pos 5 +#define TIMRG_IF_TIMR5_Msk (0x01 << TIMRG_IF_TIMR5_Pos) +#define TIMRG_IF_PULSE_Pos 16 +#define TIMRG_IF_PULSE_Msk (0x01 << TIMRG_IF_PULSE_Pos) + +#define TIMRG_HALT_TIMR0_Pos 0 //1 æš‚å�œè®¡æ•° +#define TIMRG_HALT_TIMR0_Msk (0x01 << TIMRG_HALT_TIMR0_Pos) +#define TIMRG_HALT_TIMR1_Pos 1 +#define TIMRG_HALT_TIMR1_Msk (0x01 << TIMRG_HALT_TIMR1_Pos) +#define TIMRG_HALT_TIMR2_Pos 2 +#define TIMRG_HALT_TIMR2_Msk (0x01 << TIMRG_HALT_TIMR2_Pos) +#define TIMRG_HALT_TIMR3_Pos 3 +#define TIMRG_HALT_TIMR3_Msk (0x01 << TIMRG_HALT_TIMR3_Pos) +#define TIMRG_HALT_TIMR4_Pos 4 +#define TIMRG_HALT_TIMR4_Msk (0x01 << TIMRG_HALT_TIMR4_Pos) +#define TIMRG_HALT_TIMR5_Pos 5 +#define TIMRG_HALT_TIMR5_Msk (0x01 << TIMRG_HALT_TIMR5_Pos) + +typedef struct +{ + __IO uint32_t DATA; - uint32_t RESERVED[2]; + __IO uint32_t CTRL; - __IO uint32_t IE; + __IO uint32_t BAUD; - __IO uint32_t IF; + __IO uint32_t FIFO; - __IO uint32_t HALT; -} TIMRG_TypeDef; + __IO uint32_t LINCR; + union + { + __IO uint32_t CTSCR; -#define TIMRG_PCTRL_EN_Pos 0 //开始测é‡�脉宽,脉宽内32ä½�计数器从0开始å�‘上计数 -#define TIMRG_PCTRL_EN_Msk (0x01 << TIMRG_PCTRL_EN_Pos) -#define TIMRG_PCTRL_HIGH_Pos 1 //0 测é‡�低电平长度 1 测é‡�高电平长度 -#define TIMRG_PCTRL_HIGH_Msk (0x01 << TIMRG_PCTRL_HIGH_Pos) -#define TIMRG_PCTRL_CLKSRC_Pos 2 //æ—¶é’Ÿæº�:0 内部系统时钟 1 脉宽测é‡�模å�—å�˜æˆ�一个计数器,ä¸�å†�具有脉宽测é‡�功能 -#define TIMRG_PCTRL_CLKSRC_Msk (0x01 << TIMRG_PCTRL_CLKSRC_Pos) - -#define TIMRG_IE_TIMR0_Pos 0 -#define TIMRG_IE_TIMR0_Msk (0x01 << TIMRG_IE_TIMR0_Pos) -#define TIMRG_IE_TIMR1_Pos 1 -#define TIMRG_IE_TIMR1_Msk (0x01 << TIMRG_IE_TIMR1_Pos) -#define TIMRG_IE_TIMR2_Pos 2 -#define TIMRG_IE_TIMR2_Msk (0x01 << TIMRG_IE_TIMR2_Pos) -#define TIMRG_IE_TIMR3_Pos 3 -#define TIMRG_IE_TIMR3_Msk (0x01 << TIMRG_IE_TIMR3_Pos) -#define TIMRG_IE_TIMR4_Pos 4 -#define TIMRG_IE_TIMR4_Msk (0x01 << TIMRG_IE_TIMR4_Pos) -#define TIMRG_IE_TIMR5_Pos 5 -#define TIMRG_IE_TIMR5_Msk (0x01 << TIMRG_IE_TIMR5_Pos) -#define TIMRG_IE_PULSE_Pos 16 -#define TIMRG_IE_PULSE_Msk (0x01 << TIMRG_IE_PULSE_Pos) - -#define TIMRG_IF_TIMR0_Pos 0 //写1清零 -#define TIMRG_IF_TIMR0_Msk (0x01 << TIMRG_IF_TIMR0_Pos) -#define TIMRG_IF_TIMR1_Pos 1 -#define TIMRG_IF_TIMR1_Msk (0x01 << TIMRG_IF_TIMR1_Pos) -#define TIMRG_IF_TIMR2_Pos 2 -#define TIMRG_IF_TIMR2_Msk (0x01 << TIMRG_IF_TIMR2_Pos) -#define TIMRG_IF_TIMR3_Pos 3 -#define TIMRG_IF_TIMR3_Msk (0x01 << TIMRG_IF_TIMR3_Pos) -#define TIMRG_IF_TIMR4_Pos 4 -#define TIMRG_IF_TIMR4_Msk (0x01 << TIMRG_IF_TIMR4_Pos) -#define TIMRG_IF_TIMR5_Pos 5 -#define TIMRG_IF_TIMR5_Msk (0x01 << TIMRG_IF_TIMR5_Pos) -#define TIMRG_IF_PULSE_Pos 16 -#define TIMRG_IF_PULSE_Msk (0x01 << TIMRG_IF_PULSE_Pos) - -#define TIMRG_HALT_TIMR0_Pos 0 //1 æš‚å�œè®¡æ•° -#define TIMRG_HALT_TIMR0_Msk (0x01 << TIMRG_HALT_TIMR0_Pos) -#define TIMRG_HALT_TIMR1_Pos 1 -#define TIMRG_HALT_TIMR1_Msk (0x01 << TIMRG_HALT_TIMR1_Pos) -#define TIMRG_HALT_TIMR2_Pos 2 -#define TIMRG_HALT_TIMR2_Msk (0x01 << TIMRG_HALT_TIMR2_Pos) -#define TIMRG_HALT_TIMR3_Pos 3 -#define TIMRG_HALT_TIMR3_Msk (0x01 << TIMRG_HALT_TIMR3_Pos) -#define TIMRG_HALT_TIMR4_Pos 4 -#define TIMRG_HALT_TIMR4_Msk (0x01 << TIMRG_HALT_TIMR4_Pos) -#define TIMRG_HALT_TIMR5_Pos 5 -#define TIMRG_HALT_TIMR5_Msk (0x01 << TIMRG_HALT_TIMR5_Pos) - - - - -typedef struct { - __IO uint32_t DATA; - - __IO uint32_t CTRL; - - __IO uint32_t BAUD; - - __IO uint32_t FIFO; - - __IO uint32_t LINCR; - - union { - __IO uint32_t CTSCR; - - __IO uint32_t RTSCR; - }; + __IO uint32_t RTSCR; + }; } UART_TypeDef; +#define UART_DATA_DATA_Pos 0 +#define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos) +#define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数æ�®æ—¶ï¼Œè¯¥ä½�硬件置1,读å�–æ•°æ�®å�Žè‡ªåŠ¨æ¸…é›¶ +#define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos) +#define UART_DATA_PAERR_Pos 10 //Parity Error +#define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos) + +#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在å�‘é€�æ•°æ�® 1 空闲状æ€�,没有数æ�®å�‘é€� +#define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos) +#define UART_CTRL_TXFF_Pos 1 //TX FIFO Full +#define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos) +#define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数æ�®å°‘于设定个数时产生中断 +#define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos) +#define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty +#define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos) +#define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°æ—¶äº§ç”Ÿä¸­æ–­ +#define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos) +#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零 +#define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos) +#define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 +#define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos) +#define UART_CTRL_EN_Pos 9 +#define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos) +#define UART_CTRL_LOOP_Pos 10 +#define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos) +#define UART_CTRL_BAUDEN_Pos 13 //必须写1 +#define UART_CTRL_BAUDEN_Msk (0x01 << UART_CTRL_BAUDEN_Pos) +#define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符å�Žï¼Œè¶…过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�® +#define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos) +#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect,检测到LIN Break,å�³RX线上检测到连续11ä½�低电平 +#define UART_CTRL_BRKDET_Msk (0x01 << UART_CTRL_BRKDET_Pos) +#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect 中断使能 +#define UART_CTRL_BRKIE_Msk (0x01 << UART_CTRL_BRKIE_Pos) +#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break,å�‘é€�LIN Break +#define UART_CTRL_GENBRK_Msk (0x01 << UART_CTRL_GENBRK_Pos) +#define UART_CTRL_DATA9b_Pos 18 //1 9ä½�æ•°æ�®ä½� 0 8ä½�æ•°æ�®ä½� +#define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos) +#define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 å�¶æ ¡éªŒ 101 固定为1 111 固定为0 +#define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos) +#define UART_CTRL_STOP2b_Pos 22 //1 2ä½�å�œæ­¢ä½� 0 1ä½�å�œæ­¢ä½� +#define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos) +#define UART_CTRL_TOTIME_Pos 24 //TimeOut æ—¶é•¿ = TOTIME/(BAUDRAUD/10) ç§’ +#define UART_CTRL_TOTIME_Msk (0xFFu << UART_CTRL_TOTIME_Pos) + +#define UART_BAUD_BAUD_Pos 0 //串å�£æ³¢ç‰¹çއ = SYS_Freq/16/BAUD - 1 +#define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos) +#define UART_BAUD_TXD_Pos 14 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£TXD引脚上的电平 +#define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos) +#define UART_BAUD_RXD_Pos 15 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£RXD引脚上的电平 +#define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos) +#define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF +#define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos) +#define UART_BAUD_TXIF_Pos 17 //å�‘é€�中断标志 = TXTHRF & TXIE +#define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos) +#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect 中断标志,检测到LIN Breakæ—¶è‹¥BRKIE=1,此ä½�由硬件置ä½� +#define UART_BAUD_BRKIF_Msk (0x01 << UART_BAUD_BRKIF_Pos) +#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°ï¼ˆRXLVL >= RXTHR)时硬件置1 +#define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos) +#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数æ�®å°‘于设定个数(TXLVL <= TXTHR)时硬件置1 +#define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos) +#define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�®æ—¶è‹¥TOIE=1,此ä½�由硬件置ä½� +#define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos) +#define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE +#define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos) +#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1å�¯åŠ¨è‡ªåŠ¨æ³¢ç‰¹çŽ‡æ ¡å‡†ï¼Œå®Œæˆ�å�Žè‡ªåŠ¨æ¸…é›¶ +#define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos) +#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测ä½�长,0 1ä½�,通过测起始ä½� 脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFF \ + // 1 2ä½�,通过测起始ä½�加1ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFE \ + // 1 4ä½�,通过测起始ä½�加3ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xF8 \ + // 1 8ä½�,通过测起始ä½�加7ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0x80 +#define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos) +#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准æˆ�功 1 自动波特率校准失败 +#define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos) +#define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 +#define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos) + +#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数 +#define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos) +#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数 +#define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos) +#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触å�‘é—¨é™�,中断使能时 RXLVL >= RXTHR 触å�‘RX中断 +#define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos) +#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触å�‘é—¨é™�,中断使能时 TXLVL <= TXTHR 触å�‘TX中断 +#define UART_FIFO_TXTHR_Msk (0xFFu << UART_FIFO_TXTHR_Pos) + +#define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能 +#define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos) +#define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状æ€� +#define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos) +#define UART_LINCR_GENBRKIE_Pos 2 //å�‘é€�LIN Break完æˆ�中断使能 +#define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos) +#define UART_LINCR_GENBRKIF_Pos 3 //å�‘é€�LIN Break完æˆ�中断状æ€� +#define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos) +#define UART_LINCR_GENBRK_Pos 4 //å�‘é€�LIN Break,å�‘é€�完æˆ�自动清零 +#define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos) + +#define UART_CTSCR_EN_Pos 0 //CTSæµ�控使能 +#define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos) +#define UART_CTSCR_POL_Pos 2 //CTSä¿¡å�·æž�性,0 低有效,CTS输入为低表示å�¯ä»¥å�‘é€�æ•°æ�® +#define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos) +#define UART_CTSCR_STAT_Pos 7 //CTSä¿¡å�·çš„当å‰�状æ€� +#define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos) + +#define UART_RTSCR_EN_Pos 1 //RTSæµ�控使能 +#define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos) +#define UART_RTSCR_POL_Pos 3 //RTSä¿¡å�·æž�性 0 低有效,RTS输入为低表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® +#define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos) +#define UART_RTSCR_THR_Pos 4 //RTSæµ�控的触å�‘阈值 0 1字节 1 2字节 2 4字节 3 6字节 +#define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos) +#define UART_RTSCR_STAT_Pos 8 //RTSä¿¡å�·çš„当å‰�状æ€� +#define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos) + +typedef struct +{ + __IO uint32_t CTRL; + + __IO uint32_t DATA; + + __IO uint32_t STAT; + + __IO uint32_t IE; -#define UART_DATA_DATA_Pos 0 -#define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos) -#define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数æ�®æ—¶ï¼Œè¯¥ä½�硬件置1,读å�–æ•°æ�®å�Žè‡ªåŠ¨æ¸…é›¶ -#define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos) -#define UART_DATA_PAERR_Pos 10 //Parity Error -#define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos) - -#define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在å�‘é€�æ•°æ�® 1 空闲状æ€�,没有数æ�®å�‘é€� -#define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos) -#define UART_CTRL_TXFF_Pos 1 //TX FIFO Full -#define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos) -#define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数æ�®å°‘于设定个数时产生中断 -#define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos) -#define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty -#define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos) -#define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°æ—¶äº§ç”Ÿä¸­æ–­ -#define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos) -#define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零 -#define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos) -#define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 -#define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos) -#define UART_CTRL_EN_Pos 9 -#define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos) -#define UART_CTRL_LOOP_Pos 10 -#define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos) -#define UART_CTRL_BAUDEN_Pos 13 //必须写1 -#define UART_CTRL_BAUDEN_Msk (0x01 << UART_CTRL_BAUDEN_Pos) -#define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符å�Žï¼Œè¶…过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�® -#define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos) -#define UART_CTRL_BRKDET_Pos 15 //LIN Break Detect,检测到LIN Break,å�³RX线上检测到连续11ä½�低电平 -#define UART_CTRL_BRKDET_Msk (0x01 << UART_CTRL_BRKDET_Pos) -#define UART_CTRL_BRKIE_Pos 16 //LIN Break Detect 中断使能 -#define UART_CTRL_BRKIE_Msk (0x01 << UART_CTRL_BRKIE_Pos) -#define UART_CTRL_GENBRK_Pos 17 //Generate LIN Break,å�‘é€�LIN Break -#define UART_CTRL_GENBRK_Msk (0x01 << UART_CTRL_GENBRK_Pos) -#define UART_CTRL_DATA9b_Pos 18 //1 9ä½�æ•°æ�®ä½� 0 8ä½�æ•°æ�®ä½� -#define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos) -#define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 å�¶æ ¡éªŒ 101 固定为1 111 固定为0 -#define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos) -#define UART_CTRL_STOP2b_Pos 22 //1 2ä½�å�œæ­¢ä½� 0 1ä½�å�œæ­¢ä½� -#define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos) -#define UART_CTRL_TOTIME_Pos 24 //TimeOut æ—¶é•¿ = TOTIME/(BAUDRAUD/10) ç§’ -#define UART_CTRL_TOTIME_Msk (0xFFu<< UART_CTRL_TOTIME_Pos) - -#define UART_BAUD_BAUD_Pos 0 //串å�£æ³¢ç‰¹çއ = SYS_Freq/16/BAUD - 1 -#define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos) -#define UART_BAUD_TXD_Pos 14 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£TXD引脚上的电平 -#define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos) -#define UART_BAUD_RXD_Pos 15 //通过此ä½�å�¯ç›´æŽ¥è¯»å�–串å�£RXD引脚上的电平 -#define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos) -#define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF -#define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos) -#define UART_BAUD_TXIF_Pos 17 //å�‘é€�中断标志 = TXTHRF & TXIE -#define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos) -#define UART_BAUD_BRKIF_Pos 18 //LIN Break Detect 中断标志,检测到LIN Breakæ—¶è‹¥BRKIE=1,此ä½�由硬件置ä½� -#define UART_BAUD_BRKIF_Msk (0x01 << UART_BAUD_BRKIF_Pos) -#define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数æ�®è¾¾åˆ°è®¾å®šä¸ªæ•°ï¼ˆRXLVL >= RXTHR)时硬件置1 -#define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos) -#define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数æ�®å°‘于设定个数(TXLVL <= TXTHR)时硬件置1 -#define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos) -#define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数æ�®æ—¶è‹¥TOIE=1,此ä½�由硬件置ä½� -#define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos) -#define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE -#define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos) -#define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1å�¯åŠ¨è‡ªåŠ¨æ³¢ç‰¹çŽ‡æ ¡å‡†ï¼Œå®Œæˆ�å�Žè‡ªåŠ¨æ¸…é›¶ -#define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos) -#define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测ä½�长,0 1ä½�,通过测起始ä½� 脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFF - // 1 2ä½�,通过测起始ä½�加1ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xFE - // 1 4ä½�,通过测起始ä½�加3ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0xF8 - // 1 8ä½�,通过测起始ä½�加7ä½�æ•°æ�®ä½�脉宽计算波特率,è¦�求å�‘é€�端å�‘é€�0x80 -#define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos) -#define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准æˆ�功 1 自动波特率校准失败 -#define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos) -#define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,å�‘é€�FIFO空且å�‘é€�å�‘é€�ç§»ä½�寄存器已将最å�Žä¸€ä½�å�‘é€�出去 -#define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos) - -#define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数 -#define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos) -#define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数 -#define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos) -#define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触å�‘é—¨é™�,中断使能时 RXLVL >= RXTHR 触å�‘RX中断 -#define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos) -#define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触å�‘é—¨é™�,中断使能时 TXLVL <= TXTHR 触å�‘TX中断 -#define UART_FIFO_TXTHR_Msk (0xFFu<< UART_FIFO_TXTHR_Pos) - -#define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能 -#define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos) -#define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状æ€� -#define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos) -#define UART_LINCR_GENBRKIE_Pos 2 //å�‘é€�LIN Break完æˆ�中断使能 -#define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos) -#define UART_LINCR_GENBRKIF_Pos 3 //å�‘é€�LIN Break完æˆ�中断状æ€� -#define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos) -#define UART_LINCR_GENBRK_Pos 4 //å�‘é€�LIN Break,å�‘é€�完æˆ�自动清零 -#define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos) - -#define UART_CTSCR_EN_Pos 0 //CTSæµ�控使能 -#define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos) -#define UART_CTSCR_POL_Pos 2 //CTSä¿¡å�·æž�性,0 低有效,CTS输入为低表示å�¯ä»¥å�‘é€�æ•°æ�® -#define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos) -#define UART_CTSCR_STAT_Pos 7 //CTSä¿¡å�·çš„当å‰�状æ€� -#define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos) - -#define UART_RTSCR_EN_Pos 1 //RTSæµ�控使能 -#define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos) -#define UART_RTSCR_POL_Pos 3 //RTSä¿¡å�·æž�性 0 低有效,RTS输入为低表示å�¯ä»¥æŽ¥æ”¶æ•°æ�® -#define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos) -#define UART_RTSCR_THR_Pos 4 //RTSæµ�控的触å�‘阈值 0 1字节 1 2字节 2 4字节 3 6字节 -#define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos) -#define UART_RTSCR_STAT_Pos 8 //RTSä¿¡å�·çš„当å‰�状æ€� -#define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos) - - - - -typedef struct { - __IO uint32_t CTRL; - - __IO uint32_t DATA; - - __IO uint32_t STAT; - - __IO uint32_t IE; - - __IO uint32_t IF; + __IO uint32_t IF; } SPI_TypeDef; +#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2) +#define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos) +#define SPI_CTRL_EN_Pos 3 +#define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos) +#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, å�–值3--15,表示4--16ä½� +#define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos) +#define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳å�˜æ²¿é‡‡æ ·æ•°æ�® 1 在SCLK的第二个跳å�˜æ²¿é‡‡æ ·æ•°æ�® +#define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos) +#define SPI_CTRL_CPOL_Pos 9 //0 空闲状æ€�下SCLK为低电平 1 空闲状æ€�下SCLK为高电平 +#define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos) +#define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 SPI 3 SPI +#define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos) +#define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模å¼� 0 从模å¼� +#define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos) +#define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置 +#define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos) +#define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信å�·è¿›è¡ŒåŽ»æŠ–æ“�作 0 对SPI输入信å�·ä¸�进行去抖æ“�作 +#define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos) +#define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中æ¯�字符之间会将SSN拉高å�Šä¸ªSCLK周期 +#define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos) +#define SPI_CTRL_TFCLR_Pos 24 //TX FIFO Clear +#define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos) +#define SPI_CTRL_RFCLR_Pos 25 //RX FIFO Clear +#define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos) + +#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1,软件写1清零 +#define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos) +#define SPI_STAT_TFE_Pos 1 //å�‘é€�FIFO Empty +#define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos) +#define SPI_STAT_TFNF_Pos 2 //å�‘é€�FIFO Not Full +#define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos) +#define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty +#define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos) +#define SPI_STAT_RFF_Pos 4 //接收FIFO Full +#define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos) +#define SPI_STAT_RFOVF_Pos 5 //接收FIFO Overflow +#define SPI_STAT_RFOVF_Msk (0x01 << SPI_STAT_RFOVF_Pos) +#define SPI_STAT_TFLVL_Pos 6 //å�‘é€�FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 TFNF=0时表示FIFO内有8个数æ�®ï¼ŒTFNF=1时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® +#define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos) +#define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 RFF=1时表示FIFO内有8个数æ�®ï¼Œ RFF=0时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® +#define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos) +#define SPI_STAT_BUSY_Pos 15 +#define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos) + +#define SPI_IE_RFOVF_Pos 0 +#define SPI_IE_RFOVF_Msk (0x01 << SPI_IE_RFOVF_Pos) +#define SPI_IE_RFF_Pos 1 +#define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos) +#define SPI_IE_RFHF_Pos 2 +#define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos) +#define SPI_IE_TFE_Pos 3 +#define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos) +#define SPI_IE_TFHF_Pos 4 +#define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos) +#define SPI_IE_WTC_Pos 8 //Word Transmit Complete +#define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos) +#define SPI_IE_FTC_Pos 9 //Frame Transmit Complete +#define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos) + +#define SPI_IF_RFOVF_Pos 0 //写1清零 +#define SPI_IF_RFOVF_Msk (0x01 << SPI_IF_RFOVF_Pos) +#define SPI_IF_RFF_Pos 1 +#define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos) +#define SPI_IF_RFHF_Pos 2 +#define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos) +#define SPI_IF_TFE_Pos 3 +#define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos) +#define SPI_IF_TFHF_Pos 4 +#define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos) +#define SPI_IF_WTC_Pos 8 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1 +#define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos) +#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTCç½®ä½�æ—¶è‹¥TX FIFO是空的,则FTCç½®ä½� +#define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos) + +typedef struct +{ + __IO uint32_t CLKDIV; //[15:0] 须将内部工作频率分到SCL频率的5å€�,å�³CLKDIV = SYS_Freq/5/SCL_Freq - 1 + + __IO uint32_t CTRL; + + __IO uint32_t MSTDAT; + + __IO uint32_t MSTCMD; -#define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2) -#define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos) -#define SPI_CTRL_EN_Pos 3 -#define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos) -#define SPI_CTRL_SIZE_Pos 4 //Data Size Select, å�–值3--15,表示4--16ä½� -#define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos) -#define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳å�˜æ²¿é‡‡æ ·æ•°æ�® 1 在SCLK的第二个跳å�˜æ²¿é‡‡æ ·æ•°æ�® -#define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos) -#define SPI_CTRL_CPOL_Pos 9 //0 空闲状æ€�下SCLK为低电平 1 空闲状æ€�下SCLK为高电平 -#define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos) -#define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 SPI 3 SPI -#define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos) -#define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模å¼� 0 从模å¼� -#define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos) -#define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置 -#define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos) -#define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信å�·è¿›è¡ŒåŽ»æŠ–æ“�作 0 对SPI输入信å�·ä¸�进行去抖æ“�作 -#define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos) -#define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中æ¯�字符之间会将SSN拉高å�Šä¸ªSCLK周期 -#define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos) -#define SPI_CTRL_TFCLR_Pos 24 //TX FIFO Clear -#define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos) -#define SPI_CTRL_RFCLR_Pos 25 //RX FIFO Clear -#define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos) - -#define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1,软件写1清零 -#define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos) -#define SPI_STAT_TFE_Pos 1 //å�‘é€�FIFO Empty -#define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos) -#define SPI_STAT_TFNF_Pos 2 //å�‘é€�FIFO Not Full -#define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos) -#define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty -#define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos) -#define SPI_STAT_RFF_Pos 4 //接收FIFO Full -#define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos) -#define SPI_STAT_RFOVF_Pos 5 //接收FIFO Overflow -#define SPI_STAT_RFOVF_Msk (0x01 << SPI_STAT_RFOVF_Pos) -#define SPI_STAT_TFLVL_Pos 6 //å�‘é€�FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 TFNF=0时表示FIFO内有8个数æ�®ï¼ŒTFNF=1时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® -#define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos) -#define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数æ�®ä¸ªæ•°ï¼Œ 0 RFF=1时表示FIFO内有8个数æ�®ï¼Œ RFF=0时表示FIFO内有0个数æ�® 1--7 FIFO内有1--7个数æ�® -#define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos) -#define SPI_STAT_BUSY_Pos 15 -#define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos) - -#define SPI_IE_RFOVF_Pos 0 -#define SPI_IE_RFOVF_Msk (0x01 << SPI_IE_RFOVF_Pos) -#define SPI_IE_RFF_Pos 1 -#define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos) -#define SPI_IE_RFHF_Pos 2 -#define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos) -#define SPI_IE_TFE_Pos 3 -#define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos) -#define SPI_IE_TFHF_Pos 4 -#define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos) -#define SPI_IE_WTC_Pos 8 //Word Transmit Complete -#define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos) -#define SPI_IE_FTC_Pos 9 //Frame Transmit Complete -#define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos) - -#define SPI_IF_RFOVF_Pos 0 //写1清零 -#define SPI_IF_RFOVF_Msk (0x01 << SPI_IF_RFOVF_Pos) -#define SPI_IF_RFF_Pos 1 -#define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos) -#define SPI_IF_RFHF_Pos 2 -#define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos) -#define SPI_IF_TFE_Pos 3 -#define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos) -#define SPI_IF_TFHF_Pos 4 -#define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos) -#define SPI_IF_WTC_Pos 8 //Word Transmit Complete,æ¯�传输完æˆ�一个数æ�®å­—由硬件置1 -#define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos) -#define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTCç½®ä½�æ—¶è‹¥TX FIFO是空的,则FTCç½®ä½� -#define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos) - - - - -typedef struct { - __IO uint32_t CLKDIV; //[15:0] 须将内部工作频率分到SCL频率的5å€�,å�³CLKDIV = SYS_Freq/5/SCL_Freq - 1 - - __IO uint32_t CTRL; - - __IO uint32_t MSTDAT; - - __IO uint32_t MSTCMD; - - __IO uint32_t SLVCR; - - __IO uint32_t SLVIF; - - __IO uint32_t SLVTX; - - __IO uint32_t SLVRX; + __IO uint32_t SLVCR; + + __IO uint32_t SLVIF; + + __IO uint32_t SLVTX; + + __IO uint32_t SLVRX; } I2C_TypeDef; +#define I2C_CTRL_MSTIE_Pos 6 +#define I2C_CTRL_MSTIE_Msk (0x01 << I2C_CTRL_MSTIE_Pos) +#define I2C_CTRL_EN_Pos 7 +#define I2C_CTRL_EN_Msk (0x01 << I2C_CTRL_EN_Pos) + +#define I2C_MSTCMD_IF_Pos 0 //1 有等待处ç�†çš„中断,写1清零 有两ç§�情况下此ä½�硬件置ä½�:1ã€�一个字节传输完æˆ� 2ã€�总线访问æ�ƒä¸¢å¤± +#define I2C_MSTCMD_IF_Msk (0x01 << I2C_MSTCMD_IF_Pos) +#define I2C_MSTCMD_TIP_Pos 1 //Transmission In Process +#define I2C_MSTCMD_TIP_Msk (0x01 << I2C_MSTCMD_TIP_Pos) +#define I2C_MSTCMD_ACK_Pos 3 //接收模å¼�下,0 å�‘å�‘é€�端å��馈ACK 1 å�‘å�‘é€�端å��馈NACK +#define I2C_MSTCMD_ACK_Msk (0x01 << I2C_MSTCMD_ACK_Pos) +#define I2C_MSTCMD_WR_Pos 4 // å�‘Slave写数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 +#define I2C_MSTCMD_WR_Msk (0x01 << I2C_MSTCMD_WR_Pos) +#define I2C_MSTCMD_RD_Pos 5 //写:从Slave读数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 读:当I2C模å�—失去总线的访问æ�ƒæ—¶ç¡¬ä»¶ç½®1 +#define I2C_MSTCMD_RD_Msk (0x01 << I2C_MSTCMD_RD_Pos) +#define I2C_MSTCMD_BUSY_Pos 6 //读:当检测到START之å�Žï¼Œè¿™ä¸€ä½�å�˜1;当检测到STOP之å�Žï¼Œè¿™ä¸€ä½�å�˜0 +#define I2C_MSTCMD_BUSY_Msk (0x01 << I2C_MSTCMD_BUSY_Pos) +#define I2C_MSTCMD_STO_Pos 6 //写:产生STOP,自动清零 +#define I2C_MSTCMD_STO_Msk (0x01 << I2C_MSTCMD_STO_Pos) +#define I2C_MSTCMD_RXACK_Pos 7 //读:接收到的Slaveçš„ACKä½�,0 收到ACK 1 收到NACK +#define I2C_MSTCMD_RXACK_Msk (0x01 << I2C_MSTCMD_RXACK_Pos) +#define I2C_MSTCMD_STA_Pos 7 //写:产生START,自动清零 +#define I2C_MSTCMD_STA_Msk (0x01 << I2C_MSTCMD_STA_Pos) + +#define I2C_SLVCR_IM_RXEND_Pos 0 //接收完æˆ�中断ç¦�æ­¢ +#define I2C_SLVCR_IM_RXEND_Msk (0x01 << I2C_SLVCR_IM_RXEND_Pos) +#define I2C_SLVCR_IM_TXEND_Pos 1 //å�‘é€�完æˆ�中断ç¦�æ­¢ +#define I2C_SLVCR_IM_TXEND_Msk (0x01 << I2C_SLVCR_IM_TXEND_Pos) +#define I2C_SLVCR_IM_STADET_Pos 2 //检测到起始中断ç¦�æ­¢ +#define I2C_SLVCR_IM_STADET_Msk (0x01 << I2C_SLVCR_IM_STADET_Pos) +#define I2C_SLVCR_IM_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­ç¦�æ­¢ +#define I2C_SLVCR_IM_STODET_Msk (0x01 << I2C_SLVCR_IM_STODET_Pos) +#define I2C_SLVCR_IM_RDREQ_Pos 4 //接收到读请求中断ç¦�æ­¢ +#define I2C_SLVCR_IM_RDREQ_Msk (0x01 << I2C_SLVCR_IM_RDREQ_Pos) +#define I2C_SLVCR_IM_WRREQ_Pos 5 //接收到写请求中断ç¦�æ­¢ +#define I2C_SLVCR_IM_WRREQ_Msk (0x01 << I2C_SLVCR_IM_WRREQ_Pos) +#define I2C_SLVCR_ADDR7b_Pos 16 //1 7ä½�地å�€æ¨¡å¼� 0 10ä½�地å�€æ¨¡å¼� +#define I2C_SLVCR_ADDR7b_Msk (0x01 << I2C_SLVCR_ADDR7b_Pos) +#define I2C_SLVCR_ACK_Pos 17 //1 应答ACK 0 应答NACK +#define I2C_SLVCR_ACK_Msk (0x01 << I2C_SLVCR_ACK_Pos) +#define I2C_SLVCR_SLAVE_Pos 18 //1 从机模å¼� 0 主机模å¼� +#define I2C_SLVCR_SLAVE_Msk (0x01 << I2C_SLVCR_SLAVE_Pos) +#define I2C_SLVCR_DEBOUNCE_Pos 19 //去抖动使能 +#define I2C_SLVCR_DEBOUNCE_Msk (0x01 << I2C_SLVCR_DEBOUNCE_Pos) +#define I2C_SLVCR_ADDR_Pos 20 //从机地å�€ +#define I2C_SLVCR_ADDR_Msk (0x3FF << I2C_SLVCR_ADDR_Pos) + +#define I2C_SLVIF_RXEND_Pos 0 //接收完æˆ�中断标志,写1清零 +#define I2C_SLVIF_RXEND_Msk (0x01 << I2C_SLVIF_RXEND_Pos) +#define I2C_SLVIF_TXEND_Pos 1 //å�‘é€�完æˆ�中断标志,写1清零 +#define I2C_SLVIF_TXEND_Msk (0x01 << I2C_SLVIF_TXEND_Pos) +#define I2C_SLVIF_STADET_Pos 2 //检测到起始中断标志,写1清零 +#define I2C_SLVIF_STADET_Msk (0x01 << I2C_SLVIF_STADET_Pos) +#define I2C_SLVIF_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­æ ‡å¿—,写1清零 +#define I2C_SLVIF_STODET_Msk (0x01 << I2C_SLVIF_STODET_Pos) +#define I2C_SLVIF_RDREQ_Pos 4 //接收到读请求中断标志 +#define I2C_SLVIF_RDREQ_Msk (0x01 << I2C_SLVIF_RDREQ_Pos) +#define I2C_SLVIF_WRREQ_Pos 5 //接收到写请求中断标志 +#define I2C_SLVIF_WRREQ_Msk (0x01 << I2C_SLVIF_WRREQ_Pos) +#define I2C_SLVIF_ACTIVE_Pos 6 //slave 有效 +#define I2C_SLVIF_ACTIVE_Msk (0x01 << I2C_SLVIF_ACTIVE_Pos) + +typedef struct +{ + __IO uint32_t CTRL; + + __IO uint32_t START; -#define I2C_CTRL_MSTIE_Pos 6 -#define I2C_CTRL_MSTIE_Msk (0x01 << I2C_CTRL_MSTIE_Pos) -#define I2C_CTRL_EN_Pos 7 -#define I2C_CTRL_EN_Msk (0x01 << I2C_CTRL_EN_Pos) - -#define I2C_MSTCMD_IF_Pos 0 //1 有等待处ç�†çš„中断,写1清零 有两ç§�情况下此ä½�硬件置ä½�:1ã€�一个字节传输完æˆ� 2ã€�总线访问æ�ƒä¸¢å¤± -#define I2C_MSTCMD_IF_Msk (0x01 << I2C_MSTCMD_IF_Pos) -#define I2C_MSTCMD_TIP_Pos 1 //Transmission In Process -#define I2C_MSTCMD_TIP_Msk (0x01 << I2C_MSTCMD_TIP_Pos) -#define I2C_MSTCMD_ACK_Pos 3 //接收模å¼�下,0 å�‘å�‘é€�端å��馈ACK 1 å�‘å�‘é€�端å��馈NACK -#define I2C_MSTCMD_ACK_Msk (0x01 << I2C_MSTCMD_ACK_Pos) -#define I2C_MSTCMD_WR_Pos 4 // å�‘Slave写数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 -#define I2C_MSTCMD_WR_Msk (0x01 << I2C_MSTCMD_WR_Pos) -#define I2C_MSTCMD_RD_Pos 5 //写:从Slave读数æ�®æ—¶ï¼ŒæŠŠè¿™ä¸€ä½�写1,自动清零 读:当I2C模å�—失去总线的访问æ�ƒæ—¶ç¡¬ä»¶ç½®1 -#define I2C_MSTCMD_RD_Msk (0x01 << I2C_MSTCMD_RD_Pos) -#define I2C_MSTCMD_BUSY_Pos 6 //读:当检测到START之å�Žï¼Œè¿™ä¸€ä½�å�˜1;当检测到STOP之å�Žï¼Œè¿™ä¸€ä½�å�˜0 -#define I2C_MSTCMD_BUSY_Msk (0x01 << I2C_MSTCMD_BUSY_Pos) -#define I2C_MSTCMD_STO_Pos 6 //写:产生STOP,自动清零 -#define I2C_MSTCMD_STO_Msk (0x01 << I2C_MSTCMD_STO_Pos) -#define I2C_MSTCMD_RXACK_Pos 7 //读:接收到的Slaveçš„ACKä½�,0 收到ACK 1 收到NACK -#define I2C_MSTCMD_RXACK_Msk (0x01 << I2C_MSTCMD_RXACK_Pos) -#define I2C_MSTCMD_STA_Pos 7 //写:产生START,自动清零 -#define I2C_MSTCMD_STA_Msk (0x01 << I2C_MSTCMD_STA_Pos) - -#define I2C_SLVCR_IM_RXEND_Pos 0 //接收完æˆ�中断ç¦�æ­¢ -#define I2C_SLVCR_IM_RXEND_Msk (0x01 << I2C_SLVCR_IM_RXEND_Pos) -#define I2C_SLVCR_IM_TXEND_Pos 1 //å�‘é€�完æˆ�中断ç¦�æ­¢ -#define I2C_SLVCR_IM_TXEND_Msk (0x01 << I2C_SLVCR_IM_TXEND_Pos) -#define I2C_SLVCR_IM_STADET_Pos 2 //检测到起始中断ç¦�æ­¢ -#define I2C_SLVCR_IM_STADET_Msk (0x01 << I2C_SLVCR_IM_STADET_Pos) -#define I2C_SLVCR_IM_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­ç¦�æ­¢ -#define I2C_SLVCR_IM_STODET_Msk (0x01 << I2C_SLVCR_IM_STODET_Pos) -#define I2C_SLVCR_IM_RDREQ_Pos 4 //接收到读请求中断ç¦�æ­¢ -#define I2C_SLVCR_IM_RDREQ_Msk (0x01 << I2C_SLVCR_IM_RDREQ_Pos) -#define I2C_SLVCR_IM_WRREQ_Pos 5 //接收到写请求中断ç¦�æ­¢ -#define I2C_SLVCR_IM_WRREQ_Msk (0x01 << I2C_SLVCR_IM_WRREQ_Pos) -#define I2C_SLVCR_ADDR7b_Pos 16 //1 7ä½�地å�€æ¨¡å¼� 0 10ä½�地å�€æ¨¡å¼� -#define I2C_SLVCR_ADDR7b_Msk (0x01 << I2C_SLVCR_ADDR7b_Pos) -#define I2C_SLVCR_ACK_Pos 17 //1 应答ACK 0 应答NACK -#define I2C_SLVCR_ACK_Msk (0x01 << I2C_SLVCR_ACK_Pos) -#define I2C_SLVCR_SLAVE_Pos 18 //1 从机模å¼� 0 主机模å¼� -#define I2C_SLVCR_SLAVE_Msk (0x01 << I2C_SLVCR_SLAVE_Pos) -#define I2C_SLVCR_DEBOUNCE_Pos 19 //去抖动使能 -#define I2C_SLVCR_DEBOUNCE_Msk (0x01 << I2C_SLVCR_DEBOUNCE_Pos) -#define I2C_SLVCR_ADDR_Pos 20 //从机地å�€ -#define I2C_SLVCR_ADDR_Msk (0x3FF << I2C_SLVCR_ADDR_Pos) - -#define I2C_SLVIF_RXEND_Pos 0 //接收完æˆ�中断标志,写1清零 -#define I2C_SLVIF_RXEND_Msk (0x01 << I2C_SLVIF_RXEND_Pos) -#define I2C_SLVIF_TXEND_Pos 1 //å�‘é€�完æˆ�中断标志,写1清零 -#define I2C_SLVIF_TXEND_Msk (0x01 << I2C_SLVIF_TXEND_Pos) -#define I2C_SLVIF_STADET_Pos 2 //检测到起始中断标志,写1清零 -#define I2C_SLVIF_STADET_Msk (0x01 << I2C_SLVIF_STADET_Pos) -#define I2C_SLVIF_STODET_Pos 3 //检测到å�œæ­¢ä¸­æ–­æ ‡å¿—,写1清零 -#define I2C_SLVIF_STODET_Msk (0x01 << I2C_SLVIF_STODET_Pos) -#define I2C_SLVIF_RDREQ_Pos 4 //接收到读请求中断标志 -#define I2C_SLVIF_RDREQ_Msk (0x01 << I2C_SLVIF_RDREQ_Pos) -#define I2C_SLVIF_WRREQ_Pos 5 //接收到写请求中断标志 -#define I2C_SLVIF_WRREQ_Msk (0x01 << I2C_SLVIF_WRREQ_Pos) -#define I2C_SLVIF_ACTIVE_Pos 6 //slave 有效 -#define I2C_SLVIF_ACTIVE_Msk (0x01 << I2C_SLVIF_ACTIVE_Pos) - - - - -typedef struct { - __IO uint32_t CTRL; - - __IO uint32_t START; - - __IO uint32_t IE; - - __IO uint32_t IF; - - struct { - __IO uint32_t STAT; - - __IO uint32_t DATA; - - uint32_t RESERVED[2]; - } CH[8]; - - __IO uint32_t CTRL1; - - __IO uint32_t CTRL2; - - uint32_t RESERVED[2]; - - __IO uint32_t CALIBSET; - - __IO uint32_t CALIBEN; -} ADC_TypeDef; + __IO uint32_t IE; + + __IO uint32_t IF; + + struct + { + __IO uint32_t STAT; + + __IO uint32_t DATA; + uint32_t RESERVED[2]; + } CH[8]; -#define ADC_CTRL_CH0_Pos 0 //通é�“选中 -#define ADC_CTRL_CH0_Msk (0x01 << ADC_CTRL_CH0_Pos) -#define ADC_CTRL_CH1_Pos 1 -#define ADC_CTRL_CH1_Msk (0x01 << ADC_CTRL_CH1_Pos) -#define ADC_CTRL_CH2_Pos 2 -#define ADC_CTRL_CH2_Msk (0x01 << ADC_CTRL_CH2_Pos) -#define ADC_CTRL_CH3_Pos 3 -#define ADC_CTRL_CH3_Msk (0x01 << ADC_CTRL_CH3_Pos) -#define ADC_CTRL_CH4_Pos 4 -#define ADC_CTRL_CH4_Msk (0x01 << ADC_CTRL_CH4_Pos) -#define ADC_CTRL_CH5_Pos 5 -#define ADC_CTRL_CH5_Msk (0x01 << ADC_CTRL_CH5_Pos) -#define ADC_CTRL_CH6_Pos 6 -#define ADC_CTRL_CH6_Msk (0x01 << ADC_CTRL_CH6_Pos) -#define ADC_CTRL_CH7_Pos 7 -#define ADC_CTRL_CH7_Msk (0x01 << ADC_CTRL_CH7_Pos) -#define ADC_CTRL_AVG_Pos 8 //0 1次采样 1 2次采样å�–å¹³å�‡å€¼ 3 4次采样å�–å¹³å�‡å€¼ 7 8次采样å�–å¹³å�‡å€¼ 15 16次采样å�–å¹³å�‡å€¼ -#define ADC_CTRL_AVG_Msk (0x0F << ADC_CTRL_AVG_Pos) -#define ADC_CTRL_EN_Pos 12 -#define ADC_CTRL_EN_Msk (0x01 << ADC_CTRL_EN_Pos) -#define ADC_CTRL_CONT_Pos 13 //Continuous conversion,å�ªåœ¨è½¯ä»¶å�¯åŠ¨æ¨¡å¼�下有效,0 å�•次转æ�¢ï¼Œè½¬æ�¢å®Œæˆ�å�ŽSTARTä½�自动清除å�œæ­¢è½¬æ�¢ -#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 连续转æ�¢ï¼Œå�¯åЍå�Žä¸€ç›´é‡‡æ ·ã€�转æ�¢ï¼Œç›´åˆ°è½¯ä»¶æ¸…除STARTä½� -#define ADC_CTRL_TRIG_Pos 14 //转æ�¢è§¦å�‘æ–¹å¼�:0 软件å�¯åŠ¨è½¬æ�¢ 1 PWM触å�‘ -#define ADC_CTRL_TRIG_Msk (0x01 << ADC_CTRL_TRIG_Pos) -#define ADC_CTRL_CLKSRC_Pos 15 //0 VCO 1 HRC -#define ADC_CTRL_CLKSRC_Msk (0x01 << ADC_CTRL_CLKSRC_Pos) -#define ADC_CTRL_FIFOCLR_Pos 24 //[24] CH0_FIFO_CLR [25] CH1_FIFO_CLR ... [31] CH7_FIFO_CLR -#define ADC_CTRL_FIFOCLR_Msk (0xFFu<< ADC_CTRL_FIFOCLR_Pos) - -#define ADC_START_GO_Pos 0 //软件触å�‘模å¼�下,写1å�¯åЍADC采样和转æ�¢ï¼Œåœ¨å�•次模å¼�下转æ�¢å®Œæˆ�å�Žç¡¬ä»¶è‡ªåŠ¨æ¸…é›¶ï¼Œåœ¨æ‰«æ��模å¼�下必须软件写0å�œæ­¢ADC转æ�¢ -#define ADC_START_GO_Msk (0x01 << ADC_START_GO_Pos) -#define ADC_START_BUSY_Pos 4 -#define ADC_START_BUSY_Msk (0x01 << ADC_START_BUSY_Pos) - -#define ADC_IE_CH0EOC_Pos 0 //End Of Convertion -#define ADC_IE_CH0EOC_Msk (0x01 << ADC_IE_CH0EOC_Pos) -#define ADC_IE_CH0OVF_Pos 1 //Overflow -#define ADC_IE_CH0OVF_Msk (0x01 << ADC_IE_CH0OVF_Pos) -#define ADC_IE_CH0HFULL_Pos 2 //FIFO Half Full -#define ADC_IE_CH0HFULL_Msk (0x01 << ADC_IE_CH0HFULL_Pos) -#define ADC_IE_CH0FULL_Pos 3 //FIFO Full -#define ADC_IE_CH0FULL_Msk (0x01 << ADC_IE_CH0FULL_Pos) -#define ADC_IE_CH1EOC_Pos 4 -#define ADC_IE_CH1EOC_Msk (0x01 << ADC_IE_CH1EOC_Pos) -#define ADC_IE_CH1OVF_Pos 5 -#define ADC_IE_CH1OVF_Msk (0x01 << ADC_IE_CH1OVF_Pos) -#define ADC_IE_CH1HFULL_Pos 6 -#define ADC_IE_CH1HFULL_Msk (0x01 << ADC_IE_CH1HFULL_Pos) -#define ADC_IE_CH1FULL_Pos 7 -#define ADC_IE_CH1FULL_Msk (0x01 << ADC_IE_CH1FULL_Pos) -#define ADC_IE_CH2EOC_Pos 8 -#define ADC_IE_CH2EOC_Msk (0x01 << ADC_IE_CH2EOC_Pos) -#define ADC_IE_CH2OVF_Pos 9 -#define ADC_IE_CH2OVF_Msk (0x01 << ADC_IE_CH2OVF_Pos) -#define ADC_IE_CH2HFULL_Pos 10 -#define ADC_IE_CH2HFULL_Msk (0x01 << ADC_IE_CH2HFULL_Pos) -#define ADC_IE_CH2FULL_Pos 11 -#define ADC_IE_CH2FULL_Msk (0x01 << ADC_IE_CH2FULL_Pos) -#define ADC_IE_CH3EOC_Pos 12 -#define ADC_IE_CH3EOC_Msk (0x01 << ADC_IE_CH3EOC_Pos) -#define ADC_IE_CH3OVF_Pos 13 -#define ADC_IE_CH3OVF_Msk (0x01 << ADC_IE_CH3OVF_Pos) -#define ADC_IE_CH3HFULL_Pos 14 -#define ADC_IE_CH3HFULL_Msk (0x01 << ADC_IE_CH3HFULL_Pos) -#define ADC_IE_CH3FULL_Pos 15 -#define ADC_IE_CH3FULL_Msk (0x01 << ADC_IE_CH3FULL_Pos) -#define ADC_IE_CH4EOC_Pos 16 -#define ADC_IE_CH4EOC_Msk (0x01 << ADC_IE_CH4EOC_Pos) -#define ADC_IE_CH4OVF_Pos 17 -#define ADC_IE_CH4OVF_Msk (0x01 << ADC_IE_CH4OVF_Pos) -#define ADC_IE_CH4HFULL_Pos 18 -#define ADC_IE_CH4HFULL_Msk (0x01 << ADC_IE_CH4HFULL_Pos) -#define ADC_IE_CH4FULL_Pos 19 -#define ADC_IE_CH4FULL_Msk (0x01 << ADC_IE_CH4FULL_Pos) -#define ADC_IE_CH5EOC_Pos 20 -#define ADC_IE_CH5EOC_Msk (0x01 << ADC_IE_CH5EOC_Pos) -#define ADC_IE_CH5OVF_Pos 21 -#define ADC_IE_CH5OVF_Msk (0x01 << ADC_IE_CH5OVF_Pos) -#define ADC_IE_CH5HFULL_Pos 22 -#define ADC_IE_CH5HFULL_Msk (0x01 << ADC_IE_CH5HFULL_Pos) -#define ADC_IE_CH5FULL_Pos 23 -#define ADC_IE_CH5FULL_Msk (0x01 << ADC_IE_CH5FULL_Pos) -#define ADC_IE_CH6EOC_Pos 24 -#define ADC_IE_CH6EOC_Msk (0x01 << ADC_IE_CH6EOC_Pos) -#define ADC_IE_CH6OVF_Pos 25 -#define ADC_IE_CH6OVF_Msk (0x01 << ADC_IE_CH6OVF_Pos) -#define ADC_IE_CH6HFULL_Pos 26 -#define ADC_IE_CH6HFULL_Msk (0x01 << ADC_IE_CH6HFULL_Pos) -#define ADC_IE_CH6FULL_Pos 27 -#define ADC_IE_CH6FULL_Msk (0x01 << ADC_IE_CH6FULL_Pos) -#define ADC_IE_CH7EOC_Pos 28 -#define ADC_IE_CH7EOC_Msk (0x01 << ADC_IE_CH7EOC_Pos) -#define ADC_IE_CH7OVF_Pos 29 -#define ADC_IE_CH7OVF_Msk (0x01 << ADC_IE_CH7OVF_Pos) -#define ADC_IE_CH7HFULL_Pos 30 -#define ADC_IE_CH7HFULL_Msk (0x01 << ADC_IE_CH7HFULL_Pos) -#define ADC_IE_CH7FULL_Pos 31 -#define ADC_IE_CH7FULL_Msk (0x01u<< ADC_IE_CH7FULL_Pos) - -#define ADC_IF_CH0EOC_Pos 0 //写1清零 -#define ADC_IF_CH0EOC_Msk (0x01 << ADC_IF_CH0EOC_Pos) -#define ADC_IF_CH0OVF_Pos 1 //写1清零 -#define ADC_IF_CH0OVF_Msk (0x01 << ADC_IF_CH0OVF_Pos) -#define ADC_IF_CH0HFULL_Pos 2 //写1清零 -#define ADC_IF_CH0HFULL_Msk (0x01 << ADC_IF_CH0HFULL_Pos) -#define ADC_IF_CH0FULL_Pos 3 //写1清零 -#define ADC_IF_CH0FULL_Msk (0x01 << ADC_IF_CH0FULL_Pos) -#define ADC_IF_CH1EOC_Pos 4 -#define ADC_IF_CH1EOC_Msk (0x01 << ADC_IF_CH1EOC_Pos) -#define ADC_IF_CH1OVF_Pos 5 -#define ADC_IF_CH1OVF_Msk (0x01 << ADC_IF_CH1OVF_Pos) -#define ADC_IF_CH1HFULL_Pos 6 -#define ADC_IF_CH1HFULL_Msk (0x01 << ADC_IF_CH1HFULL_Pos) -#define ADC_IF_CH1FULL_Pos 7 -#define ADC_IF_CH1FULL_Msk (0x01 << ADC_IF_CH1FULL_Pos) -#define ADC_IF_CH2EOC_Pos 8 -#define ADC_IF_CH2EOC_Msk (0x01 << ADC_IF_CH2EOC_Pos) -#define ADC_IF_CH2OVF_Pos 9 -#define ADC_IF_CH2OVF_Msk (0x01 << ADC_IF_CH2OVF_Pos) -#define ADC_IF_CH2HFULL_Pos 10 -#define ADC_IF_CH2HFULL_Msk (0x01 << ADC_IF_CH2HFULL_Pos) -#define ADC_IF_CH2FULL_Pos 11 -#define ADC_IF_CH2FULL_Msk (0x01 << ADC_IF_CH2FULL_Pos) -#define ADC_IF_CH3EOC_Pos 12 -#define ADC_IF_CH3EOC_Msk (0x01 << ADC_IF_CH3EOC_Pos) -#define ADC_IF_CH3OVF_Pos 13 -#define ADC_IF_CH3OVF_Msk (0x01 << ADC_IF_CH3OVF_Pos) -#define ADC_IF_CH3HFULL_Pos 14 -#define ADC_IF_CH3HFULL_Msk (0x01 << ADC_IF_CH3HFULL_Pos) -#define ADC_IF_CH3FULL_Pos 15 -#define ADC_IF_CH3FULL_Msk (0x01 << ADC_IF_CH3FULL_Pos) -#define ADC_IF_CH4EOC_Pos 16 -#define ADC_IF_CH4EOC_Msk (0x01 << ADC_IF_CH4EOC_Pos) -#define ADC_IF_CH4OVF_Pos 17 -#define ADC_IF_CH4OVF_Msk (0x01 << ADC_IF_CH4OVF_Pos) -#define ADC_IF_CH4HFULL_Pos 18 -#define ADC_IF_CH4HFULL_Msk (0x01 << ADC_IF_CH4HFULL_Pos) -#define ADC_IF_CH4FULL_Pos 19 -#define ADC_IF_CH4FULL_Msk (0x01 << ADC_IF_CH4FULL_Pos) -#define ADC_IF_CH5EOC_Pos 20 -#define ADC_IF_CH5EOC_Msk (0x01 << ADC_IF_CH5EOC_Pos) -#define ADC_IF_CH5OVF_Pos 21 -#define ADC_IF_CH5OVF_Msk (0x01 << ADC_IF_CH5OVF_Pos) -#define ADC_IF_CH5HFULL_Pos 22 -#define ADC_IF_CH5HFULL_Msk (0x01 << ADC_IF_CH5HFULL_Pos) -#define ADC_IF_CH5FULL_Pos 23 -#define ADC_IF_CH5FULL_Msk (0x01 << ADC_IF_CH5FULL_Pos) -#define ADC_IF_CH6EOC_Pos 24 -#define ADC_IF_CH6EOC_Msk (0x01 << ADC_IF_CH6EOC_Pos) -#define ADC_IF_CH6OVF_Pos 25 -#define ADC_IF_CH6OVF_Msk (0x01 << ADC_IF_CH6OVF_Pos) -#define ADC_IF_CH6HFULL_Pos 26 -#define ADC_IF_CH6HFULL_Msk (0x01 << ADC_IF_CH6HFULL_Pos) -#define ADC_IF_CH6FULL_Pos 27 -#define ADC_IF_CH6FULL_Msk (0x01 << ADC_IF_CH6FULL_Pos) -#define ADC_IF_CH7EOC_Pos 28 -#define ADC_IF_CH7EOC_Msk (0x01 << ADC_IF_CH7EOC_Pos) -#define ADC_IF_CH7OVF_Pos 29 -#define ADC_IF_CH7OVF_Msk (0x01 << ADC_IF_CH7OVF_Pos) -#define ADC_IF_CH7HFULL_Pos 30 -#define ADC_IF_CH7HFULL_Msk (0x01 << ADC_IF_CH7HFULL_Pos) -#define ADC_IF_CH7FULL_Pos 31 -#define ADC_IF_CH7FULL_Msk (0x01 << ADC_IF_CH7FULL_Pos) - -#define ADC_STAT_EOC_Pos 0 //写1清零 -#define ADC_STAT_EOC_Msk (0x01 << ADC_STAT_EOC_Pos) -#define ADC_STAT_OVF_Pos 1 //读数æ�®å¯„存器清除 -#define ADC_STAT_OVF_Msk (0x01 << ADC_STAT_OVF_Pos) -#define ADC_STAT_HFULL_Pos 2 -#define ADC_STAT_HFULL_Msk (0x01 << ADC_STAT_HFULL_Pos) -#define ADC_STAT_FULL_Pos 3 -#define ADC_STAT_FULL_Msk (0x01 << ADC_STAT_FULL_Pos) -#define ADC_STAT_EMPTY_Pos 4 -#define ADC_STAT_EMPTY_Msk (0x01 << ADC_STAT_EMPTY_Pos) - -#define ADC_CTRL1_RIN_Pos 4 //输入阻抗:0 无穷大 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K -#define ADC_CTRL1_RIN_Msk (0x07 << ADC_CTRL1_RIN_Pos) - -#define ADC_CTRL2_RESET_Pos 0 //数字电路å¤�ä½� -#define ADC_CTRL2_RESET_Msk (0x01 << ADC_CTRL2_RESET_Pos) -#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM,ADC与PGA输出共模电平选择 -#define ADC_CTRL2_ADCEVCM_Msk (0x01 << ADC_CTRL2_ADCEVCM_Pos) -#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM,PGA输入共模电平选择 -#define ADC_CTRL2_PGAIVCM_Msk (0x01 << ADC_CTRL2_PGAIVCM_Pos) -#define ADC_CTRL2_PGAGAIN_Pos 3 //0 25.1dB 1 21.6dB 2 11.1dB 3 3.5dB 4 0dB(1.8V) 5 -2.9dB 6 -5.3dB -#define ADC_CTRL2_PGAGAIN_Msk (0x07 << ADC_CTRL2_PGAGAIN_Pos) -#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC 内部 1.2V REFP电压输出到外部REFP引脚,用于测é‡�,或在需è¦�1.2V外部REFP时节çœ�æˆ�本 + __IO uint32_t CTRL1; + + __IO uint32_t CTRL2; + + uint32_t RESERVED[2]; + + __IO uint32_t CALIBSET; + + __IO uint32_t CALIBEN; +} ADC_TypeDef; + +#define ADC_CTRL_CH0_Pos 0 //通é�“选中 +#define ADC_CTRL_CH0_Msk (0x01 << ADC_CTRL_CH0_Pos) +#define ADC_CTRL_CH1_Pos 1 +#define ADC_CTRL_CH1_Msk (0x01 << ADC_CTRL_CH1_Pos) +#define ADC_CTRL_CH2_Pos 2 +#define ADC_CTRL_CH2_Msk (0x01 << ADC_CTRL_CH2_Pos) +#define ADC_CTRL_CH3_Pos 3 +#define ADC_CTRL_CH3_Msk (0x01 << ADC_CTRL_CH3_Pos) +#define ADC_CTRL_CH4_Pos 4 +#define ADC_CTRL_CH4_Msk (0x01 << ADC_CTRL_CH4_Pos) +#define ADC_CTRL_CH5_Pos 5 +#define ADC_CTRL_CH5_Msk (0x01 << ADC_CTRL_CH5_Pos) +#define ADC_CTRL_CH6_Pos 6 +#define ADC_CTRL_CH6_Msk (0x01 << ADC_CTRL_CH6_Pos) +#define ADC_CTRL_CH7_Pos 7 +#define ADC_CTRL_CH7_Msk (0x01 << ADC_CTRL_CH7_Pos) +#define ADC_CTRL_AVG_Pos 8 //0 1次采样 1 2次采样å�–å¹³å�‡å€¼ 3 4次采样å�–å¹³å�‡å€¼ 7 8次采样å�–å¹³å�‡å€¼ 15 16次采样å�–å¹³å�‡å€¼ +#define ADC_CTRL_AVG_Msk (0x0F << ADC_CTRL_AVG_Pos) +#define ADC_CTRL_EN_Pos 12 +#define ADC_CTRL_EN_Msk (0x01 << ADC_CTRL_EN_Pos) +#define ADC_CTRL_CONT_Pos 13 //Continuous conversion,å�ªåœ¨è½¯ä»¶å�¯åŠ¨æ¨¡å¼�下有效,0 å�•次转æ�¢ï¼Œè½¬æ�¢å®Œæˆ�å�ŽSTARTä½�自动清除å�œæ­¢è½¬æ�¢ +#define ADC_CTRL_CONT_Msk (0x01 << ADC_CTRL_CONT_Pos) // 1 连续转æ�¢ï¼Œå�¯åЍå�Žä¸€ç›´é‡‡æ ·ã€�转æ�¢ï¼Œç›´åˆ°è½¯ä»¶æ¸…除STARTä½� +#define ADC_CTRL_TRIG_Pos 14 //转æ�¢è§¦å�‘æ–¹å¼�:0 软件å�¯åŠ¨è½¬æ�¢ 1 PWM触å�‘ +#define ADC_CTRL_TRIG_Msk (0x01 << ADC_CTRL_TRIG_Pos) +#define ADC_CTRL_CLKSRC_Pos 15 //0 VCO 1 HRC +#define ADC_CTRL_CLKSRC_Msk (0x01 << ADC_CTRL_CLKSRC_Pos) +#define ADC_CTRL_FIFOCLR_Pos 24 //[24] CH0_FIFO_CLR [25] CH1_FIFO_CLR ... [31] CH7_FIFO_CLR +#define ADC_CTRL_FIFOCLR_Msk (0xFFu << ADC_CTRL_FIFOCLR_Pos) + +#define ADC_START_GO_Pos 0 //软件触å�‘模å¼�下,写1å�¯åЍADC采样和转æ�¢ï¼Œåœ¨å�•次模å¼�下转æ�¢å®Œæˆ�å�Žç¡¬ä»¶è‡ªåŠ¨æ¸…é›¶ï¼Œåœ¨æ‰«æ��模å¼�下必须软件写0å�œæ­¢ADC转æ�¢ +#define ADC_START_GO_Msk (0x01 << ADC_START_GO_Pos) +#define ADC_START_BUSY_Pos 4 +#define ADC_START_BUSY_Msk (0x01 << ADC_START_BUSY_Pos) + +#define ADC_IE_CH0EOC_Pos 0 //End Of Convertion +#define ADC_IE_CH0EOC_Msk (0x01 << ADC_IE_CH0EOC_Pos) +#define ADC_IE_CH0OVF_Pos 1 //Overflow +#define ADC_IE_CH0OVF_Msk (0x01 << ADC_IE_CH0OVF_Pos) +#define ADC_IE_CH0HFULL_Pos 2 //FIFO Half Full +#define ADC_IE_CH0HFULL_Msk (0x01 << ADC_IE_CH0HFULL_Pos) +#define ADC_IE_CH0FULL_Pos 3 //FIFO Full +#define ADC_IE_CH0FULL_Msk (0x01 << ADC_IE_CH0FULL_Pos) +#define ADC_IE_CH1EOC_Pos 4 +#define ADC_IE_CH1EOC_Msk (0x01 << ADC_IE_CH1EOC_Pos) +#define ADC_IE_CH1OVF_Pos 5 +#define ADC_IE_CH1OVF_Msk (0x01 << ADC_IE_CH1OVF_Pos) +#define ADC_IE_CH1HFULL_Pos 6 +#define ADC_IE_CH1HFULL_Msk (0x01 << ADC_IE_CH1HFULL_Pos) +#define ADC_IE_CH1FULL_Pos 7 +#define ADC_IE_CH1FULL_Msk (0x01 << ADC_IE_CH1FULL_Pos) +#define ADC_IE_CH2EOC_Pos 8 +#define ADC_IE_CH2EOC_Msk (0x01 << ADC_IE_CH2EOC_Pos) +#define ADC_IE_CH2OVF_Pos 9 +#define ADC_IE_CH2OVF_Msk (0x01 << ADC_IE_CH2OVF_Pos) +#define ADC_IE_CH2HFULL_Pos 10 +#define ADC_IE_CH2HFULL_Msk (0x01 << ADC_IE_CH2HFULL_Pos) +#define ADC_IE_CH2FULL_Pos 11 +#define ADC_IE_CH2FULL_Msk (0x01 << ADC_IE_CH2FULL_Pos) +#define ADC_IE_CH3EOC_Pos 12 +#define ADC_IE_CH3EOC_Msk (0x01 << ADC_IE_CH3EOC_Pos) +#define ADC_IE_CH3OVF_Pos 13 +#define ADC_IE_CH3OVF_Msk (0x01 << ADC_IE_CH3OVF_Pos) +#define ADC_IE_CH3HFULL_Pos 14 +#define ADC_IE_CH3HFULL_Msk (0x01 << ADC_IE_CH3HFULL_Pos) +#define ADC_IE_CH3FULL_Pos 15 +#define ADC_IE_CH3FULL_Msk (0x01 << ADC_IE_CH3FULL_Pos) +#define ADC_IE_CH4EOC_Pos 16 +#define ADC_IE_CH4EOC_Msk (0x01 << ADC_IE_CH4EOC_Pos) +#define ADC_IE_CH4OVF_Pos 17 +#define ADC_IE_CH4OVF_Msk (0x01 << ADC_IE_CH4OVF_Pos) +#define ADC_IE_CH4HFULL_Pos 18 +#define ADC_IE_CH4HFULL_Msk (0x01 << ADC_IE_CH4HFULL_Pos) +#define ADC_IE_CH4FULL_Pos 19 +#define ADC_IE_CH4FULL_Msk (0x01 << ADC_IE_CH4FULL_Pos) +#define ADC_IE_CH5EOC_Pos 20 +#define ADC_IE_CH5EOC_Msk (0x01 << ADC_IE_CH5EOC_Pos) +#define ADC_IE_CH5OVF_Pos 21 +#define ADC_IE_CH5OVF_Msk (0x01 << ADC_IE_CH5OVF_Pos) +#define ADC_IE_CH5HFULL_Pos 22 +#define ADC_IE_CH5HFULL_Msk (0x01 << ADC_IE_CH5HFULL_Pos) +#define ADC_IE_CH5FULL_Pos 23 +#define ADC_IE_CH5FULL_Msk (0x01 << ADC_IE_CH5FULL_Pos) +#define ADC_IE_CH6EOC_Pos 24 +#define ADC_IE_CH6EOC_Msk (0x01 << ADC_IE_CH6EOC_Pos) +#define ADC_IE_CH6OVF_Pos 25 +#define ADC_IE_CH6OVF_Msk (0x01 << ADC_IE_CH6OVF_Pos) +#define ADC_IE_CH6HFULL_Pos 26 +#define ADC_IE_CH6HFULL_Msk (0x01 << ADC_IE_CH6HFULL_Pos) +#define ADC_IE_CH6FULL_Pos 27 +#define ADC_IE_CH6FULL_Msk (0x01 << ADC_IE_CH6FULL_Pos) +#define ADC_IE_CH7EOC_Pos 28 +#define ADC_IE_CH7EOC_Msk (0x01 << ADC_IE_CH7EOC_Pos) +#define ADC_IE_CH7OVF_Pos 29 +#define ADC_IE_CH7OVF_Msk (0x01 << ADC_IE_CH7OVF_Pos) +#define ADC_IE_CH7HFULL_Pos 30 +#define ADC_IE_CH7HFULL_Msk (0x01 << ADC_IE_CH7HFULL_Pos) +#define ADC_IE_CH7FULL_Pos 31 +#define ADC_IE_CH7FULL_Msk (0x01u << ADC_IE_CH7FULL_Pos) + +#define ADC_IF_CH0EOC_Pos 0 //写1清零 +#define ADC_IF_CH0EOC_Msk (0x01 << ADC_IF_CH0EOC_Pos) +#define ADC_IF_CH0OVF_Pos 1 //写1清零 +#define ADC_IF_CH0OVF_Msk (0x01 << ADC_IF_CH0OVF_Pos) +#define ADC_IF_CH0HFULL_Pos 2 //写1清零 +#define ADC_IF_CH0HFULL_Msk (0x01 << ADC_IF_CH0HFULL_Pos) +#define ADC_IF_CH0FULL_Pos 3 //写1清零 +#define ADC_IF_CH0FULL_Msk (0x01 << ADC_IF_CH0FULL_Pos) +#define ADC_IF_CH1EOC_Pos 4 +#define ADC_IF_CH1EOC_Msk (0x01 << ADC_IF_CH1EOC_Pos) +#define ADC_IF_CH1OVF_Pos 5 +#define ADC_IF_CH1OVF_Msk (0x01 << ADC_IF_CH1OVF_Pos) +#define ADC_IF_CH1HFULL_Pos 6 +#define ADC_IF_CH1HFULL_Msk (0x01 << ADC_IF_CH1HFULL_Pos) +#define ADC_IF_CH1FULL_Pos 7 +#define ADC_IF_CH1FULL_Msk (0x01 << ADC_IF_CH1FULL_Pos) +#define ADC_IF_CH2EOC_Pos 8 +#define ADC_IF_CH2EOC_Msk (0x01 << ADC_IF_CH2EOC_Pos) +#define ADC_IF_CH2OVF_Pos 9 +#define ADC_IF_CH2OVF_Msk (0x01 << ADC_IF_CH2OVF_Pos) +#define ADC_IF_CH2HFULL_Pos 10 +#define ADC_IF_CH2HFULL_Msk (0x01 << ADC_IF_CH2HFULL_Pos) +#define ADC_IF_CH2FULL_Pos 11 +#define ADC_IF_CH2FULL_Msk (0x01 << ADC_IF_CH2FULL_Pos) +#define ADC_IF_CH3EOC_Pos 12 +#define ADC_IF_CH3EOC_Msk (0x01 << ADC_IF_CH3EOC_Pos) +#define ADC_IF_CH3OVF_Pos 13 +#define ADC_IF_CH3OVF_Msk (0x01 << ADC_IF_CH3OVF_Pos) +#define ADC_IF_CH3HFULL_Pos 14 +#define ADC_IF_CH3HFULL_Msk (0x01 << ADC_IF_CH3HFULL_Pos) +#define ADC_IF_CH3FULL_Pos 15 +#define ADC_IF_CH3FULL_Msk (0x01 << ADC_IF_CH3FULL_Pos) +#define ADC_IF_CH4EOC_Pos 16 +#define ADC_IF_CH4EOC_Msk (0x01 << ADC_IF_CH4EOC_Pos) +#define ADC_IF_CH4OVF_Pos 17 +#define ADC_IF_CH4OVF_Msk (0x01 << ADC_IF_CH4OVF_Pos) +#define ADC_IF_CH4HFULL_Pos 18 +#define ADC_IF_CH4HFULL_Msk (0x01 << ADC_IF_CH4HFULL_Pos) +#define ADC_IF_CH4FULL_Pos 19 +#define ADC_IF_CH4FULL_Msk (0x01 << ADC_IF_CH4FULL_Pos) +#define ADC_IF_CH5EOC_Pos 20 +#define ADC_IF_CH5EOC_Msk (0x01 << ADC_IF_CH5EOC_Pos) +#define ADC_IF_CH5OVF_Pos 21 +#define ADC_IF_CH5OVF_Msk (0x01 << ADC_IF_CH5OVF_Pos) +#define ADC_IF_CH5HFULL_Pos 22 +#define ADC_IF_CH5HFULL_Msk (0x01 << ADC_IF_CH5HFULL_Pos) +#define ADC_IF_CH5FULL_Pos 23 +#define ADC_IF_CH5FULL_Msk (0x01 << ADC_IF_CH5FULL_Pos) +#define ADC_IF_CH6EOC_Pos 24 +#define ADC_IF_CH6EOC_Msk (0x01 << ADC_IF_CH6EOC_Pos) +#define ADC_IF_CH6OVF_Pos 25 +#define ADC_IF_CH6OVF_Msk (0x01 << ADC_IF_CH6OVF_Pos) +#define ADC_IF_CH6HFULL_Pos 26 +#define ADC_IF_CH6HFULL_Msk (0x01 << ADC_IF_CH6HFULL_Pos) +#define ADC_IF_CH6FULL_Pos 27 +#define ADC_IF_CH6FULL_Msk (0x01 << ADC_IF_CH6FULL_Pos) +#define ADC_IF_CH7EOC_Pos 28 +#define ADC_IF_CH7EOC_Msk (0x01 << ADC_IF_CH7EOC_Pos) +#define ADC_IF_CH7OVF_Pos 29 +#define ADC_IF_CH7OVF_Msk (0x01 << ADC_IF_CH7OVF_Pos) +#define ADC_IF_CH7HFULL_Pos 30 +#define ADC_IF_CH7HFULL_Msk (0x01 << ADC_IF_CH7HFULL_Pos) +#define ADC_IF_CH7FULL_Pos 31 +#define ADC_IF_CH7FULL_Msk (0x01 << ADC_IF_CH7FULL_Pos) + +#define ADC_STAT_EOC_Pos 0 //写1清零 +#define ADC_STAT_EOC_Msk (0x01 << ADC_STAT_EOC_Pos) +#define ADC_STAT_OVF_Pos 1 //读数æ�®å¯„存器清除 +#define ADC_STAT_OVF_Msk (0x01 << ADC_STAT_OVF_Pos) +#define ADC_STAT_HFULL_Pos 2 +#define ADC_STAT_HFULL_Msk (0x01 << ADC_STAT_HFULL_Pos) +#define ADC_STAT_FULL_Pos 3 +#define ADC_STAT_FULL_Msk (0x01 << ADC_STAT_FULL_Pos) +#define ADC_STAT_EMPTY_Pos 4 +#define ADC_STAT_EMPTY_Msk (0x01 << ADC_STAT_EMPTY_Pos) + +#define ADC_CTRL1_RIN_Pos 4 //输入阻抗:0 无穷大 1 105K 2 90K 3 75K 4 60K 5 45K 6 30K 7 15K +#define ADC_CTRL1_RIN_Msk (0x07 << ADC_CTRL1_RIN_Pos) + +#define ADC_CTRL2_RESET_Pos 0 //数字电路å¤�ä½� +#define ADC_CTRL2_RESET_Msk (0x01 << ADC_CTRL2_RESET_Pos) +#define ADC_CTRL2_ADCEVCM_Pos 1 //ADC External VCM,ADC与PGA输出共模电平选择 +#define ADC_CTRL2_ADCEVCM_Msk (0x01 << ADC_CTRL2_ADCEVCM_Pos) +#define ADC_CTRL2_PGAIVCM_Pos 2 //PGA Internal VCM,PGA输入共模电平选择 +#define ADC_CTRL2_PGAIVCM_Msk (0x01 << ADC_CTRL2_PGAIVCM_Pos) +#define ADC_CTRL2_PGAGAIN_Pos 3 //0 25.1dB 1 21.6dB 2 11.1dB 3 3.5dB 4 0dB(1.8V) 5 -2.9dB 6 -5.3dB +#define ADC_CTRL2_PGAGAIN_Msk (0x07 << ADC_CTRL2_PGAGAIN_Pos) +#define ADC_CTRL2_REFPOUT_Pos 23 //1 ADC 内部 1.2V REFP电压输出到外部REFP引脚,用于测é‡�,或在需è¦�1.2V外部REFP时节çœ�æˆ�本 #define ADC_CTRL2_REFPOUT_Msk (0x01 << ADC_CTRL2_REFPOUT_Pos -#define ADC_CTRL2_CLKDIV_Pos 24 //时钟分频,å�ªåœ¨æ—¶é’Ÿæº�为HRC时有效 -#define ADC_CTRL2_CLKDIV_Msk (0x1F << ADC_CTRL2_CLKDIV_Pos) -#define ADC_CTRL2_PGAVCM_Pos 29 -#define ADC_CTRL2_PGAVCM_Msk (0x07u<< ADC_CTRL2_PGAVCM_Pos) - -#define ADC_CALIBSET_OFFSET_Pos 0 -#define ADC_CALIBSET_OFFSET_Msk (0x1FF<< ADC_CALIBSET_OFFSET_Pos) -#define ADC_CALIBSET_K_Pos 16 -#define ADC_CALIBSET_K_Msk (0x1FF<< ADC_CALIBSET_K_Pos) - -#define ADC_CALIBEN_OFFSET_Pos 0 -#define ADC_CALIBEN_OFFSET_Msk (0x01 << ADC_CALIBEN_OFFSET_Pos) -#define ADC_CALIBEN_K_Pos 1 -#define ADC_CALIBEN_K_Msk (0x01 << ADC_CALIBEN_K_Pos) - - - - -typedef struct { - __IO uint32_t MODE; //0 普通模å¼�,Aã€�B两路输出互相独立 - //1 互补模å¼�,Aã€�B两路输出都由PERAã€�HIGHA控制,B路输出与A路输出æž�性相å��,且DZAã€�DZB控制Aã€�B路输出上å�‡æ²¿æŽ¨è¿Ÿæ—¶é—´ - //2 å�•次模å¼�,å�Œæ™®é€šæ¨¡å¼�,但一个周期å�Žè‡ªåЍå�œæ­¢ - //3 对称模å¼�,Aã€�B两路输出互相独立,以两个计数周期产生一个波形输出周期,分辨率æ��å�‡ä¸€å€�ã€�频率é™�低一å€� - //4 对称互补模å¼�,对称模å¼�和互补模å¼�的综å�ˆ - - __IO uint32_t PERA; //[15:0] 周期 - - __IO uint32_t HIGHA; //[15:0] 高电平æŒ�ç»­æ—¶é•¿ - - __IO uint32_t DZA; //[9:0] 死区,å�³ä¸Šå�‡æ²¿æŽ¨è¿Ÿæ—¶é•¿ï¼Œå¿…é¡»å°�于HIGHA - - __IO uint32_t PERB; - - __IO uint32_t HIGHB; - - __IO uint32_t DZB; - - __IO uint32_t INIOUT; //Init Output level,åˆ�始输出电平 -} PWM_TypeDef; +#define ADC_CTRL2_CLKDIV_Pos 24 //时钟分频,å�ªåœ¨æ—¶é’Ÿæº�为HRC时有效 +#define ADC_CTRL2_CLKDIV_Msk (0x1F << ADC_CTRL2_CLKDIV_Pos) +#define ADC_CTRL2_PGAVCM_Pos 29 +#define ADC_CTRL2_PGAVCM_Msk (0x07u << ADC_CTRL2_PGAVCM_Pos) + +#define ADC_CALIBSET_OFFSET_Pos 0 +#define ADC_CALIBSET_OFFSET_Msk (0x1FF << ADC_CALIBSET_OFFSET_Pos) +#define ADC_CALIBSET_K_Pos 16 +#define ADC_CALIBSET_K_Msk (0x1FF << ADC_CALIBSET_K_Pos) + +#define ADC_CALIBEN_OFFSET_Pos 0 +#define ADC_CALIBEN_OFFSET_Msk (0x01 << ADC_CALIBEN_OFFSET_Pos) +#define ADC_CALIBEN_K_Pos 1 +#define ADC_CALIBEN_K_Msk (0x01 << ADC_CALIBEN_K_Pos) + +typedef struct +{ + __IO uint32_t MODE; //0 普通模å¼�,Aã€�B两路输出互相独立 + //1 互补模å¼�,Aã€�B两路输出都由PERAã€�HIGHA控制,B路输出与A路输出æž�性相å��,且DZAã€�DZB控制Aã€�B路输出上å�‡æ²¿æŽ¨è¿Ÿæ—¶é—´ + //2 å�•次模å¼�,å�Œæ™®é€šæ¨¡å¼�,但一个周期å�Žè‡ªåЍå�œæ­¢ + //3 对称模å¼�,Aã€�B两路输出互相独立,以两个计数周期产生一个波形输出周期,分辨率æ��å�‡ä¸€å€�ã€�频率é™�低一å€� + //4 对称互补模å¼�,对称模å¼�和互补模å¼�的综å�ˆ + __IO uint32_t PERA; //[15:0] 周期 + + __IO uint32_t HIGHA; //[15:0] 高电平æŒ�ç»­æ—¶é•¿ + + __IO uint32_t DZA; //[9:0] 死区,å�³ä¸Šå�‡æ²¿æŽ¨è¿Ÿæ—¶é•¿ï¼Œå¿…é¡»å°�于HIGHA + + __IO uint32_t PERB; + + __IO uint32_t HIGHB; + + __IO uint32_t DZB; + + __IO uint32_t INIOUT; //Init Output level,åˆ�始输出电平 +} PWM_TypeDef; -#define PWM_INIOUT_PWMA_Pos 0 -#define PWM_INIOUT_PWMA_Msk (0x01 << PWM_INIOUT_PWMA_Pos) -#define PWM_INIOUT_PWMB_Pos 1 -#define PWM_INIOUT_PWMB_Msk (0x01 << PWM_INIOUT_PWMB_Pos) +#define PWM_INIOUT_PWMA_Pos 0 +#define PWM_INIOUT_PWMA_Msk (0x01 << PWM_INIOUT_PWMA_Pos) +#define PWM_INIOUT_PWMB_Pos 1 +#define PWM_INIOUT_PWMB_Msk (0x01 << PWM_INIOUT_PWMB_Pos) +typedef struct +{ + __IO uint32_t FORCEH; -typedef struct { - __IO uint32_t FORCEH; - __IO uint32_t ADTRG0A; __IO uint32_t ADTRG0B; - + __IO uint32_t ADTRG1A; __IO uint32_t ADTRG1B; - + __IO uint32_t ADTRG2A; __IO uint32_t ADTRG2B; - + __IO uint32_t ADTRG3A; __IO uint32_t ADTRG3B; - + __IO uint32_t ADTRG4A; __IO uint32_t ADTRG4B; - + __IO uint32_t ADTRG5A; - __IO uint32_t ADTRG5B; - - uint32_t RESERVED[3]; - - __IO uint32_t HALT; //刹车控制 - - __IO uint32_t CHEN; - - __IO uint32_t IE; - - __IO uint32_t IF; - - __IO uint32_t IM; //Interrupt Mask - - __IO uint32_t IRS; //Interrupt Raw Stat + __IO uint32_t ADTRG5B; + + uint32_t RESERVED[3]; + + __IO uint32_t HALT; //刹车控制 + + __IO uint32_t CHEN; + + __IO uint32_t IE; + + __IO uint32_t IF; + + __IO uint32_t IM; //Interrupt Mask + + __IO uint32_t IRS; //Interrupt Raw Stat } PWMG_TypeDef; +#define PWMG_FORCEH_PWM0_Pos 0 +#define PWMG_FORCEH_PWM0_Msk (0x01 << PWMG_FORCEH_PWM0_Pos) +#define PWMG_FORCEH_PWM1_Pos 1 +#define PWMG_FORCEH_PWM1_Msk (0x01 << PWMG_FORCEH_PWM1_Pos) +#define PWMG_FORCEH_PWM2_Pos 2 +#define PWMG_FORCEH_PWM2_Msk (0x01 << PWMG_FORCEH_PWM2_Pos) +#define PWMG_FORCEH_PWM3_Pos 3 +#define PWMG_FORCEH_PWM3_Msk (0x01 << PWMG_FORCEH_PWM3_Pos) +#define PWMG_FORCEH_PWM4_Pos 4 +#define PWMG_FORCEH_PWM4_Msk (0x01 << PWMG_FORCEH_PWM4_Pos) +#define PWMG_FORCEH_PWM5_Pos 5 +#define PWMG_FORCEH_PWM5_Msk (0x01 << PWMG_FORCEH_PWM5_Pos) + +#define PWMG_ADTRG_VALUE_Pos 0 +#define PWMG_ADTRG_VALUE_Msk (0xFFFF << PWMG_ADTRG0A_VALUE_Pos) +#define PWMG_ADTRG_EVEN_Pos 16 //1 å�¶æ•°å‘¨æœŸç”Ÿæ•ˆ 0 奇数周期生效 +#define PWMG_ADTRG_EVEN_Msk (0x01 << PWMG_ADTRG0A_EVEN_Pos) +#define PWMG_ADTRG_EN_Pos 17 +#define PWMG_ADTRG_EN_Msk (0x01 << PWMG_ADTRG0A_EN_Pos) + +#define PWMG_HALT_EN_Pos 0 +#define PWMG_HALT_EN_Msk (0x01 << PWMG_HALT_EN_Pos) +#define PWMG_HALT_PWM0_Pos 1 +#define PWMG_HALT_PWM0_Msk (0x01 << PWMG_HALT_PWM0_Pos) +#define PWMG_HALT_PWM1_Pos 2 +#define PWMG_HALT_PWM1_Msk (0x01 << PWMG_HALT_PWM1_Pos) +#define PWMG_HALT_PWM2_Pos 3 +#define PWMG_HALT_PWM2_Msk (0x01 << PWMG_HALT_PWM2_Pos) +#define PWMG_HALT_PWM3_Pos 4 +#define PWMG_HALT_PWM3_Msk (0x01 << PWMG_HALT_PWM3_Pos) +#define PWMG_HALT_PWM4_Pos 5 +#define PWMG_HALT_PWM4_Msk (0x01 << PWMG_HALT_PWM4_Pos) +#define PWMG_HALT_PWM5_Pos 6 +#define PWMG_HALT_PWM5_Msk (0x01 << PWMG_HALT_PWM5_Pos) +#define PWMG_HALT_STOPCNT_Pos 7 //1 刹车时将PWM计数器清零,å�œæ­¢è®¡æ•° 0 刹车时,PWM计数器继续计数 +#define PWMG_HALT_STOPCNT_Msk (0x01 << PWMG_HALT_STOPCNT_Pos) +#define PWMG_HALT_INLVL_Pos 8 //1 刹车输入高电平有效 +#define PWMG_HALT_INLVL_Msk (0x01 << PWMG_HALT_INLVL_Pos) +#define PWMG_HALT_OUTLVL_Pos 9 //1 刹车过程中输出高电平 +#define PWMG_HALT_OUTLVL_Msk (0x01 << PWMG_HALT_OUTLVL_Pos) +#define PWMG_HALT_STAT_Pos 10 //1 正在刹车 +#define PWMG_HALT_STAT_Msk (0x01 << PWMG_HALT_STAT_Pos) + +#define PWMG_CHEN_PWM0A_Pos 0 +#define PWMG_CHEN_PWM0A_Msk (0x01 << PWMG_CHEN_PWM0A_Pos) +#define PWMG_CHEN_PWM0B_Pos 1 +#define PWMG_CHEN_PWM0B_Msk (0x01 << PWMG_CHEN_PWM0B_Pos) +#define PWMG_CHEN_PWM1A_Pos 2 +#define PWMG_CHEN_PWM1A_Msk (0x01 << PWMG_CHEN_PWM1A_Pos) +#define PWMG_CHEN_PWM1B_Pos 3 +#define PWMG_CHEN_PWM1B_Msk (0x01 << PWMG_CHEN_PWM1B_Pos) +#define PWMG_CHEN_PWM2A_Pos 4 +#define PWMG_CHEN_PWM2A_Msk (0x01 << PWMG_CHEN_PWM2A_Pos) +#define PWMG_CHEN_PWM2B_Pos 5 +#define PWMG_CHEN_PWM2B_Msk (0x01 << PWMG_CHEN_PWM2B_Pos) +#define PWMG_CHEN_PWM3A_Pos 6 +#define PWMG_CHEN_PWM3A_Msk (0x01 << PWMG_CHEN_PWM3A_Pos) +#define PWMG_CHEN_PWM3B_Pos 7 +#define PWMG_CHEN_PWM3B_Msk (0x01 << PWMG_CHEN_PWM3B_Pos) +#define PWMG_CHEN_PWM4A_Pos 8 +#define PWMG_CHEN_PWM4A_Msk (0x01 << PWMG_CHEN_PWM4A_Pos) +#define PWMG_CHEN_PWM4B_Pos 9 +#define PWMG_CHEN_PWM4B_Msk (0x01 << PWMG_CHEN_PWM4B_Pos) +#define PWMG_CHEN_PWM5A_Pos 10 +#define PWMG_CHEN_PWM5A_Msk (0x01 << PWMG_CHEN_PWM5A_Pos) +#define PWMG_CHEN_PWM5B_Pos 11 +#define PWMG_CHEN_PWM5B_Msk (0x01 << PWMG_CHEN_PWM5B_Pos) + +#define PWMG_IE_NEWP0A_Pos 0 +#define PWMG_IE_NEWP0A_Msk (0x01 << PWMG_IE_NEWP0A_Pos) +#define PWMG_IE_NEWP0B_Pos 1 +#define PWMG_IE_NEWP0B_Msk (0x01 << PWMG_IE_NEWP0B_Pos) +#define PWMG_IE_NEWP1A_Pos 2 +#define PWMG_IE_NEWP1A_Msk (0x01 << PWMG_IE_NEWP1A_Pos) +#define PWMG_IE_NEWP1B_Pos 3 +#define PWMG_IE_NEWP1B_Msk (0x01 << PWMG_IE_NEWP1B_Pos) +#define PWMG_IE_NEWP2A_Pos 4 +#define PWMG_IE_NEWP2A_Msk (0x01 << PWMG_IE_NEWP2A_Pos) +#define PWMG_IE_NEWP2B_Pos 5 +#define PWMG_IE_NEWP2B_Msk (0x01 << PWMG_IE_NEWP2B_Pos) +#define PWMG_IE_NEWP3A_Pos 6 +#define PWMG_IE_NEWP3A_Msk (0x01 << PWMG_IE_NEWP3A_Pos) +#define PWMG_IE_NEWP3B_Pos 7 +#define PWMG_IE_NEWP3B_Msk (0x01 << PWMG_IE_NEWP3B_Pos) +#define PWMG_IE_NEWP4A_Pos 8 +#define PWMG_IE_NEWP4A_Msk (0x01 << PWMG_IE_NEWP4A_Pos) +#define PWMG_IE_NEWP4B_Pos 9 +#define PWMG_IE_NEWP4B_Msk (0x01 << PWMG_IE_NEWP4B_Pos) +#define PWMG_IE_NEWP5A_Pos 10 +#define PWMG_IE_NEWP5A_Msk (0x01 << PWMG_IE_NEWP5A_Pos) +#define PWMG_IE_NEWP5B_Pos 11 +#define PWMG_IE_NEWP5B_Msk (0x01 << PWMG_IE_NEWP5B_Pos) +#define PWMG_IE_HEND0A_Pos 12 +#define PWMG_IE_HEND0A_Msk (0x01 << PWMG_IE_HEND0A_Pos) +#define PWMG_IE_HEND0B_Pos 13 +#define PWMG_IE_HEND0B_Msk (0x01 << PWMG_IE_HEND0B_Pos) +#define PWMG_IE_HEND1A_Pos 14 +#define PWMG_IE_HEND1A_Msk (0x01 << PWMG_IE_HEND1A_Pos) +#define PWMG_IE_HEND1B_Pos 15 +#define PWMG_IE_HEND1B_Msk (0x01 << PWMG_IE_HEND1B_Pos) +#define PWMG_IE_HEND2A_Pos 16 +#define PWMG_IE_HEND2A_Msk (0x01 << PWMG_IE_HEND2A_Pos) +#define PWMG_IE_HEND2B_Pos 17 +#define PWMG_IE_HEND2B_Msk (0x01 << PWMG_IE_HEND2B_Pos) +#define PWMG_IE_HEND3A_Pos 18 +#define PWMG_IE_HEND3A_Msk (0x01 << PWMG_IE_HEND3A_Pos) +#define PWMG_IE_HEND3B_Pos 19 +#define PWMG_IE_HEND3B_Msk (0x01 << PWMG_IE_HEND3B_Pos) +#define PWMG_IE_HEND4A_Pos 20 +#define PWMG_IE_HEND4A_Msk (0x01 << PWMG_IE_HEND4A_Pos) +#define PWMG_IE_HEND4B_Pos 21 +#define PWMG_IE_HEND4B_Msk (0x01 << PWMG_IE_HEND4B_Pos) +#define PWMG_IE_HEND5A_Pos 22 +#define PWMG_IE_HEND5A_Msk (0x01 << PWMG_IE_HEND5A_Pos) +#define PWMG_IE_HEND5B_Pos 23 +#define PWMG_IE_HEND5B_Msk (0x01 << PWMG_IE_HEND5B_Pos) +#define PWMG_IE_HALT_Pos 24 +#define PWMG_IE_HALT_Msk (0x01 << PWMG_IE_HALT_Pos) + +#define PWMG_IF_NEWP0A_Pos 0 +#define PWMG_IF_NEWP0A_Msk (0x01 << PWMG_IF_NEWP0A_Pos) +#define PWMG_IF_NEWP0B_Pos 1 +#define PWMG_IF_NEWP0B_Msk (0x01 << PWMG_IF_NEWP0B_Pos) +#define PWMG_IF_NEWP1A_Pos 2 +#define PWMG_IF_NEWP1A_Msk (0x01 << PWMG_IF_NEWP1A_Pos) +#define PWMG_IF_NEWP1B_Pos 3 +#define PWMG_IF_NEWP1B_Msk (0x01 << PWMG_IF_NEWP1B_Pos) +#define PWMG_IF_NEWP2A_Pos 4 +#define PWMG_IF_NEWP2A_Msk (0x01 << PWMG_IF_NEWP2A_Pos) +#define PWMG_IF_NEWP2B_Pos 5 +#define PWMG_IF_NEWP2B_Msk (0x01 << PWMG_IF_NEWP2B_Pos) +#define PWMG_IF_NEWP3A_Pos 6 +#define PWMG_IF_NEWP3A_Msk (0x01 << PWMG_IF_NEWP3A_Pos) +#define PWMG_IF_NEWP3B_Pos 7 +#define PWMG_IF_NEWP3B_Msk (0x01 << PWMG_IF_NEWP3B_Pos) +#define PWMG_IF_NEWP4A_Pos 8 +#define PWMG_IF_NEWP4A_Msk (0x01 << PWMG_IF_NEWP4A_Pos) +#define PWMG_IF_NEWP4B_Pos 9 +#define PWMG_IF_NEWP4B_Msk (0x01 << PWMG_IF_NEWP4B_Pos) +#define PWMG_IF_NEWP5A_Pos 10 +#define PWMG_IF_NEWP5A_Msk (0x01 << PWMG_IF_NEWP5A_Pos) +#define PWMG_IF_NEWP5B_Pos 11 +#define PWMG_IF_NEWP5B_Msk (0x01 << PWMG_IF_NEWP5B_Pos) +#define PWMG_IF_HEND0A_Pos 12 +#define PWMG_IF_HEND0A_Msk (0x01 << PWMG_IF_HEND0A_Pos) +#define PWMG_IF_HEND0B_Pos 13 +#define PWMG_IF_HEND0B_Msk (0x01 << PWMG_IF_HEND0B_Pos) +#define PWMG_IF_HEND1A_Pos 14 +#define PWMG_IF_HEND1A_Msk (0x01 << PWMG_IF_HEND1A_Pos) +#define PWMG_IF_HEND1B_Pos 15 +#define PWMG_IF_HEND1B_Msk (0x01 << PWMG_IF_HEND1B_Pos) +#define PWMG_IF_HEND2A_Pos 16 +#define PWMG_IF_HEND2A_Msk (0x01 << PWMG_IF_HEND2A_Pos) +#define PWMG_IF_HEND2B_Pos 17 +#define PWMG_IF_HEND2B_Msk (0x01 << PWMG_IF_HEND2B_Pos) +#define PWMG_IF_HEND3A_Pos 18 +#define PWMG_IF_HEND3A_Msk (0x01 << PWMG_IF_HEND3A_Pos) +#define PWMG_IF_HEND3B_Pos 19 +#define PWMG_IF_HEND3B_Msk (0x01 << PWMG_IF_HEND3B_Pos) +#define PWMG_IF_HEND4A_Pos 20 +#define PWMG_IF_HEND4A_Msk (0x01 << PWMG_IF_HEND4A_Pos) +#define PWMG_IF_HEND4B_Pos 21 +#define PWMG_IF_HEND4B_Msk (0x01 << PWMG_IF_HEND4B_Pos) +#define PWMG_IF_HEND5A_Pos 22 +#define PWMG_IF_HEND5A_Msk (0x01 << PWMG_IF_HEND5A_Pos) +#define PWMG_IF_HEND5B_Pos 23 +#define PWMG_IF_HEND5B_Msk (0x01 << PWMG_IF_HEND5B_Pos) +#define PWMG_IF_HALT_Pos 24 +#define PWMG_IF_HALT_Msk (0x01 << PWMG_IF_HALT_Pos) + +#define PWMG_IM_NEWP0A_Pos 0 //Interrupt Mask +#define PWMG_IM_NEWP0A_Msk (0x01 << PWMG_IM_NEWP0A_Pos) +#define PWMG_IM_NEWP0B_Pos 1 +#define PWMG_IM_NEWP0B_Msk (0x01 << PWMG_IM_NEWP0B_Pos) +#define PWMG_IM_NEWP1A_Pos 2 +#define PWMG_IM_NEWP1A_Msk (0x01 << PWMG_IM_NEWP1A_Pos) +#define PWMG_IM_NEWP1B_Pos 3 +#define PWMG_IM_NEWP1B_Msk (0x01 << PWMG_IM_NEWP1B_Pos) +#define PWMG_IM_NEWP2A_Pos 4 +#define PWMG_IM_NEWP2A_Msk (0x01 << PWMG_IM_NEWP2A_Pos) +#define PWMG_IM_NEWP2B_Pos 5 +#define PWMG_IM_NEWP2B_Msk (0x01 << PWMG_IM_NEWP2B_Pos) +#define PWMG_IM_NEWP3A_Pos 6 +#define PWMG_IM_NEWP3A_Msk (0x01 << PWMG_IM_NEWP3A_Pos) +#define PWMG_IM_NEWP3B_Pos 7 +#define PWMG_IM_NEWP3B_Msk (0x01 << PWMG_IM_NEWP3B_Pos) +#define PWMG_IM_NEWP4A_Pos 8 +#define PWMG_IM_NEWP4A_Msk (0x01 << PWMG_IM_NEWP4A_Pos) +#define PWMG_IM_NEWP4B_Pos 9 +#define PWMG_IM_NEWP4B_Msk (0x01 << PWMG_IM_NEWP4B_Pos) +#define PWMG_IM_NEWP5A_Pos 10 +#define PWMG_IM_NEWP5A_Msk (0x01 << PWMG_IM_NEWP5A_Pos) +#define PWMG_IM_NEWP5B_Pos 11 +#define PWMG_IM_NEWP5B_Msk (0x01 << PWMG_IM_NEWP5B_Pos) +#define PWMG_IM_HEND0A_Pos 12 +#define PWMG_IM_HEND0A_Msk (0x01 << PWMG_IM_HEND0A_Pos) +#define PWMG_IM_HEND0B_Pos 13 +#define PWMG_IM_HEND0B_Msk (0x01 << PWMG_IM_HEND0B_Pos) +#define PWMG_IM_HEND1A_Pos 14 +#define PWMG_IM_HEND1A_Msk (0x01 << PWMG_IM_HEND1A_Pos) +#define PWMG_IM_HEND1B_Pos 15 +#define PWMG_IM_HEND1B_Msk (0x01 << PWMG_IM_HEND1B_Pos) +#define PWMG_IM_HEND2A_Pos 16 +#define PWMG_IM_HEND2A_Msk (0x01 << PWMG_IM_HEND2A_Pos) +#define PWMG_IM_HEND2B_Pos 17 +#define PWMG_IM_HEND2B_Msk (0x01 << PWMG_IM_HEND2B_Pos) +#define PWMG_IM_HEND3A_Pos 18 +#define PWMG_IM_HEND3A_Msk (0x01 << PWMG_IM_HEND3A_Pos) +#define PWMG_IM_HEND3B_Pos 19 +#define PWMG_IM_HEND3B_Msk (0x01 << PWMG_IM_HEND3B_Pos) +#define PWMG_IM_HEND4A_Pos 20 +#define PWMG_IM_HEND4A_Msk (0x01 << PWMG_IM_HEND4A_Pos) +#define PWMG_IM_HEND4B_Pos 21 +#define PWMG_IM_HEND4B_Msk (0x01 << PWMG_IM_HEND4B_Pos) +#define PWMG_IM_HEND5A_Pos 22 +#define PWMG_IM_HEND5A_Msk (0x01 << PWMG_IM_HEND5A_Pos) +#define PWMG_IM_HEND5B_Pos 23 +#define PWMG_IM_HEND5B_Msk (0x01 << PWMG_IM_HEND5B_Pos) +#define PWMG_IM_HALT_Pos 24 +#define PWMG_IM_HALT_Msk (0x01 << PWMG_IM_HALT_Pos) + +#define PWMG_IRS_NEWP0A_Pos 0 //Interrupt Raw State +#define PWMG_IRS_NEWP0A_Msk (0x01 << PWMG_IRS_NEWP0A_Pos) +#define PWMG_IRS_NEWP0B_Pos 1 +#define PWMG_IRS_NEWP0B_Msk (0x01 << PWMG_IRS_NEWP0B_Pos) +#define PWMG_IRS_NEWP1A_Pos 2 +#define PWMG_IRS_NEWP1A_Msk (0x01 << PWMG_IRS_NEWP1A_Pos) +#define PWMG_IRS_NEWP1B_Pos 3 +#define PWMG_IRS_NEWP1B_Msk (0x01 << PWMG_IRS_NEWP1B_Pos) +#define PWMG_IRS_NEWP2A_Pos 4 +#define PWMG_IRS_NEWP2A_Msk (0x01 << PWMG_IRS_NEWP2A_Pos) +#define PWMG_IRS_NEWP2B_Pos 5 +#define PWMG_IRS_NEWP2B_Msk (0x01 << PWMG_IRS_NEWP2B_Pos) +#define PWMG_IRS_NEWP3A_Pos 6 +#define PWMG_IRS_NEWP3A_Msk (0x01 << PWMG_IRS_NEWP3A_Pos) +#define PWMG_IRS_NEWP3B_Pos 7 +#define PWMG_IRS_NEWP3B_Msk (0x01 << PWMG_IRS_NEWP3B_Pos) +#define PWMG_IRS_NEWP4A_Pos 8 +#define PWMG_IRS_NEWP4A_Msk (0x01 << PWMG_IRS_NEWP4A_Pos) +#define PWMG_IRS_NEWP4B_Pos 9 +#define PWMG_IRS_NEWP4B_Msk (0x01 << PWMG_IRS_NEWP4B_Pos) +#define PWMG_IRS_NEWP5A_Pos 10 +#define PWMG_IRS_NEWP5A_Msk (0x01 << PWMG_IRS_NEWP5A_Pos) +#define PWMG_IRS_NEWP5B_Pos 11 +#define PWMG_IRS_NEWP5B_Msk (0x01 << PWMG_IRS_NEWP5B_Pos) +#define PWMG_IRS_HEND0A_Pos 12 +#define PWMG_IRS_HEND0A_Msk (0x01 << PWMG_IRS_HEND0A_Pos) +#define PWMG_IRS_HEND0B_Pos 13 +#define PWMG_IRS_HEND0B_Msk (0x01 << PWMG_IRS_HEND0B_Pos) +#define PWMG_IRS_HEND1A_Pos 14 +#define PWMG_IRS_HEND1A_Msk (0x01 << PWMG_IRS_HEND1A_Pos) +#define PWMG_IRS_HEND1B_Pos 15 +#define PWMG_IRS_HEND1B_Msk (0x01 << PWMG_IRS_HEND1B_Pos) +#define PWMG_IRS_HEND2A_Pos 16 +#define PWMG_IRS_HEND2A_Msk (0x01 << PWMG_IRS_HEND2A_Pos) +#define PWMG_IRS_HEND2B_Pos 17 +#define PWMG_IRS_HEND2B_Msk (0x01 << PWMG_IRS_HEND2B_Pos) +#define PWMG_IRS_HEND3A_Pos 18 +#define PWMG_IRS_HEND3A_Msk (0x01 << PWMG_IRS_HEND3A_Pos) +#define PWMG_IRS_HEND3B_Pos 19 +#define PWMG_IRS_HEND3B_Msk (0x01 << PWMG_IRS_HEND3B_Pos) +#define PWMG_IRS_HEND4A_Pos 20 +#define PWMG_IRS_HEND4A_Msk (0x01 << PWMG_IRS_HEND4A_Pos) +#define PWMG_IRS_HEND4B_Pos 21 +#define PWMG_IRS_HEND4B_Msk (0x01 << PWMG_IRS_HEND4B_Pos) +#define PWMG_IRS_HEND5A_Pos 22 +#define PWMG_IRS_HEND5A_Msk (0x01 << PWMG_IRS_HEND5A_Pos) +#define PWMG_IRS_HEND5B_Pos 23 +#define PWMG_IRS_HEND5B_Msk (0x01 << PWMG_IRS_HEND5B_Pos) +#define PWMG_IRS_HALT_Pos 24 +#define PWMG_IRS_HALT_Msk (0x01 << PWMG_IRS_HALT_Pos) + +typedef struct +{ + __IO uint32_t EN; //[0] ENABLE + + __IO uint32_t IE; //å�ªæœ‰ä¸º1时,IF[CHx]在DMA传输结æ�Ÿæ—¶æ‰�能å�˜ä¸º1,å�¦åˆ™å°†ä¸€ç›´ä¿�æŒ�在0 + + __IO uint32_t IM; //当为1时,å�³ä½¿IF[CHx]为1,dma_int也ä¸�会因此å�˜1 + + __IO uint32_t IF; //写1清零 + + uint32_t RESERVED[12]; + + struct + { + __IO uint32_t CR; + + __IO uint32_t AM; //Adress Mode + + __IO uint32_t SRC; + + __IO uint32_t SRCSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t SRCSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t SRCSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t SRCSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t DST; + + __IO uint32_t DSTSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t DSTSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t DSTSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 + + __IO uint32_t DSTSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 -#define PWMG_FORCEH_PWM0_Pos 0 -#define PWMG_FORCEH_PWM0_Msk (0x01 << PWMG_FORCEH_PWM0_Pos) -#define PWMG_FORCEH_PWM1_Pos 1 -#define PWMG_FORCEH_PWM1_Msk (0x01 << PWMG_FORCEH_PWM1_Pos) -#define PWMG_FORCEH_PWM2_Pos 2 -#define PWMG_FORCEH_PWM2_Msk (0x01 << PWMG_FORCEH_PWM2_Pos) -#define PWMG_FORCEH_PWM3_Pos 3 -#define PWMG_FORCEH_PWM3_Msk (0x01 << PWMG_FORCEH_PWM3_Pos) -#define PWMG_FORCEH_PWM4_Pos 4 -#define PWMG_FORCEH_PWM4_Msk (0x01 << PWMG_FORCEH_PWM4_Pos) -#define PWMG_FORCEH_PWM5_Pos 5 -#define PWMG_FORCEH_PWM5_Msk (0x01 << PWMG_FORCEH_PWM5_Pos) - -#define PWMG_ADTRG_VALUE_Pos 0 -#define PWMG_ADTRG_VALUE_Msk (0xFFFF << PWMG_ADTRG0A_VALUE_Pos) -#define PWMG_ADTRG_EVEN_Pos 16 //1 å�¶æ•°å‘¨æœŸç”Ÿæ•ˆ 0 奇数周期生效 -#define PWMG_ADTRG_EVEN_Msk (0x01 << PWMG_ADTRG0A_EVEN_Pos) -#define PWMG_ADTRG_EN_Pos 17 -#define PWMG_ADTRG_EN_Msk (0x01 << PWMG_ADTRG0A_EN_Pos) - -#define PWMG_HALT_EN_Pos 0 -#define PWMG_HALT_EN_Msk (0x01 << PWMG_HALT_EN_Pos) -#define PWMG_HALT_PWM0_Pos 1 -#define PWMG_HALT_PWM0_Msk (0x01 << PWMG_HALT_PWM0_Pos) -#define PWMG_HALT_PWM1_Pos 2 -#define PWMG_HALT_PWM1_Msk (0x01 << PWMG_HALT_PWM1_Pos) -#define PWMG_HALT_PWM2_Pos 3 -#define PWMG_HALT_PWM2_Msk (0x01 << PWMG_HALT_PWM2_Pos) -#define PWMG_HALT_PWM3_Pos 4 -#define PWMG_HALT_PWM3_Msk (0x01 << PWMG_HALT_PWM3_Pos) -#define PWMG_HALT_PWM4_Pos 5 -#define PWMG_HALT_PWM4_Msk (0x01 << PWMG_HALT_PWM4_Pos) -#define PWMG_HALT_PWM5_Pos 6 -#define PWMG_HALT_PWM5_Msk (0x01 << PWMG_HALT_PWM5_Pos) -#define PWMG_HALT_STOPCNT_Pos 7 //1 刹车时将PWM计数器清零,å�œæ­¢è®¡æ•° 0 刹车时,PWM计数器继续计数 -#define PWMG_HALT_STOPCNT_Msk (0x01 << PWMG_HALT_STOPCNT_Pos) -#define PWMG_HALT_INLVL_Pos 8 //1 刹车输入高电平有效 -#define PWMG_HALT_INLVL_Msk (0x01 << PWMG_HALT_INLVL_Pos) -#define PWMG_HALT_OUTLVL_Pos 9 //1 刹车过程中输出高电平 -#define PWMG_HALT_OUTLVL_Msk (0x01 << PWMG_HALT_OUTLVL_Pos) -#define PWMG_HALT_STAT_Pos 10 //1 正在刹车 -#define PWMG_HALT_STAT_Msk (0x01 << PWMG_HALT_STAT_Pos) - -#define PWMG_CHEN_PWM0A_Pos 0 -#define PWMG_CHEN_PWM0A_Msk (0x01 << PWMG_CHEN_PWM0A_Pos) -#define PWMG_CHEN_PWM0B_Pos 1 -#define PWMG_CHEN_PWM0B_Msk (0x01 << PWMG_CHEN_PWM0B_Pos) -#define PWMG_CHEN_PWM1A_Pos 2 -#define PWMG_CHEN_PWM1A_Msk (0x01 << PWMG_CHEN_PWM1A_Pos) -#define PWMG_CHEN_PWM1B_Pos 3 -#define PWMG_CHEN_PWM1B_Msk (0x01 << PWMG_CHEN_PWM1B_Pos) -#define PWMG_CHEN_PWM2A_Pos 4 -#define PWMG_CHEN_PWM2A_Msk (0x01 << PWMG_CHEN_PWM2A_Pos) -#define PWMG_CHEN_PWM2B_Pos 5 -#define PWMG_CHEN_PWM2B_Msk (0x01 << PWMG_CHEN_PWM2B_Pos) -#define PWMG_CHEN_PWM3A_Pos 6 -#define PWMG_CHEN_PWM3A_Msk (0x01 << PWMG_CHEN_PWM3A_Pos) -#define PWMG_CHEN_PWM3B_Pos 7 -#define PWMG_CHEN_PWM3B_Msk (0x01 << PWMG_CHEN_PWM3B_Pos) -#define PWMG_CHEN_PWM4A_Pos 8 -#define PWMG_CHEN_PWM4A_Msk (0x01 << PWMG_CHEN_PWM4A_Pos) -#define PWMG_CHEN_PWM4B_Pos 9 -#define PWMG_CHEN_PWM4B_Msk (0x01 << PWMG_CHEN_PWM4B_Pos) -#define PWMG_CHEN_PWM5A_Pos 10 -#define PWMG_CHEN_PWM5A_Msk (0x01 << PWMG_CHEN_PWM5A_Pos) -#define PWMG_CHEN_PWM5B_Pos 11 -#define PWMG_CHEN_PWM5B_Msk (0x01 << PWMG_CHEN_PWM5B_Pos) - - -#define PWMG_IE_NEWP0A_Pos 0 -#define PWMG_IE_NEWP0A_Msk (0x01 << PWMG_IE_NEWP0A_Pos) -#define PWMG_IE_NEWP0B_Pos 1 -#define PWMG_IE_NEWP0B_Msk (0x01 << PWMG_IE_NEWP0B_Pos) -#define PWMG_IE_NEWP1A_Pos 2 -#define PWMG_IE_NEWP1A_Msk (0x01 << PWMG_IE_NEWP1A_Pos) -#define PWMG_IE_NEWP1B_Pos 3 -#define PWMG_IE_NEWP1B_Msk (0x01 << PWMG_IE_NEWP1B_Pos) -#define PWMG_IE_NEWP2A_Pos 4 -#define PWMG_IE_NEWP2A_Msk (0x01 << PWMG_IE_NEWP2A_Pos) -#define PWMG_IE_NEWP2B_Pos 5 -#define PWMG_IE_NEWP2B_Msk (0x01 << PWMG_IE_NEWP2B_Pos) -#define PWMG_IE_NEWP3A_Pos 6 -#define PWMG_IE_NEWP3A_Msk (0x01 << PWMG_IE_NEWP3A_Pos) -#define PWMG_IE_NEWP3B_Pos 7 -#define PWMG_IE_NEWP3B_Msk (0x01 << PWMG_IE_NEWP3B_Pos) -#define PWMG_IE_NEWP4A_Pos 8 -#define PWMG_IE_NEWP4A_Msk (0x01 << PWMG_IE_NEWP4A_Pos) -#define PWMG_IE_NEWP4B_Pos 9 -#define PWMG_IE_NEWP4B_Msk (0x01 << PWMG_IE_NEWP4B_Pos) -#define PWMG_IE_NEWP5A_Pos 10 -#define PWMG_IE_NEWP5A_Msk (0x01 << PWMG_IE_NEWP5A_Pos) -#define PWMG_IE_NEWP5B_Pos 11 -#define PWMG_IE_NEWP5B_Msk (0x01 << PWMG_IE_NEWP5B_Pos) -#define PWMG_IE_HEND0A_Pos 12 -#define PWMG_IE_HEND0A_Msk (0x01 << PWMG_IE_HEND0A_Pos) -#define PWMG_IE_HEND0B_Pos 13 -#define PWMG_IE_HEND0B_Msk (0x01 << PWMG_IE_HEND0B_Pos) -#define PWMG_IE_HEND1A_Pos 14 -#define PWMG_IE_HEND1A_Msk (0x01 << PWMG_IE_HEND1A_Pos) -#define PWMG_IE_HEND1B_Pos 15 -#define PWMG_IE_HEND1B_Msk (0x01 << PWMG_IE_HEND1B_Pos) -#define PWMG_IE_HEND2A_Pos 16 -#define PWMG_IE_HEND2A_Msk (0x01 << PWMG_IE_HEND2A_Pos) -#define PWMG_IE_HEND2B_Pos 17 -#define PWMG_IE_HEND2B_Msk (0x01 << PWMG_IE_HEND2B_Pos) -#define PWMG_IE_HEND3A_Pos 18 -#define PWMG_IE_HEND3A_Msk (0x01 << PWMG_IE_HEND3A_Pos) -#define PWMG_IE_HEND3B_Pos 19 -#define PWMG_IE_HEND3B_Msk (0x01 << PWMG_IE_HEND3B_Pos) -#define PWMG_IE_HEND4A_Pos 20 -#define PWMG_IE_HEND4A_Msk (0x01 << PWMG_IE_HEND4A_Pos) -#define PWMG_IE_HEND4B_Pos 21 -#define PWMG_IE_HEND4B_Msk (0x01 << PWMG_IE_HEND4B_Pos) -#define PWMG_IE_HEND5A_Pos 22 -#define PWMG_IE_HEND5A_Msk (0x01 << PWMG_IE_HEND5A_Pos) -#define PWMG_IE_HEND5B_Pos 23 -#define PWMG_IE_HEND5B_Msk (0x01 << PWMG_IE_HEND5B_Pos) -#define PWMG_IE_HALT_Pos 24 -#define PWMG_IE_HALT_Msk (0x01 << PWMG_IE_HALT_Pos) - -#define PWMG_IF_NEWP0A_Pos 0 -#define PWMG_IF_NEWP0A_Msk (0x01 << PWMG_IF_NEWP0A_Pos) -#define PWMG_IF_NEWP0B_Pos 1 -#define PWMG_IF_NEWP0B_Msk (0x01 << PWMG_IF_NEWP0B_Pos) -#define PWMG_IF_NEWP1A_Pos 2 -#define PWMG_IF_NEWP1A_Msk (0x01 << PWMG_IF_NEWP1A_Pos) -#define PWMG_IF_NEWP1B_Pos 3 -#define PWMG_IF_NEWP1B_Msk (0x01 << PWMG_IF_NEWP1B_Pos) -#define PWMG_IF_NEWP2A_Pos 4 -#define PWMG_IF_NEWP2A_Msk (0x01 << PWMG_IF_NEWP2A_Pos) -#define PWMG_IF_NEWP2B_Pos 5 -#define PWMG_IF_NEWP2B_Msk (0x01 << PWMG_IF_NEWP2B_Pos) -#define PWMG_IF_NEWP3A_Pos 6 -#define PWMG_IF_NEWP3A_Msk (0x01 << PWMG_IF_NEWP3A_Pos) -#define PWMG_IF_NEWP3B_Pos 7 -#define PWMG_IF_NEWP3B_Msk (0x01 << PWMG_IF_NEWP3B_Pos) -#define PWMG_IF_NEWP4A_Pos 8 -#define PWMG_IF_NEWP4A_Msk (0x01 << PWMG_IF_NEWP4A_Pos) -#define PWMG_IF_NEWP4B_Pos 9 -#define PWMG_IF_NEWP4B_Msk (0x01 << PWMG_IF_NEWP4B_Pos) -#define PWMG_IF_NEWP5A_Pos 10 -#define PWMG_IF_NEWP5A_Msk (0x01 << PWMG_IF_NEWP5A_Pos) -#define PWMG_IF_NEWP5B_Pos 11 -#define PWMG_IF_NEWP5B_Msk (0x01 << PWMG_IF_NEWP5B_Pos) -#define PWMG_IF_HEND0A_Pos 12 -#define PWMG_IF_HEND0A_Msk (0x01 << PWMG_IF_HEND0A_Pos) -#define PWMG_IF_HEND0B_Pos 13 -#define PWMG_IF_HEND0B_Msk (0x01 << PWMG_IF_HEND0B_Pos) -#define PWMG_IF_HEND1A_Pos 14 -#define PWMG_IF_HEND1A_Msk (0x01 << PWMG_IF_HEND1A_Pos) -#define PWMG_IF_HEND1B_Pos 15 -#define PWMG_IF_HEND1B_Msk (0x01 << PWMG_IF_HEND1B_Pos) -#define PWMG_IF_HEND2A_Pos 16 -#define PWMG_IF_HEND2A_Msk (0x01 << PWMG_IF_HEND2A_Pos) -#define PWMG_IF_HEND2B_Pos 17 -#define PWMG_IF_HEND2B_Msk (0x01 << PWMG_IF_HEND2B_Pos) -#define PWMG_IF_HEND3A_Pos 18 -#define PWMG_IF_HEND3A_Msk (0x01 << PWMG_IF_HEND3A_Pos) -#define PWMG_IF_HEND3B_Pos 19 -#define PWMG_IF_HEND3B_Msk (0x01 << PWMG_IF_HEND3B_Pos) -#define PWMG_IF_HEND4A_Pos 20 -#define PWMG_IF_HEND4A_Msk (0x01 << PWMG_IF_HEND4A_Pos) -#define PWMG_IF_HEND4B_Pos 21 -#define PWMG_IF_HEND4B_Msk (0x01 << PWMG_IF_HEND4B_Pos) -#define PWMG_IF_HEND5A_Pos 22 -#define PWMG_IF_HEND5A_Msk (0x01 << PWMG_IF_HEND5A_Pos) -#define PWMG_IF_HEND5B_Pos 23 -#define PWMG_IF_HEND5B_Msk (0x01 << PWMG_IF_HEND5B_Pos) -#define PWMG_IF_HALT_Pos 24 -#define PWMG_IF_HALT_Msk (0x01 << PWMG_IF_HALT_Pos) - -#define PWMG_IM_NEWP0A_Pos 0 //Interrupt Mask -#define PWMG_IM_NEWP0A_Msk (0x01 << PWMG_IM_NEWP0A_Pos) -#define PWMG_IM_NEWP0B_Pos 1 -#define PWMG_IM_NEWP0B_Msk (0x01 << PWMG_IM_NEWP0B_Pos) -#define PWMG_IM_NEWP1A_Pos 2 -#define PWMG_IM_NEWP1A_Msk (0x01 << PWMG_IM_NEWP1A_Pos) -#define PWMG_IM_NEWP1B_Pos 3 -#define PWMG_IM_NEWP1B_Msk (0x01 << PWMG_IM_NEWP1B_Pos) -#define PWMG_IM_NEWP2A_Pos 4 -#define PWMG_IM_NEWP2A_Msk (0x01 << PWMG_IM_NEWP2A_Pos) -#define PWMG_IM_NEWP2B_Pos 5 -#define PWMG_IM_NEWP2B_Msk (0x01 << PWMG_IM_NEWP2B_Pos) -#define PWMG_IM_NEWP3A_Pos 6 -#define PWMG_IM_NEWP3A_Msk (0x01 << PWMG_IM_NEWP3A_Pos) -#define PWMG_IM_NEWP3B_Pos 7 -#define PWMG_IM_NEWP3B_Msk (0x01 << PWMG_IM_NEWP3B_Pos) -#define PWMG_IM_NEWP4A_Pos 8 -#define PWMG_IM_NEWP4A_Msk (0x01 << PWMG_IM_NEWP4A_Pos) -#define PWMG_IM_NEWP4B_Pos 9 -#define PWMG_IM_NEWP4B_Msk (0x01 << PWMG_IM_NEWP4B_Pos) -#define PWMG_IM_NEWP5A_Pos 10 -#define PWMG_IM_NEWP5A_Msk (0x01 << PWMG_IM_NEWP5A_Pos) -#define PWMG_IM_NEWP5B_Pos 11 -#define PWMG_IM_NEWP5B_Msk (0x01 << PWMG_IM_NEWP5B_Pos) -#define PWMG_IM_HEND0A_Pos 12 -#define PWMG_IM_HEND0A_Msk (0x01 << PWMG_IM_HEND0A_Pos) -#define PWMG_IM_HEND0B_Pos 13 -#define PWMG_IM_HEND0B_Msk (0x01 << PWMG_IM_HEND0B_Pos) -#define PWMG_IM_HEND1A_Pos 14 -#define PWMG_IM_HEND1A_Msk (0x01 << PWMG_IM_HEND1A_Pos) -#define PWMG_IM_HEND1B_Pos 15 -#define PWMG_IM_HEND1B_Msk (0x01 << PWMG_IM_HEND1B_Pos) -#define PWMG_IM_HEND2A_Pos 16 -#define PWMG_IM_HEND2A_Msk (0x01 << PWMG_IM_HEND2A_Pos) -#define PWMG_IM_HEND2B_Pos 17 -#define PWMG_IM_HEND2B_Msk (0x01 << PWMG_IM_HEND2B_Pos) -#define PWMG_IM_HEND3A_Pos 18 -#define PWMG_IM_HEND3A_Msk (0x01 << PWMG_IM_HEND3A_Pos) -#define PWMG_IM_HEND3B_Pos 19 -#define PWMG_IM_HEND3B_Msk (0x01 << PWMG_IM_HEND3B_Pos) -#define PWMG_IM_HEND4A_Pos 20 -#define PWMG_IM_HEND4A_Msk (0x01 << PWMG_IM_HEND4A_Pos) -#define PWMG_IM_HEND4B_Pos 21 -#define PWMG_IM_HEND4B_Msk (0x01 << PWMG_IM_HEND4B_Pos) -#define PWMG_IM_HEND5A_Pos 22 -#define PWMG_IM_HEND5A_Msk (0x01 << PWMG_IM_HEND5A_Pos) -#define PWMG_IM_HEND5B_Pos 23 -#define PWMG_IM_HEND5B_Msk (0x01 << PWMG_IM_HEND5B_Pos) -#define PWMG_IM_HALT_Pos 24 -#define PWMG_IM_HALT_Msk (0x01 << PWMG_IM_HALT_Pos) - -#define PWMG_IRS_NEWP0A_Pos 0 //Interrupt Raw State -#define PWMG_IRS_NEWP0A_Msk (0x01 << PWMG_IRS_NEWP0A_Pos) -#define PWMG_IRS_NEWP0B_Pos 1 -#define PWMG_IRS_NEWP0B_Msk (0x01 << PWMG_IRS_NEWP0B_Pos) -#define PWMG_IRS_NEWP1A_Pos 2 -#define PWMG_IRS_NEWP1A_Msk (0x01 << PWMG_IRS_NEWP1A_Pos) -#define PWMG_IRS_NEWP1B_Pos 3 -#define PWMG_IRS_NEWP1B_Msk (0x01 << PWMG_IRS_NEWP1B_Pos) -#define PWMG_IRS_NEWP2A_Pos 4 -#define PWMG_IRS_NEWP2A_Msk (0x01 << PWMG_IRS_NEWP2A_Pos) -#define PWMG_IRS_NEWP2B_Pos 5 -#define PWMG_IRS_NEWP2B_Msk (0x01 << PWMG_IRS_NEWP2B_Pos) -#define PWMG_IRS_NEWP3A_Pos 6 -#define PWMG_IRS_NEWP3A_Msk (0x01 << PWMG_IRS_NEWP3A_Pos) -#define PWMG_IRS_NEWP3B_Pos 7 -#define PWMG_IRS_NEWP3B_Msk (0x01 << PWMG_IRS_NEWP3B_Pos) -#define PWMG_IRS_NEWP4A_Pos 8 -#define PWMG_IRS_NEWP4A_Msk (0x01 << PWMG_IRS_NEWP4A_Pos) -#define PWMG_IRS_NEWP4B_Pos 9 -#define PWMG_IRS_NEWP4B_Msk (0x01 << PWMG_IRS_NEWP4B_Pos) -#define PWMG_IRS_NEWP5A_Pos 10 -#define PWMG_IRS_NEWP5A_Msk (0x01 << PWMG_IRS_NEWP5A_Pos) -#define PWMG_IRS_NEWP5B_Pos 11 -#define PWMG_IRS_NEWP5B_Msk (0x01 << PWMG_IRS_NEWP5B_Pos) -#define PWMG_IRS_HEND0A_Pos 12 -#define PWMG_IRS_HEND0A_Msk (0x01 << PWMG_IRS_HEND0A_Pos) -#define PWMG_IRS_HEND0B_Pos 13 -#define PWMG_IRS_HEND0B_Msk (0x01 << PWMG_IRS_HEND0B_Pos) -#define PWMG_IRS_HEND1A_Pos 14 -#define PWMG_IRS_HEND1A_Msk (0x01 << PWMG_IRS_HEND1A_Pos) -#define PWMG_IRS_HEND1B_Pos 15 -#define PWMG_IRS_HEND1B_Msk (0x01 << PWMG_IRS_HEND1B_Pos) -#define PWMG_IRS_HEND2A_Pos 16 -#define PWMG_IRS_HEND2A_Msk (0x01 << PWMG_IRS_HEND2A_Pos) -#define PWMG_IRS_HEND2B_Pos 17 -#define PWMG_IRS_HEND2B_Msk (0x01 << PWMG_IRS_HEND2B_Pos) -#define PWMG_IRS_HEND3A_Pos 18 -#define PWMG_IRS_HEND3A_Msk (0x01 << PWMG_IRS_HEND3A_Pos) -#define PWMG_IRS_HEND3B_Pos 19 -#define PWMG_IRS_HEND3B_Msk (0x01 << PWMG_IRS_HEND3B_Pos) -#define PWMG_IRS_HEND4A_Pos 20 -#define PWMG_IRS_HEND4A_Msk (0x01 << PWMG_IRS_HEND4A_Pos) -#define PWMG_IRS_HEND4B_Pos 21 -#define PWMG_IRS_HEND4B_Msk (0x01 << PWMG_IRS_HEND4B_Pos) -#define PWMG_IRS_HEND5A_Pos 22 -#define PWMG_IRS_HEND5A_Msk (0x01 << PWMG_IRS_HEND5A_Pos) -#define PWMG_IRS_HEND5B_Pos 23 -#define PWMG_IRS_HEND5B_Msk (0x01 << PWMG_IRS_HEND5B_Pos) -#define PWMG_IRS_HALT_Pos 24 -#define PWMG_IRS_HALT_Msk (0x01 << PWMG_IRS_HALT_Pos) - - - - -typedef struct { - __IO uint32_t EN; //[0] ENABLE - - __IO uint32_t IE; //å�ªæœ‰ä¸º1时,IF[CHx]在DMA传输结æ�Ÿæ—¶æ‰�能å�˜ä¸º1,å�¦åˆ™å°†ä¸€ç›´ä¿�æŒ�在0 - - __IO uint32_t IM; //当为1时,å�³ä½¿IF[CHx]为1,dma_int也ä¸�会因此å�˜1 - - __IO uint32_t IF; //写1清零 - - uint32_t RESERVED[12]; - - struct { - __IO uint32_t CR; - - __IO uint32_t AM; //Adress Mode - - __IO uint32_t SRC; - - __IO uint32_t SRCSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t SRCSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DST; - - __IO uint32_t DSTSGADDR1; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGADDR2; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGADDR3; //å�ªåœ¨Scatter Gather模å¼�下使用 - - __IO uint32_t DSTSGLEN; //å�ªåœ¨Scatter Gather模å¼�下使用 - - uint32_t RESERVED[4]; - } CH[3]; + uint32_t RESERVED[4]; + } CH[3]; } DMA_TypeDef; +#define DMA_IE_CH0_Pos 0 +#define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos) +#define DMA_IE_CH1_Pos 1 +#define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos) +#define DMA_IE_CH2_Pos 2 +#define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos) +#define DMA_IE_CH3_Pos 3 +#define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos) +#define DMA_IE_CH4_Pos 4 +#define DMA_IE_CH4_Msk (0x01 << DMA_IE_CH4_Pos) +#define DMA_IE_CH5_Pos 5 +#define DMA_IE_CH5_Msk (0x01 << DMA_IE_CH5_Pos) +#define DMA_IE_CH6_Pos 6 +#define DMA_IE_CH6_Msk (0x01 << DMA_IE_CH6_Pos) +#define DMA_IE_CH7_Pos 7 +#define DMA_IE_CH7_Msk (0x01 << DMA_IE_CH7_Pos) + +#define DMA_IM_CH0_Pos 0 +#define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos) +#define DMA_IM_CH1_Pos 1 +#define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos) +#define DMA_IM_CH2_Pos 2 +#define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos) +#define DMA_IM_CH3_Pos 3 +#define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos) +#define DMA_IM_CH4_Pos 4 +#define DMA_IM_CH4_Msk (0x01 << DMA_IM_CH4_Pos) +#define DMA_IM_CH5_Pos 5 +#define DMA_IM_CH5_Msk (0x01 << DMA_IM_CH5_Pos) +#define DMA_IM_CH6_Pos 6 +#define DMA_IM_CH6_Msk (0x01 << DMA_IM_CH6_Pos) +#define DMA_IM_CH7_Pos 7 +#define DMA_IM_CH7_Msk (0x01 << DMA_IM_CH7_Pos) + +#define DMA_IF_CH0_Pos 0 +#define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos) +#define DMA_IF_CH1_Pos 1 +#define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos) +#define DMA_IF_CH2_Pos 2 +#define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos) +#define DMA_IF_CH3_Pos 3 +#define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos) +#define DMA_IF_CH4_Pos 4 +#define DMA_IF_CH4_Msk (0x01 << DMA_IF_CH4_Pos) +#define DMA_IF_CH5_Pos 5 +#define DMA_IF_CH5_Msk (0x01 << DMA_IF_CH5_Pos) +#define DMA_IF_CH6_Pos 6 +#define DMA_IF_CH6_Msk (0x01 << DMA_IF_CH6_Pos) +#define DMA_IF_CH7_Pos 7 +#define DMA_IF_CH7_Msk (0x01 << DMA_IF_CH7_Pos) + +#define DMA_CR_LEN_Pos 0 //此通é�“传输总长度,0对应1字节,最大4096字节 +#define DMA_CR_LEN_Msk (0xFFF << DMA_CR_LEN_Pos) +#define DMA_CR_RXEN_Pos 16 +#define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos) +#define DMA_CR_TXEN_Pos 17 +#define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos) +#define DMA_CR_AUTORE_Pos 18 //Auto Restart, 通é�“在传输完æˆ�å�Žï¼Œæ˜¯å�¦è‡ªåЍé‡�æ–°å�¯åЍ +#define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos) + +#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 地å�€å›ºå®š 1 地å�€é€’增 2 scatter gather模å¼� +#define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos) +#define DMA_AM_DSTAM_Pos 8 +#define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos) +#define DMA_AM_BURST_Pos 16 +#define DMA_AM_BURST_Msk (0x01 << DMA_AM_BURST_Pos) + +typedef struct +{ + __IO uint32_t CR; //Control Register + + __O uint32_t CMD; //Command Register + + __I uint32_t SR; //Status Register + + __I uint32_t IF; //Interrupt Flag,读å�–清零 + + __IO uint32_t IE; //Interrupt Enable + + uint32_t RESERVED; + + __IO uint32_t BT0; //Bit Time Register 0 + + __IO uint32_t BT1; //Bit Time Register 1 + + uint32_t RESERVED2[3]; + + __I uint32_t ALC; //Arbitration Lost Capture, 仲è£�丢失æ�•æ�‰ + + __I uint32_t ECC; //Error code capture, 错误代ç �æ�•æ�‰ + + __IO uint32_t EWLIM; //Error Warning Limit, 错误报警é™�制 + + __IO uint32_t RXERR; //RX错误计数 + + __IO uint32_t TXERR; //TX错误计数 + + union + { + struct + { //在å¤�ä½�æ—¶å�¯è¯»å†™ï¼Œæ­£å¸¸å·¥ä½œæ¨¡å¼�下ä¸�å�¯è®¿é—® + __IO uint32_t ACR[4]; //Acceptance Check Register, 验收寄存器 + + __IO uint32_t AMR[4]; //Acceptance Mask Register, 验收å±�蔽寄存器;对应ä½�写0,ID必须和验收寄存器匹é…� -#define DMA_IE_CH0_Pos 0 -#define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos) -#define DMA_IE_CH1_Pos 1 -#define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos) -#define DMA_IE_CH2_Pos 2 -#define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos) -#define DMA_IE_CH3_Pos 3 -#define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos) -#define DMA_IE_CH4_Pos 4 -#define DMA_IE_CH4_Msk (0x01 << DMA_IE_CH4_Pos) -#define DMA_IE_CH5_Pos 5 -#define DMA_IE_CH5_Msk (0x01 << DMA_IE_CH5_Pos) -#define DMA_IE_CH6_Pos 6 -#define DMA_IE_CH6_Msk (0x01 << DMA_IE_CH6_Pos) -#define DMA_IE_CH7_Pos 7 -#define DMA_IE_CH7_Msk (0x01 << DMA_IE_CH7_Pos) - -#define DMA_IM_CH0_Pos 0 -#define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos) -#define DMA_IM_CH1_Pos 1 -#define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos) -#define DMA_IM_CH2_Pos 2 -#define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos) -#define DMA_IM_CH3_Pos 3 -#define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos) -#define DMA_IM_CH4_Pos 4 -#define DMA_IM_CH4_Msk (0x01 << DMA_IM_CH4_Pos) -#define DMA_IM_CH5_Pos 5 -#define DMA_IM_CH5_Msk (0x01 << DMA_IM_CH5_Pos) -#define DMA_IM_CH6_Pos 6 -#define DMA_IM_CH6_Msk (0x01 << DMA_IM_CH6_Pos) -#define DMA_IM_CH7_Pos 7 -#define DMA_IM_CH7_Msk (0x01 << DMA_IM_CH7_Pos) - -#define DMA_IF_CH0_Pos 0 -#define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos) -#define DMA_IF_CH1_Pos 1 -#define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos) -#define DMA_IF_CH2_Pos 2 -#define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos) -#define DMA_IF_CH3_Pos 3 -#define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos) -#define DMA_IF_CH4_Pos 4 -#define DMA_IF_CH4_Msk (0x01 << DMA_IF_CH4_Pos) -#define DMA_IF_CH5_Pos 5 -#define DMA_IF_CH5_Msk (0x01 << DMA_IF_CH5_Pos) -#define DMA_IF_CH6_Pos 6 -#define DMA_IF_CH6_Msk (0x01 << DMA_IF_CH6_Pos) -#define DMA_IF_CH7_Pos 7 -#define DMA_IF_CH7_Msk (0x01 << DMA_IF_CH7_Pos) - -#define DMA_CR_LEN_Pos 0 //此通é�“传输总长度,0对应1字节,最大4096字节 -#define DMA_CR_LEN_Msk (0xFFF << DMA_CR_LEN_Pos) -#define DMA_CR_RXEN_Pos 16 -#define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos) -#define DMA_CR_TXEN_Pos 17 -#define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos) -#define DMA_CR_AUTORE_Pos 18 //Auto Restart, 通é�“在传输完æˆ�å�Žï¼Œæ˜¯å�¦è‡ªåЍé‡�æ–°å�¯åЍ -#define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos) - -#define DMA_AM_SRCAM_Pos 0 //Address Mode 0 地å�€å›ºå®š 1 地å�€é€’增 2 scatter gather模å¼� -#define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos) -#define DMA_AM_DSTAM_Pos 8 -#define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos) -#define DMA_AM_BURST_Pos 16 -#define DMA_AM_BURST_Msk (0x01 << DMA_AM_BURST_Pos) - - - - -typedef struct { - __IO uint32_t CR; //Control Register - - __O uint32_t CMD; //Command Register - - __I uint32_t SR; //Status Register - - __I uint32_t IF; //Interrupt Flag,读å�–清零 - - __IO uint32_t IE; //Interrupt Enable - - uint32_t RESERVED; - - __IO uint32_t BT0; //Bit Time Register 0 - - __IO uint32_t BT1; //Bit Time Register 1 - - uint32_t RESERVED2[3]; - - __I uint32_t ALC; //Arbitration Lost Capture, 仲è£�丢失æ�•æ�‰ - - __I uint32_t ECC; //Error code capture, 错误代ç �æ�•æ�‰ - - __IO uint32_t EWLIM; //Error Warning Limit, 错误报警é™�制 - - __IO uint32_t RXERR; //RX错误计数 - - __IO uint32_t TXERR; //TX错误计数 - - union { - struct { //在å¤�ä½�æ—¶å�¯è¯»å†™ï¼Œæ­£å¸¸å·¥ä½œæ¨¡å¼�下ä¸�å�¯è®¿é—® - __IO uint32_t ACR[4]; //Acceptance Check Register, 验收寄存器 - - __IO uint32_t AMR[4]; //Acceptance Mask Register, 验收å±�蔽寄存器;对应ä½�写0,ID必须和验收寄存器匹é…� - - uint32_t RESERVED[5]; - } FILTER; - - union { //在正常工作模å¼�下å�¯è¯»å†™ï¼Œå¤�ä½�æ—¶ä¸�å�¯è®¿é—® - struct { - __O uint32_t INFO; - - __O uint32_t DATA[12]; - } TXFRAME; - - struct { - __I uint32_t INFO; - - __I uint32_t DATA[12]; - } RXFRAME; - }; - }; - - __I uint32_t RMCNT; //Receive Message Count - - uint32_t RESERVED3[66]; - - struct { //TXFRAME的读接å�£ - __I uint32_t INFO; - - __I uint32_t DATA[12]; - } TXFRAME_R; + uint32_t RESERVED[5]; + } FILTER; + + union + { //在正常工作模å¼�下å�¯è¯»å†™ï¼Œå¤�ä½�æ—¶ä¸�å�¯è®¿é—® + struct + { + __O uint32_t INFO; + + __O uint32_t DATA[12]; + } TXFRAME; + + struct + { + __I uint32_t INFO; + + __I uint32_t DATA[12]; + } RXFRAME; + }; + }; + + __I uint32_t RMCNT; //Receive Message Count + + uint32_t RESERVED3[66]; + + struct + { //TXFRAME的读接å�£ + __I uint32_t INFO; + + __I uint32_t DATA[12]; + } TXFRAME_R; } CAN_TypeDef; +#define CAN_CR_RST_Pos 0 +#define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos) +#define CAN_CR_LOM_Pos 1 //Listen Only Mode +#define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos) +#define CAN_CR_STM_Pos 2 //Self Test Mode, 此模å¼�下å�³ä½¿æ²¡æœ‰åº”答,CAN控制器也å�¯ä»¥æˆ�功å�‘é€� +#define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos) +#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 å�•个验收滤波器(32ä½�) 0 两个验收滤波器(16ä½�) +#define CAN_CR_AFM_Msk (0x01 << CAN_CR_AFM_Pos) +#define CAN_CR_SLEEP_Pos 4 //写1进入ç�¡çœ æ¨¡å¼�,有总线活动或中断时唤醒并自动清零此ä½� +#define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos) + +#define CAN_CMD_TXREQ_Pos 0 //Transmission Request +#define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos) +#define CAN_CMD_ABTTX_Pos 1 //Abort Transmission +#define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos) +#define CAN_CMD_RRB_Pos 2 //Release Receive Buffer +#define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos) +#define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun +#define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos) +#define CAN_CMD_SRR_Pos 4 //Self Reception Request +#define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos) + +#define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消æ�¯å�¯ä»¥è¯»å�– +#define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos) +#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信æ�¯ç”±äºŽæŽ¥æ”¶FIFO已满而丢掉 +#define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos) +#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处ç�†å‰�é�¢çš„å�‘é€�,现在ä¸�能写新的消æ�¯ 1 å�¯ä»¥å†™å…¥æ–°çš„æ¶ˆæ�¯å�‘é€� +#define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos) +#define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed +#define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos) +#define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收 +#define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos) +#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在å�‘é€� +#define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos) +#define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit +#define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos) +#define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状æ€�,没有å�‚与到总线活动 +#define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos) + +#define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA +#define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos) +#define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBRç”±0å�˜æˆ�1将置ä½�æ­¤ä½� +#define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos) +#define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置ä½�æ­¤ä½� +#define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos) +#define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV +#define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos) +#define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在ç�¡çœ æ¨¡å¼�下的CAN控制器检测到总线活动时硬件置ä½� +#define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos) +#define CAN_IF_ERRPASS_Pos 5 // +#define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos) +#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲è£�å�˜æˆ�接收方时硬件置ä½� +#define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos) +#define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置ä½� +#define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos) + +#define CAN_IE_RXDA_Pos 0 +#define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos) +#define CAN_IE_TXBR_Pos 1 +#define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos) +#define CAN_IE_ERRWARN_Pos 2 +#define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos) +#define CAN_IE_RXOV_Pos 3 +#define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos) +#define CAN_IE_WKUP_Pos 4 +#define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos) +#define CAN_IE_ERRPASS_Pos 5 +#define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos) +#define CAN_IE_ARBLOST_Pos 6 +#define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos) +#define CAN_IE_BUSERR_Pos 7 +#define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos) + +#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CANæ—¶é—´å�•ä½�=2*Tsysclk*(BRP+1) +#define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos) +#define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width +#define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos) + +#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANæ—¶é—´å�•ä½� * (TSEG1+1) +#define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos) +#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANæ—¶é—´å�•ä½� * (TSEG2+1) +#define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos) +#define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times +#define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos) + +#define CAN_ECC_SEGCODE_Pos 0 //Segment Code +#define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos) +#define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception +#define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos) +#define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error +#define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos) + +#define CAN_INFO_DLC_Pos 0 //Data Length Control +#define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos) +#define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 æ•°æ�®å¸§ +#define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos) +#define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格å¼� 1 扩展帧格å¼� +#define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos) + +typedef struct +{ + __IO uint32_t IE; //[0] 为0的时候,IF[0]ç»´æŒ�为0 + + __IO uint32_t IF; //[0] 当完æˆ�指定长度的数æ�®ä¼ è¾“æ—¶ç½®1,写1清零 + + __IO uint32_t IM; //[0] 当该寄存器为1时,LCDC的中断ä¸�会输出给系统的中断控制寄存器 -#define CAN_CR_RST_Pos 0 -#define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos) -#define CAN_CR_LOM_Pos 1 //Listen Only Mode -#define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos) -#define CAN_CR_STM_Pos 2 //Self Test Mode, 此模å¼�下å�³ä½¿æ²¡æœ‰åº”答,CAN控制器也å�¯ä»¥æˆ�功å�‘é€� -#define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos) -#define CAN_CR_AFM_Pos 3 //Acceptance Filter Mode, 1 å�•个验收滤波器(32ä½�) 0 两个验收滤波器(16ä½�) -#define CAN_CR_AFM_Msk (0x01 << CAN_CR_AFM_Pos) -#define CAN_CR_SLEEP_Pos 4 //写1进入ç�¡çœ æ¨¡å¼�,有总线活动或中断时唤醒并自动清零此ä½� -#define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos) - -#define CAN_CMD_TXREQ_Pos 0 //Transmission Request -#define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos) -#define CAN_CMD_ABTTX_Pos 1 //Abort Transmission -#define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos) -#define CAN_CMD_RRB_Pos 2 //Release Receive Buffer -#define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos) -#define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun -#define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos) -#define CAN_CMD_SRR_Pos 4 //Self Reception Request -#define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos) - -#define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消æ�¯å�¯ä»¥è¯»å�– -#define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos) -#define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信æ�¯ç”±äºŽæŽ¥æ”¶FIFO已满而丢掉 -#define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos) -#define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处ç�†å‰�é�¢çš„å�‘é€�,现在ä¸�能写新的消æ�¯ 1 å�¯ä»¥å†™å…¥æ–°çš„æ¶ˆæ�¯å�‘é€� -#define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos) -#define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed -#define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos) -#define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收 -#define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos) -#define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在å�‘é€� -#define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos) -#define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit -#define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos) -#define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状æ€�,没有å�‚与到总线活动 -#define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos) - -#define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA -#define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos) -#define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBRç”±0å�˜æˆ�1将置ä½�æ­¤ä½� -#define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos) -#define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置ä½�æ­¤ä½� -#define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos) -#define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV -#define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos) -#define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在ç�¡çœ æ¨¡å¼�下的CAN控制器检测到总线活动时硬件置ä½� -#define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos) -#define CAN_IF_ERRPASS_Pos 5 // -#define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos) -#define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲è£�å�˜æˆ�接收方时硬件置ä½� -#define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos) -#define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置ä½� -#define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos) - -#define CAN_IE_RXDA_Pos 0 -#define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos) -#define CAN_IE_TXBR_Pos 1 -#define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos) -#define CAN_IE_ERRWARN_Pos 2 -#define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos) -#define CAN_IE_RXOV_Pos 3 -#define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos) -#define CAN_IE_WKUP_Pos 4 -#define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos) -#define CAN_IE_ERRPASS_Pos 5 -#define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos) -#define CAN_IE_ARBLOST_Pos 6 -#define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos) -#define CAN_IE_BUSERR_Pos 7 -#define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos) - -#define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CANæ—¶é—´å�•ä½�=2*Tsysclk*(BRP+1) -#define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos) -#define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width -#define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos) - -#define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CANæ—¶é—´å�•ä½� * (TSEG1+1) -#define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos) -#define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CANæ—¶é—´å�•ä½� * (TSEG2+1) -#define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos) -#define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times -#define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos) - -#define CAN_ECC_SEGCODE_Pos 0 //Segment Code -#define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos) -#define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception -#define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos) -#define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error -#define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos) - -#define CAN_INFO_DLC_Pos 0 //Data Length Control -#define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos) -#define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 æ•°æ�®å¸§ -#define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos) -#define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格å¼� 1 扩展帧格å¼� -#define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos) - - - - -typedef struct { - __IO uint32_t IE; //[0] 为0的时候,IF[0]ç»´æŒ�为0 - - __IO uint32_t IF; //[0] 当完æˆ�指定长度的数æ�®ä¼ è¾“æ—¶ç½®1,写1清零 - - __IO uint32_t IM; //[0] 当该寄存器为1时,LCDC的中断ä¸�会输出给系统的中断控制寄存器 - __IO uint32_t START; - - __IO uint32_t SRCADDR; //æ•°æ�®æº�地å�€å¯„存器,必须字对é½�(å�³åœ°å�€çš„低2ä½�必须是0) - + + __IO uint32_t SRCADDR; //æ•°æ�®æº�地å�€å¯„存器,必须字对é½�(å�³åœ°å�€çš„低2ä½�必须是0) + __IO uint32_t CR0; - - __IO uint32_t CR1; - - __IO uint32_t PRECMDV; //在MPU接å�£ä¸­ï¼Œå�‘é€�æ•°æ�®å‰�,RS拉低的那一æ‹�,数æ�®æ€»çº¿ä¸Šçš„值 -} LCD_TypeDef; + __IO uint32_t CR1; -#define LCD_START_GO_Pos 1 //写1开始传输数æ�®ï¼Œæ•°æ�®ä¼ è¾“结æ�Ÿå�Žè‡ªåŠ¨æ¸…é›¶ -#define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos) -#define LCD_START_BURST_Pos 2 -#define LCD_START_BURST_Msk (0x01 << LCD_START_BURST_Pos) + __IO uint32_t PRECMDV; //在MPU接å�£ä¸­ï¼Œå�‘é€�æ•°æ�®å‰�,RS拉低的那一æ‹�,数æ�®æ€»çº¿ä¸Šçš„值 +} LCD_TypeDef; -#define LCD_CR0_VPIX_Pos 0 //当portrait为0时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为767 - //当portrait为1时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为767 -#define LCD_CR0_VPIX_Msk (0x3FF << LCD_CR0_VPIX_Pos) -#define LCD_CR0_HPIX_Pos 10 //当portrait为0时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为1023 - //当portrait为1时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为1023 -#define LCD_CR0_HPIX_Msk (0x3FF << LCD_CR0_HPIX_Pos) -#define LCD_CR0_DCLK_Pos 20 //0 DOTCLK一直翻转 1 DOTCLK在空闲时å�œåœ¨1 -#define LCD_CR0_DCLK_Msk (0x01 << LCD_CR0_DCLK_Pos) -#define LCD_CR0_HLOW_Pos 21 //输出HSYNC低电平æŒ�续多少个DOTCLK周期,0表示1个周期 -#define LCD_CR0_HLOW_Msk (0x03 << LCD_CR0_HLOW_Pos) +#define LCD_START_GO_Pos 1 //写1开始传输数æ�®ï¼Œæ•°æ�®ä¼ è¾“结æ�Ÿå�Žè‡ªåŠ¨æ¸…é›¶ +#define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos) +#define LCD_START_BURST_Pos 2 +#define LCD_START_BURST_Msk (0x01 << LCD_START_BURST_Pos) + +#define LCD_CR0_VPIX_Pos 0 //当portrait为0时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为767 \ + //当portrait为1时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为767 +#define LCD_CR0_VPIX_Msk (0x3FF << LCD_CR0_VPIX_Pos) +#define LCD_CR0_HPIX_Pos 10 //当portrait为0时,表示水平方å�‘çš„åƒ�素个数,0表示1个,最大为1023 \ + //当portrait为1时,表示垂直方å�‘çš„åƒ�素个数,0表示1个,最大为1023 +#define LCD_CR0_HPIX_Msk (0x3FF << LCD_CR0_HPIX_Pos) +#define LCD_CR0_DCLK_Pos 20 //0 DOTCLK一直翻转 1 DOTCLK在空闲时å�œåœ¨1 +#define LCD_CR0_DCLK_Msk (0x01 << LCD_CR0_DCLK_Pos) +#define LCD_CR0_HLOW_Pos 21 //输出HSYNC低电平æŒ�续多少个DOTCLK周期,0表示1个周期 +#define LCD_CR0_HLOW_Msk (0x03 << LCD_CR0_HLOW_Pos) + +#define LCD_CR1_VFP_Pos 1 +#define LCD_CR1_VFP_Msk (0x07 << LCD_CR1_VFP_Pos) +#define LCD_CR1_VBP_Pos 4 +#define LCD_CR1_VBP_Msk (0x1F << LCD_CR1_VBP_Pos) +#define LCD_CR1_HFP_Pos 9 +#define LCD_CR1_HFP_Msk (0x1F << LCD_CR1_HFP_Pos) +#define LCD_CR1_HBP_Pos 14 +#define LCD_CR1_HBP_Msk (0x7F << LCD_CR1_HBP_Pos) +#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLK相对于模å�—时钟的分频比,0表示2分频,1表示4分频 ... +#define LCD_CR1_DCLKDIV_Msk (0x1F << LCD_CR1_DCLKDIV_Pos) +#define LCD_CR1_DCLKINV_Pos 26 //1 输出DOTCLKå��å�‘,应用于用DOTCLK下é™�沿采样数æ�®çš„å±� +#define LCD_CR1_DCLKINV_Msk (0x01 << LCD_CR1_DCLKINV_Pos) + +typedef struct +{ + __IO uint32_t DMA_MEM_ADDR; -#define LCD_CR1_VFP_Pos 1 -#define LCD_CR1_VFP_Msk (0x07 << LCD_CR1_VFP_Pos) -#define LCD_CR1_VBP_Pos 4 -#define LCD_CR1_VBP_Msk (0x1F << LCD_CR1_VBP_Pos) -#define LCD_CR1_HFP_Pos 9 -#define LCD_CR1_HFP_Msk (0x1F << LCD_CR1_HFP_Pos) -#define LCD_CR1_HBP_Pos 14 -#define LCD_CR1_HBP_Msk (0x7F << LCD_CR1_HBP_Pos) -#define LCD_CR1_DCLKDIV_Pos 21 //DOTCLK相对于模å�—时钟的分频比,0表示2分频,1表示4分频 ... -#define LCD_CR1_DCLKDIV_Msk (0x1F << LCD_CR1_DCLKDIV_Pos) -#define LCD_CR1_DCLKINV_Pos 26 //1 输出DOTCLKå��å�‘,应用于用DOTCLK下é™�沿采样数æ�®çš„å±� -#define LCD_CR1_DCLKINV_Msk (0x01 << LCD_CR1_DCLKINV_Pos) + __IO uint32_t BLK; //Block Size and Count + __IO uint32_t ARG; //Argument + __IO uint32_t CMD; //Command + __IO uint32_t RESP[4]; //Response -typedef struct { - __IO uint32_t DMA_MEM_ADDR; - - __IO uint32_t BLK; //Block Size and Count - - __IO uint32_t ARG; //Argument - - __IO uint32_t CMD; //Command - - __IO uint32_t RESP[4]; //Response - __IO uint32_t DATA; - + __IO uint32_t STAT; - + __IO uint32_t CR1; - + __IO uint32_t CR2; - + __IO uint32_t IF; - - __IO uint32_t IFE; //Interrupt Flag Enable - - __IO uint32_t IE; //Interrupt Enalbe - - __IO uint32_t CMD12ERR; - - __IO uint32_t INFO; - - __IO uint32_t MAXCURR; -} SDIO_TypeDef; + __IO uint32_t IFE; //Interrupt Flag Enable -#define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节 -#define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos) -#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1å�— 2 2å�— ... ... -#define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos) - -#define SDIO_CMD_DMAEN_Pos 0 -#define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos) -#define SDIO_CMD_BLKCNTEN_Pos 1 -#define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos) -#define SDIO_CMD_AUTOCMD12_Pos 2 -#define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos) -#define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host -#define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos) -#define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block -#define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos) -#define SDIO_CMD_RESPTYPE_Pos 16 //å“�应类型,0 æ— å“�应 1 136ä½�å“�应 2 48ä½�å“�应 3 48ä½�å“�应,Busy after response -#define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos) -#define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable -#define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos) -#define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable -#define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos) -#define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present -#define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos) -#define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT -#define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos) -#define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63ã€�ACMD0-63 -#define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos) - -#define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode -#define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos) -#define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected -#define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos) -#define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted -#define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos) -#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITä½� 0 SD_Detect引脚 -#define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos) -#define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off -#define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos) -#define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V -#define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos) - -#define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable -#define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos) -#define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready -#define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos) -#define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable -#define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos) -#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ä¸�分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频 -#define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos) -#define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27 -#define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos) -#define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All -#define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos) -#define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line -#define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos) -#define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line -#define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos) - -#define SDIO_IF_CMDDONE_Pos 0 -#define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos) -#define SDIO_IF_TRXDONE_Pos 1 -#define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos) -#define SDIO_IF_BLKGAP_Pos 2 -#define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos) -#define SDIO_IF_DMADONE_Pos 3 -#define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos) -#define SDIO_IF_BUFWRRDY_Pos 4 -#define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos) -#define SDIO_IF_BUFRDRDY_Pos 5 -#define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos) -#define SDIO_IF_CARDINSR_Pos 6 -#define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos) -#define SDIO_IF_CARDRMOV_Pos 7 -#define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos) -#define SDIO_IF_CARD_Pos 8 -#define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos) -#define SDIO_IF_ERROR_Pos 15 -#define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos) -#define SDIO_IF_CMDTIMEOUT_Pos 16 -#define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos) -#define SDIO_IF_CMDCRCERR_Pos 17 -#define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos) -#define SDIO_IF_CMDENDERR_Pos 18 -#define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos) -#define SDIO_IF_CMDIDXERR_Pos 19 -#define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos) -#define SDIO_IF_DATTIMEOUT_Pos 20 -#define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos) -#define SDIO_IF_DATCRCERR_Pos 21 -#define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos) -#define SDIO_IF_DATENDERR_Pos 22 -#define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos) -#define SDIO_IF_CURLIMERR_Pos 23 -#define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos) -#define SDIO_IF_CMD12ERR_Pos 24 -#define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos) -#define SDIO_IF_DMAERR_Pos 25 -#define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos) -#define SDIO_IF_RESPERR_Pos 28 -#define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos) - -#define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable -#define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos) -#define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable -#define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos) -#define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable -#define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos) -#define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable -#define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos) -#define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable -#define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos) -#define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable -#define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos) -#define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable -#define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos) -#define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable -#define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos) -#define SDIO_IE_CARD_Pos 8 -#define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos) -#define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable -#define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos) -#define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable -#define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos) -#define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable -#define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos) -#define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable -#define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos) -#define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable -#define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos) -#define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable -#define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos) -#define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable -#define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos) -#define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable -#define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos) -#define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable -#define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos) -#define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable -#define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos) -#define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable -#define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos) - -#define SDIO_IM_CMDDONE_Pos 0 -#define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos) -#define SDIO_IM_TRXDONE_Pos 1 -#define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos) -#define SDIO_IM_BLKGAP_Pos 2 -#define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos) -#define SDIO_IM_DMADONE_Pos 3 -#define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos) -#define SDIO_IM_BUFWRRDY_Pos 4 -#define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos) -#define SDIO_IM_BUFRDRDY_Pos 5 -#define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos) -#define SDIO_IM_CARDINSR_Pos 6 -#define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos) -#define SDIO_IM_CARDRMOV_Pos 7 -#define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos) -#define SDIO_IM_CARD_Pos 8 -#define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos) -#define SDIO_IM_CMDTIMEOUT_Pos 16 -#define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos) -#define SDIO_IM_CMDCRCERR_Pos 17 -#define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos) -#define SDIO_IM_CMDENDERR_Pos 18 -#define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos) -#define SDIO_IM_CMDIDXERR_Pos 19 -#define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos) -#define SDIO_IM_DATTIMEOUT_Pos 20 -#define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos) -#define SDIO_IM_DATCRCERR_Pos 21 -#define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos) -#define SDIO_IM_DATENDERR_Pos 22 -#define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos) -#define SDIO_IM_CURLIMERR_Pos 23 -#define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos) -#define SDIO_IM_CMD12ERR_Pos 24 -#define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos) -#define SDIO_IM_DMAERR_Pos 25 -#define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos) -#define SDIO_IM_RESPERR_Pos 28 -#define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos) - - - - -typedef struct { - __IO uint32_t DATA; - __IO uint32_t ADDR; - __IO uint32_t ERASE; - __IO uint32_t CACHE; - __IO uint32_t CFG0; - __IO uint32_t CFG1; - __IO uint32_t CFG2; - __IO uint32_t CFG3; - __IO uint32_t STAT; -} FLASH_Typedef; + __IO uint32_t IE; //Interrupt Enalbe + __IO uint32_t CMD12ERR; -#define FLASH_ERASE_REQ_Pos 31 -#define FLASH_ERASE_REQ_Msk (0x01u<< FLASH_ERASE_REQ_Pos) + __IO uint32_t INFO; -#define FLASH_CACHE_PROG_Pos 2 -#define FLASH_CACHE_PROG_Msk (0x01 << FLASH_CACHE_PROG_Pos) -#define FLASH_CACHE_CLEAR_Pos 3 -#define FLASH_CACHE_CLEAR_Msk (0x01 << FLASH_CACHE_CLEAR_Pos) + __IO uint32_t MAXCURR; +} SDIO_TypeDef; -#define FLASH_STAT_ERASE_GOING_Pos 0 -#define FLASH_STAT_ERASE_GOING_Msk (0X01 << FLASH_STAT_ERASE_GOING_Pos) -#define FLASH_STAT_PROG_GOING_Pos 1 -#define FLASH_STAT_PROG_GOING_Msk (0x01 << FLASH_STAT_PROG_GOING_Pos) -#define FALSH_STAT_FIFO_EMPTY_Pos 3 -#define FLASH_STAT_FIFO_EMPTY_Msk (0x01 << FALSH_STAT_FIFO_EMPTY_Pos) -#define FALSH_STAT_FIFO_FULL_Pos 4 -#define FLASH_STAT_FIFO_FULL_Msk (0x01 << FALSH_STAT_FIFO_FULL_Pos) +#define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节 +#define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos) +#define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1å�— 2 2å�— ... ... +#define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos) + +#define SDIO_CMD_DMAEN_Pos 0 +#define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos) +#define SDIO_CMD_BLKCNTEN_Pos 1 +#define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos) +#define SDIO_CMD_AUTOCMD12_Pos 2 +#define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos) +#define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host +#define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos) +#define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block +#define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos) +#define SDIO_CMD_RESPTYPE_Pos 16 //å“�应类型,0 æ— å“�应 1 136ä½�å“�应 2 48ä½�å“�应 3 48ä½�å“�应,Busy after response +#define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos) +#define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable +#define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos) +#define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable +#define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos) +#define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present +#define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos) +#define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT +#define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos) +#define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63ã€�ACMD0-63 +#define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos) + +#define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode +#define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos) +#define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected +#define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos) +#define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted +#define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos) +#define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBITä½� 0 SD_Detect引脚 +#define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos) +#define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off +#define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos) +#define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V +#define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos) + +#define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable +#define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos) +#define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready +#define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos) +#define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable +#define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos) +#define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 ä¸�分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频 +#define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos) +#define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27 +#define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos) +#define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All +#define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos) +#define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line +#define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos) +#define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line +#define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos) + +#define SDIO_IF_CMDDONE_Pos 0 +#define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos) +#define SDIO_IF_TRXDONE_Pos 1 +#define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos) +#define SDIO_IF_BLKGAP_Pos 2 +#define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos) +#define SDIO_IF_DMADONE_Pos 3 +#define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos) +#define SDIO_IF_BUFWRRDY_Pos 4 +#define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos) +#define SDIO_IF_BUFRDRDY_Pos 5 +#define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos) +#define SDIO_IF_CARDINSR_Pos 6 +#define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos) +#define SDIO_IF_CARDRMOV_Pos 7 +#define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos) +#define SDIO_IF_CARD_Pos 8 +#define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos) +#define SDIO_IF_ERROR_Pos 15 +#define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos) +#define SDIO_IF_CMDTIMEOUT_Pos 16 +#define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos) +#define SDIO_IF_CMDCRCERR_Pos 17 +#define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos) +#define SDIO_IF_CMDENDERR_Pos 18 +#define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos) +#define SDIO_IF_CMDIDXERR_Pos 19 +#define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos) +#define SDIO_IF_DATTIMEOUT_Pos 20 +#define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos) +#define SDIO_IF_DATCRCERR_Pos 21 +#define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos) +#define SDIO_IF_DATENDERR_Pos 22 +#define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos) +#define SDIO_IF_CURLIMERR_Pos 23 +#define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos) +#define SDIO_IF_CMD12ERR_Pos 24 +#define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos) +#define SDIO_IF_DMAERR_Pos 25 +#define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos) +#define SDIO_IF_RESPERR_Pos 28 +#define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos) + +#define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable +#define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos) +#define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable +#define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos) +#define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable +#define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos) +#define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable +#define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos) +#define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable +#define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos) +#define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable +#define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos) +#define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable +#define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos) +#define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable +#define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos) +#define SDIO_IE_CARD_Pos 8 +#define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos) +#define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable +#define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos) +#define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable +#define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos) +#define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable +#define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos) +#define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable +#define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos) +#define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable +#define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos) +#define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable +#define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos) +#define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable +#define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos) +#define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable +#define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos) +#define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable +#define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos) +#define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable +#define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos) +#define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable +#define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos) + +#define SDIO_IM_CMDDONE_Pos 0 +#define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos) +#define SDIO_IM_TRXDONE_Pos 1 +#define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos) +#define SDIO_IM_BLKGAP_Pos 2 +#define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos) +#define SDIO_IM_DMADONE_Pos 3 +#define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos) +#define SDIO_IM_BUFWRRDY_Pos 4 +#define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos) +#define SDIO_IM_BUFRDRDY_Pos 5 +#define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos) +#define SDIO_IM_CARDINSR_Pos 6 +#define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos) +#define SDIO_IM_CARDRMOV_Pos 7 +#define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos) +#define SDIO_IM_CARD_Pos 8 +#define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos) +#define SDIO_IM_CMDTIMEOUT_Pos 16 +#define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos) +#define SDIO_IM_CMDCRCERR_Pos 17 +#define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos) +#define SDIO_IM_CMDENDERR_Pos 18 +#define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos) +#define SDIO_IM_CMDIDXERR_Pos 19 +#define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos) +#define SDIO_IM_DATTIMEOUT_Pos 20 +#define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos) +#define SDIO_IM_DATCRCERR_Pos 21 +#define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos) +#define SDIO_IM_DATENDERR_Pos 22 +#define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos) +#define SDIO_IM_CURLIMERR_Pos 23 +#define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos) +#define SDIO_IM_CMD12ERR_Pos 24 +#define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos) +#define SDIO_IM_DMAERR_Pos 25 +#define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos) +#define SDIO_IM_RESPERR_Pos 28 +#define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos) + +typedef struct +{ + __IO uint32_t DATA; + __IO uint32_t ADDR; + __IO uint32_t ERASE; + __IO uint32_t CACHE; + __IO uint32_t CFG0; + __IO uint32_t CFG1; + __IO uint32_t CFG2; + __IO uint32_t CFG3; + __IO uint32_t STAT; +} FLASH_Typedef; +#define FLASH_ERASE_REQ_Pos 31 +#define FLASH_ERASE_REQ_Msk (0x01u << FLASH_ERASE_REQ_Pos) +#define FLASH_CACHE_PROG_Pos 2 +#define FLASH_CACHE_PROG_Msk (0x01 << FLASH_CACHE_PROG_Pos) +#define FLASH_CACHE_CLEAR_Pos 3 +#define FLASH_CACHE_CLEAR_Msk (0x01 << FLASH_CACHE_CLEAR_Pos) +#define FLASH_STAT_ERASE_GOING_Pos 0 +#define FLASH_STAT_ERASE_GOING_Msk (0X01 << FLASH_STAT_ERASE_GOING_Pos) +#define FLASH_STAT_PROG_GOING_Pos 1 +#define FLASH_STAT_PROG_GOING_Msk (0x01 << FLASH_STAT_PROG_GOING_Pos) +#define FALSH_STAT_FIFO_EMPTY_Pos 3 +#define FLASH_STAT_FIFO_EMPTY_Msk (0x01 << FALSH_STAT_FIFO_EMPTY_Pos) +#define FALSH_STAT_FIFO_FULL_Pos 4 +#define FLASH_STAT_FIFO_FULL_Msk (0x01 << FALSH_STAT_FIFO_FULL_Pos) -typedef struct { +typedef struct +{ __IO uint32_t CR; } SRAMC_TypeDef; +#define SRAMC_CR_RWTIME_Pos 0 //读写æ“�作æŒ�续多少个时钟周期。0表示1个时钟周期。最å°�设置为4 +#define SRAMC_CR_RWTIME_Msk (0x0F << SRAMC_CR_RWTIME_Pos) +#define SRAMC_CR_BYTEIF_Pos 4 //外部SRAMæ•°æ�®å®½åº¦ï¼Œ0 16ä½� 1 8ä½� +#define SRAMC_CR_BYTEIF_Msk (0x01 << SRAMC_CR_BYTEIF_Pos) +#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]为地å�€çº¿ 0 ADDR[23]为高字节使能,ADDR[22]为低字节使能 +#define SRAMC_CR_HBLBDIS_Msk (0x01 << SRAMC_CR_HBLBDIS_Pos) -#define SRAMC_CR_RWTIME_Pos 0 //读写æ“�作æŒ�续多少个时钟周期。0表示1个时钟周期。最å°�设置为4 -#define SRAMC_CR_RWTIME_Msk (0x0F << SRAMC_CR_RWTIME_Pos) -#define SRAMC_CR_BYTEIF_Pos 4 //外部SRAMæ•°æ�®å®½åº¦ï¼Œ0 16ä½� 1 8ä½� -#define SRAMC_CR_BYTEIF_Msk (0x01 << SRAMC_CR_BYTEIF_Pos) -#define SRAMC_CR_HBLBDIS_Pos 5 //1 ADDR[23:22]为地å�€çº¿ 0 ADDR[23]为高字节使能,ADDR[22]为低字节使能 -#define SRAMC_CR_HBLBDIS_Msk (0x01 << SRAMC_CR_HBLBDIS_Pos) - - - -typedef struct { +typedef struct +{ __IO uint32_t CR0; - + __IO uint32_t CR1; - + __IO uint32_t REFRESH; - - __IO uint32_t NOPNUM; //[15:0] åˆ�始化完æˆ�å�Žï¼Œåœ¨æ­£å¸¸æ“�作之å‰�,å�‘é€�多少个NOP命令 - + + __IO uint32_t NOPNUM; //[15:0] åˆ�始化完æˆ�å�Žï¼Œåœ¨æ­£å¸¸æ“�作之å‰�,å�‘é€�多少个NOP命令 + __IO uint32_t LATCH; - - __IO uint32_t REFDONE; //[0] Frefresh Done,上电åˆ�始化完æˆ� -} SDRAMC_TypeDef; + __IO uint32_t REFDONE; //[0] Frefresh Done,上电åˆ�始化完æˆ� +} SDRAMC_TypeDef; -#define SDRAMC_CR0_BURSTLEN_Pos 0 //å¿…é¡»å�–2,表示Burst Length为4 -#define SDRAMC_CR0_BURSTLEN_Msk (0x07 << SDRAMC_CR0_BURSTLEN_Pos) -#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency, 2 2 3 3 -#define SDRAMC_CR0_CASDELAY_Msk (0x07 << SDRAMC_CR0_CASDELAY_Pos) - -#define SDRAMC_CR1_TRP_Pos 0 -#define SDRAMC_CR1_TRP_Msk (0x07 << SDRAMC_CR1_TRP_Pos) -#define SDRAMC_CR1_TRCD_Pos 3 -#define SDRAMC_CR1_TRCD_Msk (0x07 << SDRAMC_CR1_TRCD_Pos) -#define SDRAMC_CR1_TRC_Pos 6 -#define SDRAMC_CR1_TRC_Msk (0x0F << SDRAMC_CR1_TRC_Pos) -#define SDRAMC_CR1_TRAS_Pos 10 -#define SDRAMC_CR1_TRAS_Msk (0x07 << SDRAMC_CR1_TRAS_Pos) -#define SDRAMC_CR1_TRRD_Pos 13 -#define SDRAMC_CR1_TRRD_Msk (0x03 << SDRAMC_CR1_TRRD_Pos) -#define SDRAMC_CR1_TMRD_Pos 15 -#define SDRAMC_CR1_TMRD_Msk (0x07 << SDRAMC_CR1_TMRD_Pos) -#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMC的接å�£æ•°æ�®ä½�宽,1 32bit 0 16bit -#define SDRAMC_CR1_32BIT_Msk (0x01 << SDRAMC_CR1_32BIT_Pos) -#define SDRAMC_CR1_BANK_Pos 19 //SDRAMæ¯�个颗粒有几个bank,0 2 banks 1 4 banks -#define SDRAMC_CR1_BANK_Msk (0x01 << SDRAMC_CR1_BANK_Pos) -#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM颗粒的ä½�宽,1 32bit 0 16bit -#define SDRAMC_CR1_CELL32BIT_Msk (0x01 << SDRAMC_CR1_CELL32BIT_Pos) -#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM颗粒的容é‡�,0 64Mb 1 128Mb 2 256Mb 3 16Mb -#define SDRAMC_CR1_CELLSIZE_Msk (0x03 << SDRAMC_CR1_CELLSIZE_Pos) -#define SDRAMC_CR1_HIGHSPEED_Pos 23 //当hclk大于100MHz时,这一ä½�å¿…é¡»é…�置为1,å�¦åˆ™ä¸º0 -#define SDRAMC_CR1_HIGHSPEED_Msk (0x01 << SDRAMC_CR1_HIGHSPEED_Pos) - -#define SDRAMC_REFRESH_RATE_Pos 0 -#define SDRAMC_REFRESH_RATE_Msk (0xFFF << SDRAMC_REFRESH_RATE_Pos) -#define SDRAMC_REFRESH_EN_Pos 12 -#define SDRAMC_REFRESH_EN_Msk (0x01 << SDRAMC_REFRESH_EN_Pos) - -#define SDRAMC_LATCH_INEDGE_Pos 0 //哪个沿æ�¥é”�存从SDRAM中读回的数æ�®ï¼Œ0 上å�‡æ²¿ 1 下é™�沿 -#define SDRAMC_LATCH_INEDGE_Msk (0x01 << SDRAMC_LATCH_INEDGE_Pos) -#define SDRAMC_LATCH_OUTEDGE_Pos 1 //哪个沿去é”�å­˜é€�ç»™SDRAM的数æ�®ï¼Œ1 上å�‡æ²¿ 0 下é™�沿 -#define SDRAMC_LATCH_OUTEDGE_Msk (0x01 << SDRAMC_LATCH_OUTEDGE_Pos) -#define SDRAMC_LATCH_WAITST_Pos 2 -#define SDRAMC_LATCH_WAITST_Msk (0x01 << SDRAMC_LATCH_WAITST_Pos) - - - - -typedef struct { +#define SDRAMC_CR0_BURSTLEN_Pos 0 //å¿…é¡»å�–2,表示Burst Length为4 +#define SDRAMC_CR0_BURSTLEN_Msk (0x07 << SDRAMC_CR0_BURSTLEN_Pos) +#define SDRAMC_CR0_CASDELAY_Pos 4 //CAS Latency, 2 2 3 3 +#define SDRAMC_CR0_CASDELAY_Msk (0x07 << SDRAMC_CR0_CASDELAY_Pos) + +#define SDRAMC_CR1_TRP_Pos 0 +#define SDRAMC_CR1_TRP_Msk (0x07 << SDRAMC_CR1_TRP_Pos) +#define SDRAMC_CR1_TRCD_Pos 3 +#define SDRAMC_CR1_TRCD_Msk (0x07 << SDRAMC_CR1_TRCD_Pos) +#define SDRAMC_CR1_TRC_Pos 6 +#define SDRAMC_CR1_TRC_Msk (0x0F << SDRAMC_CR1_TRC_Pos) +#define SDRAMC_CR1_TRAS_Pos 10 +#define SDRAMC_CR1_TRAS_Msk (0x07 << SDRAMC_CR1_TRAS_Pos) +#define SDRAMC_CR1_TRRD_Pos 13 +#define SDRAMC_CR1_TRRD_Msk (0x03 << SDRAMC_CR1_TRRD_Pos) +#define SDRAMC_CR1_TMRD_Pos 15 +#define SDRAMC_CR1_TMRD_Msk (0x07 << SDRAMC_CR1_TMRD_Pos) +#define SDRAMC_CR1_32BIT_Pos 18 //SDRAMC的接å�£æ•°æ�®ä½�宽,1 32bit 0 16bit +#define SDRAMC_CR1_32BIT_Msk (0x01 << SDRAMC_CR1_32BIT_Pos) +#define SDRAMC_CR1_BANK_Pos 19 //SDRAMæ¯�个颗粒有几个bank,0 2 banks 1 4 banks +#define SDRAMC_CR1_BANK_Msk (0x01 << SDRAMC_CR1_BANK_Pos) +#define SDRAMC_CR1_CELL32BIT_Pos 20 //SDRAM颗粒的ä½�宽,1 32bit 0 16bit +#define SDRAMC_CR1_CELL32BIT_Msk (0x01 << SDRAMC_CR1_CELL32BIT_Pos) +#define SDRAMC_CR1_CELLSIZE_Pos 21 //SDRAM颗粒的容é‡�,0 64Mb 1 128Mb 2 256Mb 3 16Mb +#define SDRAMC_CR1_CELLSIZE_Msk (0x03 << SDRAMC_CR1_CELLSIZE_Pos) +#define SDRAMC_CR1_HIGHSPEED_Pos 23 //当hclk大于100MHz时,这一ä½�å¿…é¡»é…�置为1,å�¦åˆ™ä¸º0 +#define SDRAMC_CR1_HIGHSPEED_Msk (0x01 << SDRAMC_CR1_HIGHSPEED_Pos) + +#define SDRAMC_REFRESH_RATE_Pos 0 +#define SDRAMC_REFRESH_RATE_Msk (0xFFF << SDRAMC_REFRESH_RATE_Pos) +#define SDRAMC_REFRESH_EN_Pos 12 +#define SDRAMC_REFRESH_EN_Msk (0x01 << SDRAMC_REFRESH_EN_Pos) + +#define SDRAMC_LATCH_INEDGE_Pos 0 //哪个沿æ�¥é”�存从SDRAM中读回的数æ�®ï¼Œ0 上å�‡æ²¿ 1 下é™�沿 +#define SDRAMC_LATCH_INEDGE_Msk (0x01 << SDRAMC_LATCH_INEDGE_Pos) +#define SDRAMC_LATCH_OUTEDGE_Pos 1 //哪个沿去é”�å­˜é€�ç»™SDRAM的数æ�®ï¼Œ1 上å�‡æ²¿ 0 下é™�沿 +#define SDRAMC_LATCH_OUTEDGE_Msk (0x01 << SDRAMC_LATCH_OUTEDGE_Pos) +#define SDRAMC_LATCH_WAITST_Pos 2 +#define SDRAMC_LATCH_WAITST_Msk (0x01 << SDRAMC_LATCH_WAITST_Pos) + +typedef struct +{ __IO uint32_t IE; - - __IO uint32_t IF; //写1清零 - + + __IO uint32_t IF; //写1清零 + __IO uint32_t IM; - + __IO uint32_t CR; - + __IO uint32_t ADDR; - + __IO uint32_t CMD; } NORFLC_TypeDef; +#define NORFLC_IE_FINISH_Pos 0 +#define NORFLC_IE_FINISH_Msk (0x01 << NORFLC_IE_FINISH_Pos) +#define NORFLC_IE_TIMEOUT_Pos 1 +#define NORFLC_IE_TIMEOUT_Msk (0x01 << NORFLC_IE_TIMEOUT_Pos) + +#define NORFLC_IF_FINISH_Pos 0 +#define NORFLC_IF_FINISH_Msk (0x01 << NORFLC_IF_FINISH_Pos) +#define NORFLC_IF_TIMEOUT_Pos 1 +#define NORFLC_IF_TIMEOUT_Msk (0x01 << NORFLC_IF_TIMEOUT_Pos) + +#define NORFLC_IM_FINISH_Pos 0 +#define NORFLC_IM_FINISH_Msk (0x01 << NORFLC_IM_FINISH_Pos) +#define NORFLC_IM_TIMEOUT_Pos 1 +#define NORFLC_IM_TIMEOUT_Msk (0x01 << NORFLC_IM_TIMEOUT_Pos) + +#define NORFLC_CR_RDTIME_Pos 0 //Oen下é™�沿å�Žå¤šå°‘个时钟周期å�Žé‡‡æ ·è¯»å›žçš„æ•°æ�®ã€‚0表示1个时钟周期 +#define NORFLC_CR_RDTIME_Msk (0x1F << NORFLC_CR_RDTIME_Pos) +#define NORFLC_CR_WRTIME_Pos 5 //输出Wen的低电平宽度。0表示1个时钟周期 +#define NORFLC_CR_WRTIME_Msk (0x07 << NORFLC_CR_WRTIME_Pos) +#define NORFLC_CR_BYTEIF_Pos 8 //外部NOR FLASHæ•°æ�®å®½åº¦ï¼Œ1 8ä½� 0 16ä½� +#define NORFLC_CR_BYTEIF_Msk (0x01 << NORFLC_CR_BYTEIF_Pos) + +#define NORFLC_CMD_DATA_Pos 0 //在PROGRAM命令中,DATA是è¦�写入NOR FLASH的数æ�®ï¼›åœ¨READ命令中,DATA是从NOR FLASH读回的数æ�® +#define NORFLC_CMD_DATA_Msk (0xFFFF << NORFLC_CMD_DATA_Pos) +#define NORFLC_CMD_CMD_Pos 16 //需è¦�执行的命令,0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE +#define NORFLC_CMD_CMD_Msk (0x07 << NORFLC_CMD_CMD_Pos) + +typedef struct +{ + __IO uint32_t CR; -#define NORFLC_IE_FINISH_Pos 0 -#define NORFLC_IE_FINISH_Msk (0x01 << NORFLC_IE_FINISH_Pos) -#define NORFLC_IE_TIMEOUT_Pos 1 -#define NORFLC_IE_TIMEOUT_Msk (0x01 << NORFLC_IE_TIMEOUT_Pos) + __O uint32_t DATAIN; -#define NORFLC_IF_FINISH_Pos 0 -#define NORFLC_IF_FINISH_Msk (0x01 << NORFLC_IF_FINISH_Pos) -#define NORFLC_IF_TIMEOUT_Pos 1 -#define NORFLC_IF_TIMEOUT_Msk (0x01 << NORFLC_IF_TIMEOUT_Pos) + __IO uint32_t INIVAL; -#define NORFLC_IM_FINISH_Pos 0 -#define NORFLC_IM_FINISH_Msk (0x01 << NORFLC_IM_FINISH_Pos) -#define NORFLC_IM_TIMEOUT_Pos 1 -#define NORFLC_IM_TIMEOUT_Msk (0x01 << NORFLC_IM_TIMEOUT_Pos) + __I uint32_t RESULT; +} CRC_TypeDef; -#define NORFLC_CR_RDTIME_Pos 0 //Oen下é™�沿å�Žå¤šå°‘个时钟周期å�Žé‡‡æ ·è¯»å›žçš„æ•°æ�®ã€‚0表示1个时钟周期 -#define NORFLC_CR_RDTIME_Msk (0x1F << NORFLC_CR_RDTIME_Pos) -#define NORFLC_CR_WRTIME_Pos 5 //输出Wen的低电平宽度。0表示1个时钟周期 -#define NORFLC_CR_WRTIME_Msk (0x07 << NORFLC_CR_WRTIME_Pos) -#define NORFLC_CR_BYTEIF_Pos 8 //外部NOR FLASHæ•°æ�®å®½åº¦ï¼Œ1 8ä½� 0 16ä½� -#define NORFLC_CR_BYTEIF_Msk (0x01 << NORFLC_CR_BYTEIF_Pos) +#define CRC_CR_EN_Pos 0 +#define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos) +#define CRC_CR_OREV_Pos 1 //输出结果是å�¦ç¿»è½¬ +#define CRC_CR_OREV_Msk (0x01 << CRC_CR_OREV_Pos) +#define CRC_CR_ONOT_Pos 2 //输出结果是å�¦å�–å�� +#define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos) +#define CRC_CR_CRC16_Pos 3 //1 CRC16 0 CRC32 +#define CRC_CR_CRC16_Msk (0x01 << CRC_CR_CRC16_Pos) +#define CRC_CR_IBITS_Pos 4 //输入数æ�®æœ‰æ•ˆä½�æ•° 0 32ä½� 1 16ä½� 2 8ä½� +#define CRC_CR_IBITS_Msk (0x03 << CRC_CR_IBITS_Pos) + +typedef struct +{ + __IO uint32_t MINSEC; //分秒计数 -#define NORFLC_CMD_DATA_Pos 0 //在PROGRAM命令中,DATA是è¦�写入NOR FLASH的数æ�®ï¼›åœ¨READ命令中,DATA是从NOR FLASH读回的数æ�® -#define NORFLC_CMD_DATA_Msk (0xFFFF << NORFLC_CMD_DATA_Pos) -#define NORFLC_CMD_CMD_Pos 16 //需è¦�执行的命令,0 READ 1 RESET 2 AUTOMATIC SELECT 3 PROGRAM 4 CHIP ERASE 5 SECTOR ERASE -#define NORFLC_CMD_CMD_Msk (0x07 << NORFLC_CMD_CMD_Pos) + __IO uint32_t DATHUR; //日时计数 + __IO uint32_t MONDAY; //月周计数 + __IO uint32_t YEAR; //[11:0] 年计数,支æŒ�1901-2199 + __IO uint32_t MINSECAL; //分秒闹铃设置 -typedef struct { - __IO uint32_t CR; - - __O uint32_t DATAIN; - - __IO uint32_t INIVAL; - - __I uint32_t RESULT; -} CRC_TypeDef; + __IO uint32_t DAYHURAL; //周时闹铃设置 + __IO uint32_t LOAD; //将设置寄存器中的值å�Œæ­¥åˆ°RTC中,å�Œæ­¥å®Œæˆ�自动清零 -#define CRC_CR_EN_Pos 0 -#define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos) -#define CRC_CR_OREV_Pos 1 //输出结果是å�¦ç¿»è½¬ -#define CRC_CR_OREV_Msk (0x01 << CRC_CR_OREV_Pos) -#define CRC_CR_ONOT_Pos 2 //输出结果是å�¦å�–å�� -#define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos) -#define CRC_CR_CRC16_Pos 3 //1 CRC16 0 CRC32 -#define CRC_CR_CRC16_Msk (0x01 << CRC_CR_CRC16_Pos) -#define CRC_CR_IBITS_Pos 4 //输入数æ�®æœ‰æ•ˆä½�æ•° 0 32ä½� 1 16ä½� 2 8ä½� -#define CRC_CR_IBITS_Msk (0x03 << CRC_CR_IBITS_Pos) - - - - -typedef struct { - __IO uint32_t MINSEC; //分秒计数 - - __IO uint32_t DATHUR; //日时计数 - - __IO uint32_t MONDAY; //月周计数 - - __IO uint32_t YEAR; //[11:0] 年计数,支æŒ�1901-2199 - - __IO uint32_t MINSECAL; //分秒闹铃设置 - - __IO uint32_t DAYHURAL; //周时闹铃设置 - - __IO uint32_t LOAD; //将设置寄存器中的值å�Œæ­¥åˆ°RTC中,å�Œæ­¥å®Œæˆ�自动清零 - __IO uint32_t IE; - - __IO uint32_t IF; //写1清零 - - __IO uint32_t EN; //[0] 1 RTC使能 - - __IO uint32_t CFGABLE; //[0] 1 RTCå�¯é…�ç½® - - __IO uint32_t TRIM; //时钟调整 - - __IO uint32_t TRIMM; //时钟微调整 + + __IO uint32_t IF; //写1清零 + + __IO uint32_t EN; //[0] 1 RTC使能 + + __IO uint32_t CFGABLE; //[0] 1 RTCå�¯é…�ç½® + + __IO uint32_t TRIM; //时钟调整 + + __IO uint32_t TRIMM; //时钟微调整 } RTC_TypeDef; +#define RTC_LOAD_TIME_Pos 0 +#define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos) +#define RTC_LOAD_ALARM_Pos 1 +#define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos) + +#define RTC_MINSEC_SEC_Pos 0 //秒计数,å�–值0--59 +#define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos) +#define RTC_MINSEC_MIN_Pos 6 //分钟计数,å�–值0--59 +#define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos) + +#define RTC_DATHUR_HOUR_Pos 0 //å°�时计数,å�–值0--23 +#define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos) +#define RTC_DATHUR_DATE_Pos 5 //date of month,å�–值1--31 +#define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos) + +#define RTC_MONDAY_DAY_Pos 0 //day of week,å�–值0--6 +#define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos) +#define RTC_MONDAY_MON_Pos 3 //月份计数,å�–值1--12 +#define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos) + +#define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置 +#define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos) +#define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置 +#define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos) + +#define RTC_DAYHURAL_HOUR_Pos 0 //闹钟å°�时设置 +#define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos) +#define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效 +#define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos) +#define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效 +#define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos) +#define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效 +#define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos) +#define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效 +#define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos) +#define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效 +#define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos) +#define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效 +#define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos) +#define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效 +#define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos) + +#define RTC_IE_SEC_Pos 0 //秒中断使能 +#define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos) +#define RTC_IE_MIN_Pos 1 +#define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos) +#define RTC_IE_HOUR_Pos 2 +#define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos) +#define RTC_IE_DATE_Pos 3 +#define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos) +#define RTC_IE_ALARM_Pos 4 +#define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos) + +#define RTC_IF_SEC_Pos 0 //写1清零 +#define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos) +#define RTC_IF_MIN_Pos 1 +#define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos) +#define RTC_IF_HOUR_Pos 2 +#define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos) +#define RTC_IF_DATE_Pos 3 +#define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos) +#define RTC_IF_ALARM_Pos 4 +#define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos) + +#define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,å�¦åˆ™è°ƒæ•´ä¸º32768+ADJ +#define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos) +#define RTC_TRIM_DEC_Pos 8 +#define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos) + +#define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,å�¦åˆ™è°ƒæ•´ä¸º(32768±ADJ)-1 \ + //cycles=0时,ä¸�进行微调整;cycles=1,则n为2ï¼›cycles=7,则n为8;以此类推 +#define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos) +#define RTC_TRIMM_INC_Pos 3 +#define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos) + +typedef struct +{ + __IO uint32_t LOAD; //喂狗使计数器装载LOAD值 -#define RTC_LOAD_TIME_Pos 0 -#define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos) -#define RTC_LOAD_ALARM_Pos 1 -#define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos) - -#define RTC_MINSEC_SEC_Pos 0 //秒计数,å�–值0--59 -#define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos) -#define RTC_MINSEC_MIN_Pos 6 //分钟计数,å�–值0--59 -#define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos) - -#define RTC_DATHUR_HOUR_Pos 0 //å°�时计数,å�–值0--23 -#define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos) -#define RTC_DATHUR_DATE_Pos 5 //date of month,å�–值1--31 -#define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos) - -#define RTC_MONDAY_DAY_Pos 0 //day of week,å�–值0--6 -#define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos) -#define RTC_MONDAY_MON_Pos 3 //月份计数,å�–值1--12 -#define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos) - -#define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置 -#define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos) -#define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置 -#define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos) - -#define RTC_DAYHURAL_HOUR_Pos 0 //闹钟å°�时设置 -#define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos) -#define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效 -#define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos) -#define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效 -#define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos) -#define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效 -#define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos) -#define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效 -#define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos) -#define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效 -#define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos) -#define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效 -#define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos) -#define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效 -#define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos) - -#define RTC_IE_SEC_Pos 0 //秒中断使能 -#define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos) -#define RTC_IE_MIN_Pos 1 -#define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos) -#define RTC_IE_HOUR_Pos 2 -#define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos) -#define RTC_IE_DATE_Pos 3 -#define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos) -#define RTC_IE_ALARM_Pos 4 -#define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos) - -#define RTC_IF_SEC_Pos 0 //写1清零 -#define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos) -#define RTC_IF_MIN_Pos 1 -#define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos) -#define RTC_IF_HOUR_Pos 2 -#define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos) -#define RTC_IF_DATE_Pos 3 -#define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos) -#define RTC_IF_ALARM_Pos 4 -#define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos) - -#define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,å�¦åˆ™è°ƒæ•´ä¸º32768+ADJ -#define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos) -#define RTC_TRIM_DEC_Pos 8 -#define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos) - -#define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,å�¦åˆ™è°ƒæ•´ä¸º(32768±ADJ)-1 - //cycles=0时,ä¸�进行微调整;cycles=1,则n为2ï¼›cycles=7,则n为8;以此类推 -#define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos) -#define RTC_TRIMM_INC_Pos 3 -#define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos) - - - - -typedef struct { - __IO uint32_t LOAD; //喂狗使计数器装载LOAD值 - - __I uint32_t VALUE; - - __IO uint32_t CR; - - __IO uint32_t IF; //计数到0时硬件置ä½�,软件写1清除标志 - - __IO uint32_t FEED; //写0x55å–‚ç‹— -} WDT_TypeDef; + __I uint32_t VALUE; + __IO uint32_t CR; -#define WDT_CR_EN_Pos 0 -#define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos) -#define WDT_CR_RSTEN_Pos 1 -#define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos) + __IO uint32_t IF; //计数到0时硬件置ä½�,软件写1清除标志 + __IO uint32_t FEED; //写0x55å–‚ç‹— +} WDT_TypeDef; + +#define WDT_CR_EN_Pos 0 +#define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos) +#define WDT_CR_RSTEN_Pos 1 +#define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos) /******************************************************************************/ /* Peripheral memory map */ /******************************************************************************/ -#define RAM_BASE 0x20000000 -#define AHB_BASE 0x40000000 -#define APB_BASE 0x40010000 +#define RAM_BASE 0x20000000 +#define AHB_BASE 0x40000000 +#define APB_BASE 0x40010000 -#define NORFLC_BASE 0x60000000 -#define NORFLM_BASE 0x61000000 +#define NORFLC_BASE 0x60000000 +#define NORFLM_BASE 0x61000000 -#define SRAMC_BASE 0x68000000 -#define SRAMM_BASE 0x69000000 +#define SRAMC_BASE 0x68000000 +#define SRAMM_BASE 0x69000000 -#define SDRAMC_BASE 0x78000000 -#define SDRAMM_BASE 0x70000000 +#define SDRAMC_BASE 0x78000000 +#define SDRAMM_BASE 0x70000000 /* AHB Peripheral memory map */ -#define SYS_BASE (AHB_BASE + 0x00000) +#define SYS_BASE (AHB_BASE + 0x00000) -#define DMA_BASE (AHB_BASE + 0x01000) +#define DMA_BASE (AHB_BASE + 0x01000) -#define LCD_BASE (AHB_BASE + 0x02000) +#define LCD_BASE (AHB_BASE + 0x02000) -#define CRC_BASE (AHB_BASE + 0x03000) +#define CRC_BASE (AHB_BASE + 0x03000) -#define SDIO_BASE (AHB_BASE + 0x04000) +#define SDIO_BASE (AHB_BASE + 0x04000) /* APB Peripheral memory map */ -#define PORT_BASE (APB_BASE + 0x00000) +#define PORT_BASE (APB_BASE + 0x00000) -#define GPIOA_BASE (APB_BASE + 0x01000) -#define GPIOB_BASE (APB_BASE + 0x02000) -#define GPIOC_BASE (APB_BASE + 0x03000) -#define GPIOD_BASE (APB_BASE + 0x04000) -#define GPIOM_BASE (APB_BASE + 0x05000) -#define GPION_BASE (APB_BASE + 0x06000) -#define GPIOP_BASE (APB_BASE + 0x08000) +#define GPIOA_BASE (APB_BASE + 0x01000) +#define GPIOB_BASE (APB_BASE + 0x02000) +#define GPIOC_BASE (APB_BASE + 0x03000) +#define GPIOD_BASE (APB_BASE + 0x04000) +#define GPIOM_BASE (APB_BASE + 0x05000) +#define GPION_BASE (APB_BASE + 0x06000) +#define GPIOP_BASE (APB_BASE + 0x08000) -#define TIMR0_BASE (APB_BASE + 0x07000) -#define TIMR1_BASE (APB_BASE + 0x0700C) -#define TIMR2_BASE (APB_BASE + 0x07018) -#define TIMR3_BASE (APB_BASE + 0x07024) -#define TIMR4_BASE (APB_BASE + 0x07030) -#define TIMR5_BASE (APB_BASE + 0x0703C) -#define TIMRG_BASE (APB_BASE + 0x07060) +#define TIMR0_BASE (APB_BASE + 0x07000) +#define TIMR1_BASE (APB_BASE + 0x0700C) +#define TIMR2_BASE (APB_BASE + 0x07018) +#define TIMR3_BASE (APB_BASE + 0x07024) +#define TIMR4_BASE (APB_BASE + 0x07030) +#define TIMR5_BASE (APB_BASE + 0x0703C) +#define TIMRG_BASE (APB_BASE + 0x07060) -#define WDT_BASE (APB_BASE + 0x09000) +#define WDT_BASE (APB_BASE + 0x09000) -#define PWM0_BASE (APB_BASE + 0x0A000) -#define PWM1_BASE (APB_BASE + 0x0A020) -#define PWM2_BASE (APB_BASE + 0x0A040) -#define PWM3_BASE (APB_BASE + 0x0A060) -#define PWM4_BASE (APB_BASE + 0x0A080) -#define PWM5_BASE (APB_BASE + 0x0A0A0) -#define PWMG_BASE (APB_BASE + 0x0A180) +#define PWM0_BASE (APB_BASE + 0x0A000) +#define PWM1_BASE (APB_BASE + 0x0A020) +#define PWM2_BASE (APB_BASE + 0x0A040) +#define PWM3_BASE (APB_BASE + 0x0A060) +#define PWM4_BASE (APB_BASE + 0x0A080) +#define PWM5_BASE (APB_BASE + 0x0A0A0) +#define PWMG_BASE (APB_BASE + 0x0A180) -#define RTC_BASE (APB_BASE + 0x0B000) +#define RTC_BASE (APB_BASE + 0x0B000) -#define ADC0_BASE (APB_BASE + 0x0C000) -#define ADC1_BASE (APB_BASE + 0x0D000) +#define ADC0_BASE (APB_BASE + 0x0C000) +#define ADC1_BASE (APB_BASE + 0x0D000) -#define FLASH_BASE (APB_BASE + 0x0F000) +#define FLASH_BASE (APB_BASE + 0x0F000) -#define UART0_BASE (APB_BASE + 0x10000) -#define UART1_BASE (APB_BASE + 0x11000) -#define UART2_BASE (APB_BASE + 0x12000) -#define UART3_BASE (APB_BASE + 0x13000) +#define UART0_BASE (APB_BASE + 0x10000) +#define UART1_BASE (APB_BASE + 0x11000) +#define UART2_BASE (APB_BASE + 0x12000) +#define UART3_BASE (APB_BASE + 0x13000) -#define I2C0_BASE (APB_BASE + 0x18000) -#define I2C1_BASE (APB_BASE + 0x19000) +#define I2C0_BASE (APB_BASE + 0x18000) +#define I2C1_BASE (APB_BASE + 0x19000) -#define SPI0_BASE (APB_BASE + 0x1C000) -#define SPI1_BASE (APB_BASE + 0x1D000) - -#define CAN_BASE (APB_BASE + 0x20000) +#define SPI0_BASE (APB_BASE + 0x1C000) +#define SPI1_BASE (APB_BASE + 0x1D000) +#define CAN_BASE (APB_BASE + 0x20000) /******************************************************************************/ /* Peripheral declaration */ /******************************************************************************/ -#define SYS ((SYS_TypeDef *) SYS_BASE) - -#define PORT ((PORT_TypeDef *) PORT_BASE) +#define SYS ((SYS_TypeDef *)SYS_BASE) -#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) -#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) -#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) -#define GPIOM ((GPIO_TypeDef *) GPIOM_BASE) -#define GPION ((GPIO_TypeDef *) GPION_BASE) -#define GPIOP ((GPIO_TypeDef *) GPIOP_BASE) +#define PORT ((PORT_TypeDef *)PORT_BASE) -#define TIMR0 ((TIMR_TypeDef *) TIMR0_BASE) -#define TIMR1 ((TIMR_TypeDef *) TIMR1_BASE) -#define TIMR2 ((TIMR_TypeDef *) TIMR2_BASE) -#define TIMR3 ((TIMR_TypeDef *) TIMR3_BASE) -#define TIMR4 ((TIMR_TypeDef *) TIMR4_BASE) -#define TIMR5 ((TIMR_TypeDef *) TIMR5_BASE) -#define TIMRG ((TIMRG_TypeDef*) TIMRG_BASE) +#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *)GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *)GPIOC_BASE) +#define GPIOM ((GPIO_TypeDef *)GPIOM_BASE) +#define GPION ((GPIO_TypeDef *)GPION_BASE) +#define GPIOP ((GPIO_TypeDef *)GPIOP_BASE) -#define UART0 ((UART_TypeDef *) UART0_BASE) -#define UART1 ((UART_TypeDef *) UART1_BASE) -#define UART2 ((UART_TypeDef *) UART2_BASE) -#define UART3 ((UART_TypeDef *) UART3_BASE) +#define TIMR0 ((TIMR_TypeDef *)TIMR0_BASE) +#define TIMR1 ((TIMR_TypeDef *)TIMR1_BASE) +#define TIMR2 ((TIMR_TypeDef *)TIMR2_BASE) +#define TIMR3 ((TIMR_TypeDef *)TIMR3_BASE) +#define TIMR4 ((TIMR_TypeDef *)TIMR4_BASE) +#define TIMR5 ((TIMR_TypeDef *)TIMR5_BASE) +#define TIMRG ((TIMRG_TypeDef *)TIMRG_BASE) -#define SPI0 ((SPI_TypeDef *) SPI0_BASE) -#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define UART0 ((UART_TypeDef *)UART0_BASE) +#define UART1 ((UART_TypeDef *)UART1_BASE) +#define UART2 ((UART_TypeDef *)UART2_BASE) +#define UART3 ((UART_TypeDef *)UART3_BASE) -#define I2C0 ((I2C_TypeDef *) I2C0_BASE) -#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define SPI0 ((SPI_TypeDef *)SPI0_BASE) +#define SPI1 ((SPI_TypeDef *)SPI1_BASE) -#define ADC0 ((ADC_TypeDef *) ADC0_BASE) -#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define I2C0 ((I2C_TypeDef *)I2C0_BASE) +#define I2C1 ((I2C_TypeDef *)I2C1_BASE) -#define PWM0 ((PWM_TypeDef *) PWM0_BASE) -#define PWM1 ((PWM_TypeDef *) PWM1_BASE) -#define PWM2 ((PWM_TypeDef *) PWM2_BASE) -#define PWM3 ((PWM_TypeDef *) PWM3_BASE) -#define PWM4 ((PWM_TypeDef *) PWM4_BASE) -#define PWM5 ((PWM_TypeDef *) PWM5_BASE) -#define PWMG ((PWMG_TypeDef *) PWMG_BASE) +#define ADC0 ((ADC_TypeDef *)ADC0_BASE) +#define ADC1 ((ADC_TypeDef *)ADC1_BASE) -#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define PWM0 ((PWM_TypeDef *)PWM0_BASE) +#define PWM1 ((PWM_TypeDef *)PWM1_BASE) +#define PWM2 ((PWM_TypeDef *)PWM2_BASE) +#define PWM3 ((PWM_TypeDef *)PWM3_BASE) +#define PWM4 ((PWM_TypeDef *)PWM4_BASE) +#define PWM5 ((PWM_TypeDef *)PWM5_BASE) +#define PWMG ((PWMG_TypeDef *)PWMG_BASE) -#define DMA ((DMA_TypeDef *) DMA_BASE) +#define SDIO ((SDIO_TypeDef *)SDIO_BASE) -#define CAN ((CAN_TypeDef *) CAN_BASE) +#define DMA ((DMA_TypeDef *)DMA_BASE) -#define LCD ((LCD_TypeDef *) LCD_BASE) +#define CAN ((CAN_TypeDef *)CAN_BASE) -#define CRC ((CRC_TypeDef *) CRC_BASE) +#define LCD ((LCD_TypeDef *)LCD_BASE) -#define RTC ((RTC_TypeDef *) RTC_BASE) +#define CRC ((CRC_TypeDef *)CRC_BASE) -#define WDT ((WDT_TypeDef *) WDT_BASE) +#define RTC ((RTC_TypeDef *)RTC_BASE) -#define FLASH ((FLASH_Typedef*) FLASH_BASE) +#define WDT ((WDT_TypeDef *)WDT_BASE) -#define SRAMC ((SRAMC_TypeDef*) SRAMC_BASE) +#define FLASH ((FLASH_Typedef *)FLASH_BASE) -#define NORFLC ((NORFLC_TypeDef*) NORFLC_BASE) +#define SRAMC ((SRAMC_TypeDef *)SRAMC_BASE) -#define SDRAMC ((SDRAMC_TypeDef*) SDRAMC_BASE) +#define NORFLC ((NORFLC_TypeDef *)NORFLC_BASE) +#define SDRAMC ((SDRAMC_TypeDef *)SDRAMC_BASE) - -typedef void (* Func_void_void) (void); - +typedef void (*Func_void_void)(void); #include "SWM320_port.h" #include "SWM320_gpio.h" @@ -3622,5 +3565,4 @@ typedef void (* Func_void_void) (void); #include "SWM320_rtc.h" #include "SWM320_wdt.h" - #endif //__SWM320_H__ diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s b/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s index aa7fb9c2cf..db1c455bf9 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/arm/startup_SWM320.s +++ b/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 diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s b/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s index 9d8742e969..1a59a2318a 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s +++ b/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 diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/iar/startup_SWM320.s b/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/iar/startup_SWM320.s index 7463384892..a7a4d89f50 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/startup/iar/startup_SWM320.s +++ b/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 diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c index 08f5a59bc3..0797d828f9 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c +++ b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.c @@ -17,56 +17,48 @@ * -ECTION WITH THEIR PRODUCTS. * * COPYRIGHT 2012 Synwit Technology -*******************************************************************************************************************************************/ +*******************************************************************************************************************************************/ #include #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é”�定 } diff --git a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h b/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h index 3967e4059c..4db7f29433 100644 --- a/bsp/swm320/libraries/CMSIS/DeviceSupport/system_SWM320.h +++ b/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 } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c index 8f73ec62c9..983b4bcff1 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h index 96e10972e3..10b4437527 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_adc.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c index e7b30e3cb2..f1f7a36ba7 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.c +++ b/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 指定è¦�被设置的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_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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  +******************************************************************************************************************************************/ +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 指定è¦�被设置的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)也ä¸�å°�试é‡�å�‘ +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的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_AbortTransmit() -* ¹¦ÄÜ˵Ã÷: ÖÕÖ¹·¢ËÍ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÕýÔÚ½øÐеķ¢ËÍÎÞ·¨ÖÕÖ¹£¬µ«Ö´ÐдËÃüÁîºóÈô·¢ËÍʧ°Ü²»»áÔÙÖØ·¢ +* 函数å��ç§°: CAN_TXComplete() +* 功能说明: å�‘é€�是å�¦å®Œæˆ� +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: 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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: 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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: 正在进行的å�‘é€�无法终止,但执行此命令å�Žè‹¥å�‘é€�失败ä¸�会å†�é‡�å�‘ ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: 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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: uint32_t 1 有数æ�®å�¯è¯»å‡º 0 没有数æ�® +* 注æ„�事项: æ—  +******************************************************************************************************************************************/ +uint32_t CAN_RXDataAvailable(CAN_TypeDef *CANx) +{ + return (CANx->SR & CAN_SR_RXDA_Msk) ? 1 : 0; +} + +/****************************************************************************************************************************************** +* 函数å��ç§°: 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模å�— +******************************************************************************************************************************************/ +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ä½�滤波器 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* uint32_t check 与mask一起决定了接收到的Message是å�¦æ˜¯è‡ªå·±éœ€è¦�的:check & (~mask) == ID & (~mask)çš„Message通过过滤 * uint32_t mask -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÉèÖÃǰÐèÒªÏȵ÷ÓÃCAN_Close()¹Ø±ÕCANÄ£¿é -******************************************************************************************************************************************/ -void CAN_SetFilter32b(CAN_TypeDef * CANx, uint32_t check, uint32_t mask) -{ - CANx->CR &= ~CAN_CR_AFM_Msk; - CANx->CR |= (CAN_FILTER_32b << CAN_CR_AFM_Pos); - - CANx->FILTER.AMR[3] = mask & 0xFF; - CANx->FILTER.AMR[2] = (mask >> 8) & 0xFF; - CANx->FILTER.AMR[1] = (mask >> 16) & 0xFF; - CANx->FILTER.AMR[0] = (mask >> 24) & 0xFF; - - CANx->FILTER.ACR[3] = check & 0xFF; - CANx->FILTER.ACR[2] = (check >> 8) & 0xFF; - CANx->FILTER.ACR[1] = (check >> 16) & 0xFF; - CANx->FILTER.ACR[0] = (check >> 24) & 0xFF; -} - -/****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: CAN_SetFilter16b() -* ¹¦ÄÜ˵Ã÷: ÉèÖýÓÊÕÂ˲¨Æ÷£¬2¸ö16λÂ˲¨Æ÷ -* Êä Èë: CAN_TypeDef * CANx Ö¸¶¨Òª±»ÉèÖõÄCAN½Ó¿Ú£¬ÓÐЧֵ°üÀ¨CAN -* uint16_t check1 ÓëmaskÒ»Æð¾ö¶¨Á˽ÓÊÕµ½µÄMessageÊÇ·ñÊÇ×Ô¼ºÐèÒªµÄ£ºcheck & (~mask) == ID & (~mask)µÄMessageͨ¹ý¹ýÂË +* 输 出: æ—  +* 注æ„�事项: 设置å‰�需è¦�先调用CAN_Close()关闭CAN模å�— +******************************************************************************************************************************************/ +void CAN_SetFilter32b(CAN_TypeDef *CANx, uint32_t check, uint32_t mask) +{ + CANx->CR &= ~CAN_CR_AFM_Msk; + CANx->CR |= (CAN_FILTER_32b << CAN_CR_AFM_Pos); + + CANx->FILTER.AMR[3] = mask & 0xFF; + CANx->FILTER.AMR[2] = (mask >> 8) & 0xFF; + CANx->FILTER.AMR[1] = (mask >> 16) & 0xFF; + CANx->FILTER.AMR[0] = (mask >> 24) & 0xFF; + + CANx->FILTER.ACR[3] = check & 0xFF; + CANx->FILTER.ACR[2] = (check >> 8) & 0xFF; + CANx->FILTER.ACR[1] = (check >> 16) & 0xFF; + CANx->FILTER.ACR[0] = (check >> 24) & 0xFF; +} + +/****************************************************************************************************************************************** +* 函数å��ç§°: CAN_SetFilter16b() +* 功能说明: 设置接收滤波器,2个16ä½�滤波器 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* uint16_t check1 与mask一起决定了接收到的Message是å�¦æ˜¯è‡ªå·±éœ€è¦�的:check & (~mask) == ID & (~mask)çš„Message通过过滤 * uint16_t mask1 * uint16_t check2 * uint16_t mask2 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÉèÖÃǰÐèÒªÏȵ÷ÓÃCAN_Close()¹Ø±ÕCANÄ£¿é +* 输 出: æ—  +* 注æ„�事项: 设置å‰�需è¦�先调用CAN_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() +* 功能说明: 当RX FIFO中有数æ�®æ—¶ï¼ˆé�žç©ºï¼‰è§¦å�‘中断使能 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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() +* 功能说明: 当RX FIFO中有数æ�®æ—¶ï¼ˆé�žç©ºï¼‰è§¦å�‘中断ç¦�æ­¢ +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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() +* 功能说明: 当TX Buffer空时触å�‘中断使能 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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() +* 功能说明: 当TX Buffer空时触å�‘中断ç¦�æ­¢ +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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计数值达到Error Warning Limit时触å�‘中断使能 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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计数值达到Error Warning Limit时触å�‘中断ç¦�æ­¢ +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 溢出时触å�‘中断使能 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 溢出时触å�‘中断ç¦�æ­¢ +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 溢出中断清除 +* 输 å…¥: CAN_TypeDef * CANx 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的CAN接å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括CAN +* 输 出: 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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h index 7cdd751ca5..2b31a97c7d 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_can.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c index 52634deebb..d07cd28689 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.c +++ b/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 指定è¦�被设置的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åˆ�始值 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h index 6a5dd2f781..639db18cd0 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_crc.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c index 78db4ee2dd..b52e8b5f39 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.c +++ b/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通é�“é…�置,用于存储器间(如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 æ•°æ�®æ�¬è¿�完æˆ�å�Žä¸�产生中断 +* 输 出: æ—  +* 注æ„�事项: æ�¬è¿�æ•°æ�®é‡�以字为å�•元,ä¸�是字节 ******************************************************************************************************************************************/ 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ã€�DMA_CH1ã€�DMA_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ã€�DMA_CH1ã€�DMA_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ã€�DMA_CH1ã€�DMA_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ã€�DMA_CH1ã€�DMA_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ã€�DMA_CH1ã€�DMA_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ã€�DMA_CH1ã€�DMA_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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h index 0857f7d023..b7391a0e9e 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_dma.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c index 8275b602d1..f4a15e8c2c 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.c +++ b/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 指定产生外部中断的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) ******************************************************************************************************************************************/ -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 指定产生外部中断的GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定产生外部中断的GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定产生外部中断的GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定产生外部中断的GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定产生外部中断的GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定产生外部中断的GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: 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 指定产生外部中断的GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定产生外部中断的GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: 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 指定产生外部中断的GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定产生外部中断的GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: å�ªèƒ½æ¸…除边沿触å�‘中断的标志,电平触å�‘中断的标志无法清除,å�ªèƒ½åœ¨å¼•脚电平ä¸�符å�ˆä¸­æ–­è§¦å�‘æ�¡ä»¶å�Žç¡¬ä»¶è‡ªåŠ¨æ¸…é™¤ ******************************************************************************************************************************************/ -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); } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h index 529770e6a6..818d647745 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_exti.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c index d384125db3..0d2b19812f 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.c +++ b/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(); } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h index 40f64fac42..0352eeef82 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_flash.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c index 932608a9e9..29c10c132f 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.c +++ b/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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括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三个引脚有上拉没下拉) ******************************************************************************************************************************************/ -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引脚é…�置为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; + } } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: 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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 输 出: å�‚数指定的引脚的电平状æ€� 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() +* 功能说明: å°†å�‚数指定的从n开始的wä½�连续引脚的电平置高 +* 输 å…¥: GPIO_TypeDef * GPIOx 指定GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 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() +* 功能说明: å°†å�‚数指定的从n开始的wä½�连续引脚的电平置低 +* 输 å…¥: GPIO_TypeDef * GPIOx 指定GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 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() +* 功能说明: å°†å�‚数指定的从n开始的wä½�连续引脚的电平å��转 +* 输 å…¥: GPIO_TypeDef * GPIOx 指定GPIO端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOMã€�GPIONã€�GPIOP +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN22ã€�PIN23 +* 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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括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的电平状æ€� +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOD +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN14ã€�PIN15 +* 输 出: æ—  +* 注æ„�事项: 当GPIOxçš„16个引脚中,有些在主循环中æ“�作,有些在中断ISR中æ“�作时,GPIOx的引脚必须都用GPIO_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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOD +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN14ã€�PIN15 +* 输 出: æ—  +* 注æ„�事项: 当GPIOxçš„16个引脚中,有些在主循环中æ“�作,有些在中断ISR中æ“�作时,GPIOx的引脚必须都用GPIO_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端å�£ï¼Œæœ‰æ•ˆå€¼åŒ…括GPIOAã€�GPIOBã€�GPIOCã€�GPIOD +* uint32_t n 指定GPIO引脚,有效值包括PIN0ã€�PIN1ã€�PIN2ã€�... ... PIN14ã€�PIN15 +* 输 出: æ—  +* 注æ„�事项: 当GPIOxçš„16个引脚中,有些在主循环中æ“�作,有些在中断ISR中æ“�作时,GPIOx的引脚必须都用GPIO_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() +* 功能说明: å°†å�‚数指定的从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类型函数æ“�作 ******************************************************************************************************************************************/ -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() +* 功能说明: å°†å�‚数指定的从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类型函数æ“�作 ******************************************************************************************************************************************/ -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() +* 功能说明: å°†å�‚数指定的从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类型函数æ“�作 ******************************************************************************************************************************************/ -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(); } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h index 3ced2d736e..056f17b07b 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_gpio.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c index 04c414085f..8e093f14ee 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.c +++ b/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 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* 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); //一些关键寄存器å�ªèƒ½åœ¨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; + } + } } /****************************************************************************************************************************************** -* º¯ÊýÃû³Æ: I2C_Open() -* ¹¦ÄÜ˵Ã÷: I2C´ò¿ª£¬ÔÊÐíÊÕ·¢ -* Êä Èë: I2C_TypeDef * I2Cx Ö¸¶¨Òª±»ÉèÖõÄI2C£¬ÓÐЧֵ°üÀ¨I2C0¡¢I2C1 -* Êä ³ö: ÎÞ -* ×¢ÒâÊÂÏî: ÎÞ +* 函数å��ç§°: I2C_Open() +* 功能说明: I2C打开,å…�许收å�‘ +* 输 å…¥: I2C_TypeDef * I2Cx 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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关闭,ç¦�止收å�‘ +* 输 å…¥: I2C_TypeDef * I2Cx 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* uint8_t addr 设备地å�€ +* 输 出: uint8_t 1 接收到ACK 0 接收到NACK +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* 输 出: æ—  +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* uint8_t data è¦�写的数æ�® +* 输 出: uint8_t 1 接收到ACK 0 接收到NACK +* 注æ„�事项: æ—  ******************************************************************************************************************************************/ -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 指定è¦�被设置的I2C,有效值包括I2C0ã€�I2C1 +* uint8_t ack 1 å�‘é€�ACK 0 å�‘é€�NACK +* 输 出: 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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h index 02f1292a28..8547328b35 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_i2c.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c index c26ea71f9d..427df0d4b6 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h index 8091a88f03..d9c78f8d1f 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_lcd.h +++ b/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; //系统时钟ç»�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 -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 //å±�幕在DOTCLK的上å�‡æ²¿é‡‡æ ·æ•°æ�® +#define LCD_SAMPLEDGE_FALL 1 //å±�幕在DOTCLK的下é™�沿采样数æ�® -#define LCD_SAMPLEDGE_RISE 0 //ÆÁÄ»ÔÚDOTCLKµÄÉÏÉýÑØ²ÉÑùÊý¾Ý -#define LCD_SAMPLEDGE_FALL 1 //ÆÁÄ»ÔÚDOTCLKµÄϽµÑزÉÑùÊý¾Ý +#define LCD_HSYNC_1DOTCLK 0 //1个DOTCLK +#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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c index d811ea46e8..a8f6611ffe 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h index 1714454dd7..228ff7032d 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_norflash.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c index 55967f7cac..bb4c7f0731 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.c +++ b/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; + } } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h index 9fa2a24b12..0d1ec56db1 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_port.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c index 2c8e87cd9b..45152822e8 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c +++ b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.c @@ -21,7 +21,6 @@ #include "SWM320.h" #include "SWM320_pwm.h" - /****************************************************************************************************************************************** * 函数å��ç§°: PWM_Init() * 功能说明: PWMåˆ�始化 @@ -30,73 +29,73 @@ * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) +void PWM_Init(PWM_TypeDef *PWMx, PWM_InitStructure *initStruct) { - uint32_t bit_offset = 0; - - SYS->CLKEN |= (0x01 << SYS_CLKEN_PWM_Pos); - - SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk; - SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos); - - PWM_Stop(PWMx, 1, 1); //一些关键寄存器å�ªèƒ½åœ¨PWMå�œæ­¢æ—¶è®¾ç½® - - PWMx->MODE = initStruct->mode; - - PWMx->PERA = initStruct->cycleA; - PWMx->HIGHA = initStruct->hdutyA; - PWMx->DZA = initStruct->deadzoneA; - - PWMx->PERB = initStruct->cycleB; - PWMx->HIGHB = initStruct->hdutyB; - PWMx->DZB = initStruct->deadzoneB; - - PWMx->INIOUT &= ~(PWM_INIOUT_PWMA_Msk | PWM_INIOUT_PWMB_Msk); - PWMx->INIOUT |= (initStruct->initLevelA << PWM_INIOUT_PWMA_Pos) | - (initStruct->initLevelB << PWM_INIOUT_PWMB_Pos); - - PWMG->IM = 0x00000000; - - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - bit_offset = 0; - break; - - case((uint32_t)PWM1): - bit_offset = 2; - break; - - case((uint32_t)PWM2): - bit_offset = 4; - break; - - case((uint32_t)PWM3): - bit_offset = 6; - break; - - case((uint32_t)PWM4): - bit_offset = 8; - break; - - case((uint32_t)PWM5): - bit_offset = 10; - break; - } - - PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); //清除中断标志 - PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); - PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset+1)) | - (initStruct->HEndAIEn << (bit_offset+12)) | (initStruct->HEndBIEn << (bit_offset+13)); - - if(initStruct->NCycleAIEn | initStruct->NCycleBIEn | initStruct->HEndAIEn | initStruct->HEndBIEn) - { - NVIC_EnableIRQ(PWM_IRQn); - } - else if((PWMG->IE & (~((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))))) == 0) - { - NVIC_DisableIRQ(PWM_IRQn); - } + uint32_t bit_offset = 0; + + SYS->CLKEN |= (0x01 << SYS_CLKEN_PWM_Pos); + + SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk; + SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos); + + PWM_Stop(PWMx, 1, 1); //一些关键寄存器å�ªèƒ½åœ¨PWMå�œæ­¢æ—¶è®¾ç½® + + PWMx->MODE = initStruct->mode; + + PWMx->PERA = initStruct->cycleA; + PWMx->HIGHA = initStruct->hdutyA; + PWMx->DZA = initStruct->deadzoneA; + + PWMx->PERB = initStruct->cycleB; + PWMx->HIGHB = initStruct->hdutyB; + PWMx->DZB = initStruct->deadzoneB; + + PWMx->INIOUT &= ~(PWM_INIOUT_PWMA_Msk | PWM_INIOUT_PWMB_Msk); + PWMx->INIOUT |= (initStruct->initLevelA << PWM_INIOUT_PWMA_Pos) | + (initStruct->initLevelB << PWM_INIOUT_PWMB_Pos); + + PWMG->IM = 0x00000000; + + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + bit_offset = 0; + break; + + case ((uint32_t)PWM1): + bit_offset = 2; + break; + + case ((uint32_t)PWM2): + bit_offset = 4; + break; + + case ((uint32_t)PWM3): + bit_offset = 6; + break; + + case ((uint32_t)PWM4): + bit_offset = 8; + break; + + case ((uint32_t)PWM5): + bit_offset = 10; + break; + } + + PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13))); //清除中断标志 + PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13))); + PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset + 1)) | + (initStruct->HEndAIEn << (bit_offset + 12)) | (initStruct->HEndBIEn << (bit_offset + 13)); + + if (initStruct->NCycleAIEn | initStruct->NCycleBIEn | initStruct->HEndAIEn | initStruct->HEndBIEn) + { + NVIC_EnableIRQ(PWM_IRQn); + } + else if ((PWMG->IE & (~((0x01 << bit_offset) | (0x01 << (bit_offset + 1)) | (0x01 << (bit_offset + 12)) | (0x01 << (bit_offset + 13))))) == 0) + { + NVIC_DisableIRQ(PWM_IRQn); + } } /****************************************************************************************************************************************** @@ -108,34 +107,34 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) +void PWM_Start(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos); - break; - - case((uint32_t)PWM1): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos); - break; - - case((uint32_t)PWM2): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos); - break; - - case((uint32_t)PWM3): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos); - break; - - case((uint32_t)PWM4): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos); - break; - - case((uint32_t)PWM5): - PWMG->CHEN |= (chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos); + break; + + case ((uint32_t)PWM1): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos); + break; + + case ((uint32_t)PWM2): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos); + break; + + case ((uint32_t)PWM3): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos); + break; + + case ((uint32_t)PWM4): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos); + break; + + case ((uint32_t)PWM5): + PWMG->CHEN |= (chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -147,34 +146,34 @@ void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) +void PWM_Stop(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos)); - break; - - case((uint32_t)PWM1): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos)); - break; - - case((uint32_t)PWM2): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos)); - break; - - case((uint32_t)PWM3): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos)); - break; - - case((uint32_t)PWM4): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos)); - break; - - case((uint32_t)PWM5): - PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos)); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM0A_Pos) | (chB << PWMG_CHEN_PWM0B_Pos)); + break; + + case ((uint32_t)PWM1): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM1A_Pos) | (chB << PWMG_CHEN_PWM1B_Pos)); + break; + + case ((uint32_t)PWM2): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM2A_Pos) | (chB << PWMG_CHEN_PWM2B_Pos)); + break; + + case ((uint32_t)PWM3): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM3A_Pos) | (chB << PWMG_CHEN_PWM3B_Pos)); + break; + + case ((uint32_t)PWM4): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM4A_Pos) | (chB << PWMG_CHEN_PWM4B_Pos)); + break; + + case ((uint32_t)PWM5): + PWMG->CHEN &= ~((chA << PWMG_CHEN_PWM5A_Pos) | (chB << PWMG_CHEN_PWM5B_Pos)); + break; + } } /****************************************************************************************************************************************** @@ -186,12 +185,12 @@ void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle) +void PWM_SetCycle(PWM_TypeDef *PWMx, uint32_t chn, uint16_t cycle) { - if(chn == PWM_CH_A) - PWMx->PERA = cycle; - else if(chn == PWM_CH_B) - PWMx->PERB = cycle; + if (chn == PWM_CH_A) + PWMx->PERA = cycle; + else if (chn == PWM_CH_B) + PWMx->PERB = cycle; } /****************************************************************************************************************************************** @@ -202,16 +201,16 @@ void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle) * 输 出: uint16_t 获å�–到的周期值 * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn) +uint16_t PWM_GetCycle(PWM_TypeDef *PWMx, uint32_t chn) { - uint16_t cycle = 0; - - if(chn == PWM_CH_A) - cycle = PWMx->PERA; - else if(chn == PWM_CH_B) - cycle = PWMx->PERB; - - return cycle; + uint16_t cycle = 0; + + if (chn == PWM_CH_A) + cycle = PWMx->PERA; + else if (chn == PWM_CH_B) + cycle = PWMx->PERB; + + return cycle; } /****************************************************************************************************************************************** @@ -223,12 +222,12 @@ uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty) +void PWM_SetHDuty(PWM_TypeDef *PWMx, uint32_t chn, uint16_t hduty) { - if(chn == PWM_CH_A) - PWMx->HIGHA = hduty; - else if(chn == PWM_CH_B) - PWMx->HIGHB = hduty; + if (chn == PWM_CH_A) + PWMx->HIGHA = hduty; + else if (chn == PWM_CH_B) + PWMx->HIGHB = hduty; } /****************************************************************************************************************************************** @@ -239,16 +238,16 @@ void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty) * 输 出: uint16_t 获å�–到的高电平时长 * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn) +uint16_t PWM_GetHDuty(PWM_TypeDef *PWMx, uint32_t chn) { - uint16_t hduty = 0; - - if(chn == PWM_CH_A) - hduty = PWMx->HIGHA; - else if(chn == PWM_CH_B) - hduty = PWMx->HIGHB; - - return hduty; + uint16_t hduty = 0; + + if (chn == PWM_CH_A) + hduty = PWMx->HIGHA; + else if (chn == PWM_CH_B) + hduty = PWMx->HIGHB; + + return hduty; } /****************************************************************************************************************************************** @@ -260,12 +259,12 @@ uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone) +void PWM_SetDeadzone(PWM_TypeDef *PWMx, uint32_t chn, uint8_t deadzone) { - if(chn == PWM_CH_A) - PWMx->DZA = deadzone; - else if(chn == PWM_CH_B) - PWMx->DZB = deadzone; + if (chn == PWM_CH_A) + PWMx->DZA = deadzone; + else if (chn == PWM_CH_B) + PWMx->DZB = deadzone; } /****************************************************************************************************************************************** @@ -276,18 +275,17 @@ void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone) * 输 出: uint8_t 获å�–到的死区时长 * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn) +uint8_t PWM_GetDeadzone(PWM_TypeDef *PWMx, uint32_t chn) { - uint8_t deadzone = 0; - - if(chn == PWM_CH_A) - deadzone = PWMx->DZA; - else if(chn == PWM_CH_B) - deadzone = PWMx->DZB; - - return deadzone; -} + uint8_t deadzone = 0; + if (chn == PWM_CH_A) + deadzone = PWMx->DZA; + else if (chn == PWM_CH_B) + deadzone = PWMx->DZB; + + return deadzone; +} /****************************************************************************************************************************************** * 函数å��ç§°: PWM_IntNCycleEn() @@ -297,40 +295,52 @@ uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntNCycleEn(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP0A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP1A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP2A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP3A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP4A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_NEWP5A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_NEWP5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP0A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP1A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP2A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP3A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP4A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_NEWP5A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_NEWP5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -341,40 +351,52 @@ void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntNCycleDis(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_NEWP5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -385,40 +407,52 @@ void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntNCycleClr(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP0A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP1A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP2A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP3A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP4A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_NEWP5A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_NEWP5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP0A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP1A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP2A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP3A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP4A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_NEWP5A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_NEWP5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -429,46 +463,57 @@ void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: uint32_t 1 新周期开始中断已å�‘生 0 新周期开始中断未å�‘生 * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn) +uint32_t PWM_IntNCycleStat(PWM_TypeDef *PWMx, uint32_t chn) { - uint32_t int_stat = 0; - - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP0A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP0B_Msk); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP1A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP1B_Msk); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP2A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP2B_Msk); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP3A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP3B_Msk); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP4A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP4B_Msk); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_NEWP5A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_NEWP5B_Msk); - break; - } - - return int_stat; -} + uint32_t int_stat = 0; + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP0A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP0B_Msk); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP1A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP1B_Msk); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP2A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP2B_Msk); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP3A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP3B_Msk); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP4A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP4B_Msk); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_NEWP5A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_NEWP5B_Msk); + break; + } + + return int_stat; +} /****************************************************************************************************************************************** * 函数å��ç§°: PWM_IntHEndEn() @@ -478,40 +523,52 @@ uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntHEndEn(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND0A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND1A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND2A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND3A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND4A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IE |= (0x01 << PWMG_IE_HEND5A_Pos); - else PWMG->IE |= (0x01 << PWMG_IE_HEND5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND0A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND1A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND2A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND3A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND4A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IE |= (0x01 << PWMG_IE_HEND5A_Pos); + else + PWMG->IE |= (0x01 << PWMG_IE_HEND5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -522,40 +579,52 @@ void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntHEndDis(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND0A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND1A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND2A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND3A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND4A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IE &= ~(0x01 << PWMG_IE_HEND5A_Pos); - else PWMG->IE &= ~(0x01 << PWMG_IE_HEND5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND0A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND1A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND2A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND3A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND4A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IE &= ~(0x01 << PWMG_IE_HEND5A_Pos); + else + PWMG->IE &= ~(0x01 << PWMG_IE_HEND5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -566,40 +635,52 @@ void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: æ—  * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn) +void PWM_IntHEndClr(PWM_TypeDef *PWMx, uint32_t chn) { - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND0A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND0B_Pos); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND1A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND1B_Pos); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND2A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND2B_Pos); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND3A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND3B_Pos); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND4A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND4B_Pos); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) PWMG->IRS = (0x01 << PWMG_IRS_HEND5A_Pos); - else PWMG->IRS = (0x01 << PWMG_IRS_HEND5B_Pos); - break; - } + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND0A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND0B_Pos); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND1A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND1B_Pos); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND2A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND2B_Pos); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND3A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND3B_Pos); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND4A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND4B_Pos); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + PWMG->IRS = (0x01 << PWMG_IRS_HEND5A_Pos); + else + PWMG->IRS = (0x01 << PWMG_IRS_HEND5B_Pos); + break; + } } /****************************************************************************************************************************************** @@ -610,42 +691,54 @@ void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn) * 输 出: uint32_t 1 高电平结æ�Ÿä¸­æ–­å·²å�‘生 0 高电平结æ�Ÿä¸­æ–­æœªå�‘生 * 注æ„�事项: æ—  ******************************************************************************************************************************************/ -uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn) +uint32_t PWM_IntHEndStat(PWM_TypeDef *PWMx, uint32_t chn) { - uint32_t int_stat = 0; - - switch((uint32_t)PWMx) - { - case((uint32_t)PWM0): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND0A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND0B_Msk); - break; - - case((uint32_t)PWM1): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND1A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND1B_Msk); - break; - - case((uint32_t)PWM2): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND2A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND2B_Msk); - break; - - case((uint32_t)PWM3): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND3A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND3B_Msk); - break; - - case((uint32_t)PWM4): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND4A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND4B_Msk); - break; - - case((uint32_t)PWM5): - if(chn == PWM_CH_A) int_stat = (PWMG->IF & PWMG_IF_HEND5A_Msk); - else int_stat = (PWMG->IF & PWMG_IF_HEND5B_Msk); - break; - } - - return int_stat; + uint32_t int_stat = 0; + + switch ((uint32_t)PWMx) + { + case ((uint32_t)PWM0): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND0A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND0B_Msk); + break; + + case ((uint32_t)PWM1): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND1A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND1B_Msk); + break; + + case ((uint32_t)PWM2): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND2A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND2B_Msk); + break; + + case ((uint32_t)PWM3): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND3A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND3B_Msk); + break; + + case ((uint32_t)PWM4): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND4A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND4B_Msk); + break; + + case ((uint32_t)PWM5): + if (chn == PWM_CH_A) + int_stat = (PWMG->IF & PWMG_IF_HEND5A_Msk); + else + int_stat = (PWMG->IF & PWMG_IF_HEND5B_Msk); + break; + } + + return int_stat; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h index 6f857fae37..888e0c5e39 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_pwm.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c index d43ee91f15..0489551511 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h index 13cd0e6785..d534fa4788 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_rtc.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c index 9175cce387..15d5dac922 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h index 52552eed99..d9834291ac 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdio.h +++ b/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]); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c index e1075564cb..90178f07e8 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.c +++ b/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(); } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h index d6f6761226..cf8ca88a7c 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sdram.h +++ b/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); diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c index dcd618ec92..f6025a6e86 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h index a7725ee24e..db024d6bca 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_spi.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c index 62e4c84eed..2818f5a8c1 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.c +++ b/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); // 使能字节ã€�å�Šå­—访问 } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h index 799b271a99..ca3aa92dcc 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_sram.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c index b67711a49a..1451037f0c 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.c +++ b/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; + } } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h index 5cfdce204d..38eaffacd8 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_timr.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c index 73f219f7aa..721184fd94 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h index bad63f420c..08bd6f805b 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.h +++ b/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__ diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c index 59a358b69e..7cc8244685 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.c +++ b/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; } diff --git a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h b/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h index a02a60ba87..692d1fe65b 100644 --- a/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_wdt.h +++ b/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__ -- cgit v1.3.1