mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-06-13 04:33:18 +08:00
delete swm320-lq100 bsp
This commit is contained in:
@@ -147,7 +147,6 @@ jobs:
|
||||
- {RTT_BSP: "wch/arm/ch32f103c8-core", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "wch/arm/ch32f203r-evt", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "swm320", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "swm320-lq100", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "beaglebone", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "zynqmp-r5-axu4ev", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "frdm-k64f", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
|
||||
Vendored
-1
@@ -104,7 +104,6 @@ pipeline {
|
||||
// ['stm32/stm32l496-ali-developer', 'sourcery-arm'], /* CI compile C99 not support */
|
||||
// ['stm32/stm32l496-st-nucleo', 'sourcery-arm'], /* CI compile C99 not support */
|
||||
['stm32f20x', 'sourcery-arm'],
|
||||
['swm320-lq100', 'sourcery-arm'],
|
||||
['beaglebone', 'sourcery-arm'],
|
||||
['frdm-k64f', 'sourcery-arm'],
|
||||
['xplorer4330/M4', 'sourcery-arm'],
|
||||
|
||||
@@ -705,7 +705,6 @@ Path:
|
||||
bsp 列表:
|
||||
|
||||
- swm320
|
||||
- swm320-lq100
|
||||
|
||||
------
|
||||
|
||||
@@ -716,7 +715,6 @@ Copyright: COPYRIGHT 2012 Synwit Technology
|
||||
Path:
|
||||
|
||||
- bsp/swm320/libraries/CMSIS/DeviceSupport
|
||||
- bsp/swm320-lq100/Libraries/SWM320_StdPeriph_Driver
|
||||
|
||||
------
|
||||
|
||||
@@ -727,7 +725,6 @@ Copyright: Copyright (c) 2009 - 2014 ARM LIMITED
|
||||
Path:
|
||||
|
||||
- bsp/swm320/libraries/CMSIS
|
||||
- bsp/swm320-lq100/Libraries/CMSIS/CoreSupport
|
||||
|
||||
### tae32f5300
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,25 +0,0 @@
|
||||
mainmenu "RT-Thread Configuration"
|
||||
|
||||
config BSP_DIR
|
||||
string
|
||||
option env="BSP_ROOT"
|
||||
default "."
|
||||
|
||||
config RTT_DIR
|
||||
string
|
||||
option env="RTT_ROOT"
|
||||
default "../.."
|
||||
|
||||
config PKGS_DIR
|
||||
string
|
||||
option env="PKGS_ROOT"
|
||||
default "packages"
|
||||
|
||||
source "$RTT_DIR/Kconfig"
|
||||
source "$PKGS_DIR/Kconfig"
|
||||
source "drivers/Kconfig"
|
||||
|
||||
config SOC_SWM320
|
||||
bool
|
||||
select ARCH_ARM_CORTEX_M4
|
||||
default y
|
||||
@@ -1,135 +0,0 @@
|
||||
/* ----------------------------------------------------------------------
|
||||
* Copyright (C) 2010-2014 ARM Limited. All rights reserved.
|
||||
*
|
||||
* $Date: 31. July 2014
|
||||
* $Revision: V1.4.4
|
||||
*
|
||||
* Project: CMSIS DSP Library
|
||||
* Title: arm_common_tables.h
|
||||
*
|
||||
* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions
|
||||
*
|
||||
* Target Processor: Cortex-M4/Cortex-M3
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* - Neither the name of ARM LIMITED nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
* -------------------------------------------------------------------- */
|
||||
|
||||
#ifndef _ARM_COMMON_TABLES_H
|
||||
#define _ARM_COMMON_TABLES_H
|
||||
|
||||
#include "arm_math.h"
|
||||
|
||||
extern const uint16_t armBitRevTable[1024];
|
||||
extern const q15_t armRecipTableQ15[64];
|
||||
extern const q31_t armRecipTableQ31[64];
|
||||
//extern const q31_t realCoefAQ31[1024];
|
||||
//extern const q31_t realCoefBQ31[1024];
|
||||
extern const float32_t twiddleCoef_16[32];
|
||||
extern const float32_t twiddleCoef_32[64];
|
||||
extern const float32_t twiddleCoef_64[128];
|
||||
extern const float32_t twiddleCoef_128[256];
|
||||
extern const float32_t twiddleCoef_256[512];
|
||||
extern const float32_t twiddleCoef_512[1024];
|
||||
extern const float32_t twiddleCoef_1024[2048];
|
||||
extern const float32_t twiddleCoef_2048[4096];
|
||||
extern const float32_t twiddleCoef_4096[8192];
|
||||
#define twiddleCoef twiddleCoef_4096
|
||||
extern const q31_t twiddleCoef_16_q31[24];
|
||||
extern const q31_t twiddleCoef_32_q31[48];
|
||||
extern const q31_t twiddleCoef_64_q31[96];
|
||||
extern const q31_t twiddleCoef_128_q31[192];
|
||||
extern const q31_t twiddleCoef_256_q31[384];
|
||||
extern const q31_t twiddleCoef_512_q31[768];
|
||||
extern const q31_t twiddleCoef_1024_q31[1536];
|
||||
extern const q31_t twiddleCoef_2048_q31[3072];
|
||||
extern const q31_t twiddleCoef_4096_q31[6144];
|
||||
extern const q15_t twiddleCoef_16_q15[24];
|
||||
extern const q15_t twiddleCoef_32_q15[48];
|
||||
extern const q15_t twiddleCoef_64_q15[96];
|
||||
extern const q15_t twiddleCoef_128_q15[192];
|
||||
extern const q15_t twiddleCoef_256_q15[384];
|
||||
extern const q15_t twiddleCoef_512_q15[768];
|
||||
extern const q15_t twiddleCoef_1024_q15[1536];
|
||||
extern const q15_t twiddleCoef_2048_q15[3072];
|
||||
extern const q15_t twiddleCoef_4096_q15[6144];
|
||||
extern const float32_t twiddleCoef_rfft_32[32];
|
||||
extern const float32_t twiddleCoef_rfft_64[64];
|
||||
extern const float32_t twiddleCoef_rfft_128[128];
|
||||
extern const float32_t twiddleCoef_rfft_256[256];
|
||||
extern const float32_t twiddleCoef_rfft_512[512];
|
||||
extern const float32_t twiddleCoef_rfft_1024[1024];
|
||||
extern const float32_t twiddleCoef_rfft_2048[2048];
|
||||
extern const float32_t twiddleCoef_rfft_4096[4096];
|
||||
|
||||
/* floating-point bit reversal tables */
|
||||
#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20)
|
||||
#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48)
|
||||
#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56)
|
||||
#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208)
|
||||
#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440)
|
||||
#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448)
|
||||
#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800)
|
||||
#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808)
|
||||
#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032)
|
||||
|
||||
extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH];
|
||||
|
||||
/* fixed-point bit reversal tables */
|
||||
#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12)
|
||||
#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24)
|
||||
#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)
|
||||
|
||||
extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH];
|
||||
extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH];
|
||||
|
||||
/* Tables for Fast Math Sine and Cosine */
|
||||
extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1];
|
||||
extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1];
|
||||
extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1];
|
||||
|
||||
#endif /* ARM_COMMON_TABLES_H */
|
||||
@@ -1,79 +0,0 @@
|
||||
/* ----------------------------------------------------------------------
|
||||
* Copyright (C) 2010-2014 ARM Limited. All rights reserved.
|
||||
*
|
||||
* $Date: 31. July 2014
|
||||
* $Revision: V1.4.4
|
||||
*
|
||||
* Project: CMSIS DSP Library
|
||||
* Title: arm_const_structs.h
|
||||
*
|
||||
* Description: This file has constant structs that are initialized for
|
||||
* user convenience. For example, some can be given as
|
||||
* arguments to the arm_cfft_f32() function.
|
||||
*
|
||||
* Target Processor: Cortex-M4/Cortex-M3
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* - Neither the name of ARM LIMITED nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
* -------------------------------------------------------------------- */
|
||||
|
||||
#ifndef _ARM_CONST_STRUCTS_H
|
||||
#define _ARM_CONST_STRUCTS_H
|
||||
|
||||
#include "arm_math.h"
|
||||
#include "arm_common_tables.h"
|
||||
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096;
|
||||
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096;
|
||||
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096;
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,406 +0,0 @@
|
||||
|
||||
.syntax unified
|
||||
.cpu cortex-m4
|
||||
.fpu softvfp
|
||||
.thumb
|
||||
|
||||
.global g_pfnVectors
|
||||
.global Default_Handler
|
||||
|
||||
/* start address for the initialization values of the .data section.
|
||||
defined in linker script */
|
||||
.word _sidata
|
||||
/* start address for the .data section. defined in linker script */
|
||||
.word _sdata
|
||||
/* end address for the .data section. defined in linker script */
|
||||
.word _edata
|
||||
/* start address for the .bss section. defined in linker script */
|
||||
.word _sbss
|
||||
/* end address for the .bss section. defined in linker script */
|
||||
.word _ebss
|
||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
||||
|
||||
/**
|
||||
* @brief This is the code that gets called when the processor first
|
||||
* starts execution following a reset event. Only the absolutely
|
||||
* necessary set is performed, after which the application
|
||||
* supplied main() routine is called.
|
||||
* @param None
|
||||
* @retval : None
|
||||
*/
|
||||
|
||||
.section .text.Reset_Handler
|
||||
.weak Reset_Handler
|
||||
.type Reset_Handler, %function
|
||||
Reset_Handler:
|
||||
ldr sp, =_estack /* set stack pointer */
|
||||
|
||||
/* Copy the data segment initializers from flash to SRAM */
|
||||
movs r1, #0
|
||||
b LoopCopyDataInit
|
||||
|
||||
CopyDataInit:
|
||||
ldr r3, =_sidata
|
||||
ldr r3, [r3, r1]
|
||||
str r3, [r0, r1]
|
||||
adds r1, r1, #4
|
||||
|
||||
LoopCopyDataInit:
|
||||
ldr r0, =_sdata
|
||||
ldr r3, =_edata
|
||||
adds r2, r0, r1
|
||||
cmp r2, r3
|
||||
bcc CopyDataInit
|
||||
ldr r2, =_sbss
|
||||
b LoopFillZerobss
|
||||
/* Zero fill the bss segment. */
|
||||
FillZerobss:
|
||||
movs r3, #0
|
||||
str r3, [r2], #4
|
||||
|
||||
LoopFillZerobss:
|
||||
ldr r3, = _ebss
|
||||
cmp r2, r3
|
||||
bcc FillZerobss
|
||||
/* Call the application's entry point.*/
|
||||
bl entry
|
||||
bx lr
|
||||
.size Reset_Handler, .-Reset_Handler
|
||||
|
||||
/**
|
||||
* @brief This is the code that gets called when the processor receives an
|
||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
||||
* the system state for examination by a debugger.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
.section .text.Default_Handler,"ax",%progbits
|
||||
Default_Handler:
|
||||
Infinite_Loop:
|
||||
b Infinite_Loop
|
||||
.size Default_Handler, .-Default_Handler
|
||||
/******************************************************************************
|
||||
*
|
||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
||||
* must be placed on this to ensure that it ends up at physical address
|
||||
* 0x0000.0000.
|
||||
*
|
||||
*******************************************************************************/
|
||||
.section .isr_vector,"a",%progbits
|
||||
.type g_pfnVectors, %object
|
||||
.size g_pfnVectors, .-g_pfnVectors
|
||||
|
||||
g_pfnVectors:
|
||||
.word _estack
|
||||
.word Reset_Handler
|
||||
.word NMI_Handler
|
||||
.word HardFault_Handler
|
||||
.word MemManage_Handler
|
||||
.word BusFault_Handler
|
||||
.word UsageFault_Handler
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word SVC_Handler
|
||||
.word DebugMon_Handler
|
||||
.word 0
|
||||
.word PendSV_Handler
|
||||
.word SysTick_Handler
|
||||
|
||||
/* External Interrupts */
|
||||
.word GPIOA0_Handler
|
||||
.word GPIOA1_Handler
|
||||
.word GPIOA2_Handler
|
||||
.word GPIOA3_Handler
|
||||
.word GPIOA4_Handler
|
||||
.word GPIOA5_Handler
|
||||
.word GPIOA6_Handler
|
||||
.word GPIOA7_Handler
|
||||
.word GPIOB0_Handler
|
||||
.word GPIOB1_Handler
|
||||
.word GPIOB2_Handler
|
||||
.word GPIOB3_Handler
|
||||
.word GPIOB4_Handler
|
||||
.word GPIOB5_Handler
|
||||
.word GPIOB6_Handler
|
||||
.word GPIOB7_Handler
|
||||
.word GPIOC0_Handler
|
||||
.word GPIOC1_Handler
|
||||
.word GPIOC2_Handler
|
||||
.word GPIOC3_Handler
|
||||
.word GPIOC4_Handler
|
||||
.word GPIOC5_Handler
|
||||
.word GPIOC6_Handler
|
||||
.word GPIOC7_Handler
|
||||
.word GPIOM0_Handler
|
||||
.word GPIOM1_Handler
|
||||
.word GPIOM2_Handler
|
||||
.word GPIOM3_Handler
|
||||
.word GPIOM4_Handler
|
||||
.word GPIOM5_Handler
|
||||
.word GPIOM6_Handler
|
||||
.word GPIOM7_Handler
|
||||
.word DMA_Handler
|
||||
.word LCD_Handler
|
||||
.word NORFLC_Handler
|
||||
.word CAN_Handler
|
||||
.word PULSE_Handler
|
||||
.word WDT_Handler
|
||||
.word PWM_Handler
|
||||
.word UART0_Handler
|
||||
.word UART1_Handler
|
||||
.word UART2_Handler
|
||||
.word UART3_Handler
|
||||
.word 0
|
||||
.word I2C0_Handler
|
||||
.word I2C1_Handler
|
||||
.word SPI0_Handler
|
||||
.word ADC0_Handler
|
||||
.word RTC_Handler
|
||||
.word ANAC_Handler
|
||||
.word SDIO_Handler
|
||||
.word GPIOA_Handler
|
||||
.word GPIOB_Handler
|
||||
.word GPIOC_Handler
|
||||
.word GPIOM_Handler
|
||||
.word GPION_Handler
|
||||
.word GPIOP_Handler
|
||||
.word ADC1_Handler
|
||||
.word FPU_Handler
|
||||
.word SPI1_Handler
|
||||
.word TIMR0_Handler
|
||||
.word TIMR1_Handler
|
||||
.word TIMR2_Handler
|
||||
.word TIMR3_Handler
|
||||
.word TIMR4_Handler
|
||||
.word TIMR5_Handler
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
||||
* As they are weak aliases, any function with the same name will override
|
||||
* this definition.
|
||||
*
|
||||
*******************************************************************************/
|
||||
.weak NMI_Handler
|
||||
.thumb_set NMI_Handler,Default_Handler
|
||||
|
||||
.weak HardFault_Handler
|
||||
.thumb_set HardFault_Handler,Default_Handler
|
||||
|
||||
.weak MemManage_Handler
|
||||
.thumb_set MemManage_Handler,Default_Handler
|
||||
|
||||
.weak BusFault_Handler
|
||||
.thumb_set BusFault_Handler,Default_Handler
|
||||
|
||||
.weak UsageFault_Handler
|
||||
.thumb_set UsageFault_Handler,Default_Handler
|
||||
|
||||
.weak SVC_Handler
|
||||
.thumb_set SVC_Handler,Default_Handler
|
||||
|
||||
.weak DebugMon_Handler
|
||||
.thumb_set DebugMon_Handler,Default_Handler
|
||||
|
||||
.weak PendSV_Handler
|
||||
.thumb_set PendSV_Handler,Default_Handler
|
||||
|
||||
.weak SysTick_Handler
|
||||
.thumb_set SysTick_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA0_Handler
|
||||
.thumb_set GPIOA0_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA1_Handler
|
||||
.thumb_set GPIOA1_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA2_Handler
|
||||
.thumb_set GPIOA2_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA3_Handler
|
||||
.thumb_set GPIOA3_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA4_Handler
|
||||
.thumb_set GPIOA4_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA5_Handler
|
||||
.thumb_set GPIOA5_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA6_Handler
|
||||
.thumb_set GPIOA6_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA7_Handler
|
||||
.thumb_set GPIOA7_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB0_Handler
|
||||
.thumb_set GPIOB0_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB1_Handler
|
||||
.thumb_set GPIOB1_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB2_Handler
|
||||
.thumb_set GPIOB2_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB3_Handler
|
||||
.thumb_set GPIOB3_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB4_Handler
|
||||
.thumb_set GPIOB4_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB5_Handler
|
||||
.thumb_set GPIOB5_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB6_Handler
|
||||
.thumb_set GPIOB6_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB7_Handler
|
||||
.thumb_set GPIOB7_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC0_Handler
|
||||
.thumb_set GPIOC0_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC1_Handler
|
||||
.thumb_set GPIOC1_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC2_Handler
|
||||
.thumb_set GPIOC2_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC3_Handler
|
||||
.thumb_set GPIOC3_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC4_Handler
|
||||
.thumb_set GPIOC4_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC5_Handler
|
||||
.thumb_set GPIOC5_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC6_Handler
|
||||
.thumb_set GPIOC6_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC7_Handler
|
||||
.thumb_set GPIOC7_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM0_Handler
|
||||
.thumb_set GPIOM0_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM1_Handler
|
||||
.thumb_set GPIOM1_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM2_Handler
|
||||
.thumb_set GPIOM2_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM3_Handler
|
||||
.thumb_set GPIOM3_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM4_Handler
|
||||
.thumb_set GPIOM4_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM5_Handler
|
||||
.thumb_set GPIOM5_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM6_Handler
|
||||
.thumb_set GPIOM6_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM7_Handler
|
||||
.thumb_set GPIOM7_Handler,Default_Handler
|
||||
|
||||
.weak DMA_Handler
|
||||
.thumb_set DMA_Handler,Default_Handler
|
||||
|
||||
.weak LCD_Handler
|
||||
.thumb_set LCD_Handler,Default_Handler
|
||||
|
||||
.weak NORFLC_Handler
|
||||
.thumb_set NORFLC_Handler,Default_Handler
|
||||
|
||||
.weak CAN_Handler
|
||||
.thumb_set CAN_Handler,Default_Handler
|
||||
|
||||
.weak PULSE_Handler
|
||||
.thumb_set PULSE_Handler,Default_Handler
|
||||
|
||||
.weak WDT_Handler
|
||||
.thumb_set WDT_Handler,Default_Handler
|
||||
|
||||
.weak PWM_Handler
|
||||
.thumb_set PWM_Handler,Default_Handler
|
||||
|
||||
.weak UART0_Handler
|
||||
.thumb_set UART0_Handler,Default_Handler
|
||||
|
||||
.weak UART1_Handler
|
||||
.thumb_set UART1_Handler,Default_Handler
|
||||
|
||||
.weak UART2_Handler
|
||||
.thumb_set UART2_Handler,Default_Handler
|
||||
|
||||
.weak UART3_Handler
|
||||
.thumb_set UART3_Handler,Default_Handler
|
||||
|
||||
.weak I2C0_Handler
|
||||
.thumb_set I2C0_Handler,Default_Handler
|
||||
|
||||
.weak I2C1_Handler
|
||||
.thumb_set I2C1_Handler,Default_Handler
|
||||
|
||||
.weak SPI0_Handler
|
||||
.thumb_set SPI0_Handler,Default_Handler
|
||||
|
||||
.weak ADC0_Handler
|
||||
.thumb_set ADC0_Handler,Default_Handler
|
||||
|
||||
.weak RTC_Handler
|
||||
.thumb_set RTC_Handler,Default_Handler
|
||||
|
||||
.weak ANAC_Handler
|
||||
.thumb_set ANAC_Handler,Default_Handler
|
||||
|
||||
.weak SDIO_Handler
|
||||
.thumb_set SDIO_Handler,Default_Handler
|
||||
|
||||
.weak GPIOA_Handler
|
||||
.thumb_set GPIOA_Handler,Default_Handler
|
||||
|
||||
.weak GPIOB_Handler
|
||||
.thumb_set GPIOB_Handler,Default_Handler
|
||||
|
||||
.weak GPIOC_Handler
|
||||
.thumb_set GPIOC_Handler,Default_Handler
|
||||
|
||||
.weak GPIOM_Handler
|
||||
.thumb_set GPIOM_Handler,Default_Handler
|
||||
|
||||
.weak GPION_Handler
|
||||
.thumb_set GPION_Handler,Default_Handler
|
||||
|
||||
.weak GPIOP_Handler
|
||||
.thumb_set GPIOP_Handler,Default_Handler
|
||||
|
||||
.weak ADC1_Handler
|
||||
.thumb_set ADC1_Handler,Default_Handler
|
||||
|
||||
.weak FPU_Handler
|
||||
.thumb_set FPU_Handler,Default_Handler
|
||||
|
||||
.weak SPI1_Handler
|
||||
.thumb_set SPI1_Handler,Default_Handler
|
||||
|
||||
.weak TIMR0_Handler
|
||||
.thumb_set TIMR0_Handler,Default_Handler
|
||||
|
||||
.weak TIMR1_Handler
|
||||
.thumb_set TIMR1_Handler,Default_Handler
|
||||
|
||||
.weak TIMR2_Handler
|
||||
.thumb_set TIMR2_Handler,Default_Handler
|
||||
|
||||
.weak TIMR3_Handler
|
||||
.thumb_set TIMR3_Handler,Default_Handler
|
||||
|
||||
.weak TIMR4_Handler
|
||||
.thumb_set TIMR4_Handler,Default_Handler
|
||||
|
||||
.weak TIMR5_Handler
|
||||
.thumb_set TIMR5_Handler,Default_Handler
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,281 +0,0 @@
|
||||
/******************************************************************************************************************************************
|
||||
* 文件名称: 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
|
||||
* 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 <stdint.h>
|
||||
#include "SWM320.h"
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 系统时钟设定
|
||||
*****************************************************************************************************************************************/
|
||||
#define SYS_CLK_20MHz 0 //0 内部高频20MHz RC振荡器
|
||||
#define SYS_CLK_40MHz 1 //1 内部高频40MHz RC振荡器
|
||||
#define SYS_CLK_32KHz 2 //2 内部低频32KHz RC振荡器
|
||||
#define SYS_CLK_XTAL 3 //3 外部晶体振荡器(2-30MHz)
|
||||
#define SYS_CLK_PLL 4 //4 片内锁相环输出
|
||||
|
||||
#define SYS_CLK SYS_CLK_PLL
|
||||
|
||||
#define SYS_CLK_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) //高速外部时钟
|
||||
|
||||
/********************************** PLL 设定 **********************************************
|
||||
* VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
|
||||
* PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
|
||||
* 注意:VCO输出频率需要在 [600MHz, 1200MHz] 之间
|
||||
*****************************************************************************************/
|
||||
#define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
|
||||
|
||||
#define PLL_IN_DIV 5
|
||||
|
||||
#define PLL_FB_DIV 60
|
||||
|
||||
#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
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称:
|
||||
* 功能说明: 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;
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称:
|
||||
* 功能说明: 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);
|
||||
}
|
||||
}
|
||||
|
||||
static void delay_3ms(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if (((SYS->CLKSEL & SYS_CLKSEL_SYS_Msk) == 0) &&
|
||||
((SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk) == 0)) //32KHz
|
||||
{
|
||||
for (i = 0; i < 20; i++)
|
||||
__NOP();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 20000; i++)
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
|
||||
void switchCLK_20MHz(void)
|
||||
{
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
|
||||
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
}
|
||||
|
||||
void switchCLK_40MHz(void)
|
||||
{
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(1 << SYS_HRCCR_DBL_Pos); //HRC = 40MHz
|
||||
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
}
|
||||
|
||||
void switchCLK_32KHz(void)
|
||||
{
|
||||
SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
|
||||
|
||||
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
|
||||
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk; //LFCK <= LRC
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
|
||||
}
|
||||
|
||||
void switchCLK_XTAL(void)
|
||||
{
|
||||
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
|
||||
|
||||
delay_3ms();
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos); //HFCK <= XTAL
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
}
|
||||
|
||||
void switchCLK_PLL(void)
|
||||
{
|
||||
PLLInit();
|
||||
|
||||
SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
|
||||
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos); //LFCK <= PLL
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
|
||||
}
|
||||
|
||||
void PLLInit(void)
|
||||
{
|
||||
if (SYS_PLL_SRC == SYS_CLK_20MHz)
|
||||
{
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
|
||||
|
||||
delay_3ms();
|
||||
|
||||
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);
|
||||
|
||||
delay_3ms();
|
||||
delay_3ms();
|
||||
|
||||
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锁定
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#ifndef __SYSTEM_SWM320_H__
|
||||
#define __SYSTEM_SWM320_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
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 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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //__SYSTEM_SWM320_H__
|
||||
@@ -1,17 +0,0 @@
|
||||
from building import *
|
||||
import rtconfig
|
||||
cwd = GetCurrentDir()
|
||||
src = Glob('CMSIS/DeviceSupport/*.c')
|
||||
CPPPATH = [cwd + '/CMSIS/CoreSupport', cwd + '/CMSIS/DeviceSupport', cwd + '/SWM320_StdPeriph_Driver']
|
||||
|
||||
src += Glob('SWM320_StdPeriph_Driver/*.c')
|
||||
|
||||
if rtconfig.CROSS_TOOL == 'gcc':
|
||||
src += ['CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s']
|
||||
elif rtconfig.CROSS_TOOL == 'keil':
|
||||
src += ['CMSIS/DeviceSupport/startup/arm/startup_SWM320.s']
|
||||
elif rtconfig.CROSS_TOOL == 'iar':
|
||||
src += ['CMSIS/DeviceSupport/startup/iar/startup_SWM320.s']
|
||||
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,77 +0,0 @@
|
||||
#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及其组合(即“按位或”运算)
|
||||
} 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满中断状态
|
||||
|
||||
#endif //__SWM320_ADC_H__
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,134 +0,0 @@
|
||||
#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
|
||||
} 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]; //接收到的数据
|
||||
} 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_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);
|
||||
|
||||
void CAN_AbortTransmit(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_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_INTErrWarningEn(CAN_TypeDef *CANx);
|
||||
void CAN_INTErrWarningDis(CAN_TypeDef *CANx);
|
||||
|
||||
void CAN_INTRXOverflowEn(CAN_TypeDef *CANx);
|
||||
void CAN_INTRXOverflowDis(CAN_TypeDef *CANx);
|
||||
void CAN_INTRXOverflowClear(CAN_TypeDef *CANx);
|
||||
|
||||
void CAN_INTWakeupEn(CAN_TypeDef *CANx);
|
||||
void CAN_INTWakeupDis(CAN_TypeDef *CANx);
|
||||
|
||||
void CAN_INTErrPassiveEn(CAN_TypeDef *CANx);
|
||||
void CAN_INTErrPassiveDis(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);
|
||||
|
||||
#endif //__SWM320_CAN_H__
|
||||
@@ -1,50 +0,0 @@
|
||||
/******************************************************************************************************************************************
|
||||
* 文件名称: SWM320_crc.c
|
||||
* 功能说明: SWM320单片机的CRC模块驱动库
|
||||
* 技术支持: 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
|
||||
* 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 "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初始值
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
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;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
#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位
|
||||
|
||||
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 要写入的数据
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
static __INLINE void CRC_Write(uint32_t data)
|
||||
{
|
||||
CRC->DATAIN = data;
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: CRC_Result()
|
||||
* 功能说明: 获取CRC计算结果
|
||||
* 输 入: 无
|
||||
* 输 出: uint32_t CRC 计算结果
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
static __INLINE uint32_t CRC_Result(void)
|
||||
{
|
||||
return CRC->RESULT;
|
||||
}
|
||||
|
||||
#endif //__SWM320_CRC_H__
|
||||
@@ -1,140 +0,0 @@
|
||||
/******************************************************************************************************************************************
|
||||
* 文件名称: SWM320_dma.c
|
||||
* 功能说明: SWM320单片机的DMA功能驱动库
|
||||
* 技术支持: 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
|
||||
* 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 "SWM320.h"
|
||||
#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 数据搬运完成后不产生中断
|
||||
* 输 出: 无
|
||||
* 注意事项: 搬运数据量以字为单元,不是字节
|
||||
******************************************************************************************************************************************/
|
||||
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_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_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_INTEn()
|
||||
* 功能说明: DMA中断使能,数据搬运完成后触发中断
|
||||
* 输 入: uint32_t chn 指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
void DMA_CH_INTEn(uint32_t chn)
|
||||
{
|
||||
DMA->IM &= ~(1 << chn);
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: 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_CH_INTClr()
|
||||
* 功能说明: DMA中断标志清除
|
||||
* 输 入: uint32_t chn 指定要配置的通道,有效值有DMA_CH0、DMA_CH1、DMA_CH2
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
void DMA_CH_INTClr(uint32_t chn)
|
||||
{
|
||||
DMA->IF = (1 << chn);
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: 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;
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef __SWM320_DMA_H__
|
||||
#define __SWM320_DMA_H__
|
||||
|
||||
#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 数据搬运未完成
|
||||
|
||||
#endif //__SWM320_DMA_H__
|
||||
@@ -1,131 +0,0 @@
|
||||
/******************************************************************************************************************************************
|
||||
* 文件名称: SWM320_exti.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
|
||||
* 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 "SWM320.h"
|
||||
#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)
|
||||
******************************************************************************************************************************************/
|
||||
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_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)
|
||||
{
|
||||
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
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
void EXTI_Close(GPIO_TypeDef *GPIOx, uint32_t 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 此引脚未触发中断
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
uint32_t EXTI_State(GPIO_TypeDef *GPIOx, uint32_t n)
|
||||
{
|
||||
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 此引脚未满足过/了中断触发条件
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
uint32_t EXTI_RawState(GPIO_TypeDef *GPIOx, uint32_t n)
|
||||
{
|
||||
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
|
||||
* 输 出: 无
|
||||
* 注意事项: 只能清除边沿触发中断的标志,电平触发中断的标志无法清除,只能在引脚电平不符合中断触发条件后硬件自动清除
|
||||
******************************************************************************************************************************************/
|
||||
void EXTI_Clear(GPIO_TypeDef *GPIOx, uint32_t n)
|
||||
{
|
||||
GPIOx->INTCLR = (0x01 << n);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
#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); //指定引脚外部中断关闭(即禁能)
|
||||
|
||||
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__
|
||||
@@ -1,95 +0,0 @@
|
||||
/******************************************************************************************************************************************
|
||||
* 文件名称: SWM320_flash.c
|
||||
* 功能说明: 使用芯片的IAP功能将片上Flash模拟成EEPROM来保存数据,掉电后不丢失
|
||||
* 技术支持: 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
|
||||
* 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 "SWM320.h"
|
||||
#include "SWM320_flash.h"
|
||||
|
||||
IAP_Cache_Reset_t IAP_Cache_Reset = (IAP_Cache_Reset_t)0x11000601;
|
||||
IAP_Flash_Param_t IAP_Flash_Param = (IAP_Flash_Param_t)0x11000681;
|
||||
IAP_Flash_Erase_t IAP_Flash_Erase = (IAP_Flash_Erase_t)0x11000781;
|
||||
IAP_Flash_Write_t IAP_Flash_Write = (IAP_Flash_Write_t)0x11000801;
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: FLASH_Erase()
|
||||
* 功能说明: 片内Flash擦除
|
||||
* 输 入: uint32_t addr 擦除地址,扇区大小为4K Byte
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
void FLASH_Erase(uint32_t addr)
|
||||
{
|
||||
__disable_irq();
|
||||
|
||||
IAP_Flash_Erase(addr / 0x1000);
|
||||
|
||||
IAP_Cache_Reset();
|
||||
|
||||
__enable_irq();
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: FLASH_Write()
|
||||
* 功能说明: 片内Flash写入
|
||||
* 输 入: uint32_t addr 写入地址
|
||||
* uint32_t buff[] 要写入的数据
|
||||
* uint32_t count 要写入数据的个数,以字为单位,且必须是4的整数倍,即最少写入4个字
|
||||
* 输 出: 无
|
||||
* 注意事项: 写入数据个数必须是4的整数倍,即最少写入4个字
|
||||
******************************************************************************************************************************************/
|
||||
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();
|
||||
}
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: Flash_Param_at_xMHz()
|
||||
* 功能说明: 将Flash参数设置成xMHz主频下运行时所需的参数
|
||||
* 输 入: uint32_t x 可取值
|
||||
* 输 出: 无
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
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();
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
#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);
|
||||
typedef void (*IAP_Flash_Write_t)(uint32_t flash_addr, uint32_t ram_addr, uint32_t count);
|
||||
|
||||
extern IAP_Cache_Reset_t IAP_Cache_Reset;
|
||||
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__
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user