mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-28 16:14:20 +08:00
@@ -140,6 +140,7 @@ jobs:
|
|||||||
- name: Install Tools
|
- name: Install Tools
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
sudo apt-get -qq install gcc-multilib libsdl-dev scons
|
sudo apt-get -qq install gcc-multilib libsdl-dev scons
|
||||||
echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV
|
echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV
|
||||||
echo "RTT_CC=gcc" >> $GITHUB_ENV
|
echo "RTT_CC=gcc" >> $GITHUB_ENV
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ src = Glob('src/*.c')
|
|||||||
|
|
||||||
path = [cwd + '/inc']
|
path = [cwd + '/inc']
|
||||||
|
|
||||||
group = DefineGroup('StdPeriph_Driver', src, depend = [''], CPPPATH = path)
|
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ cwd = GetCurrentDir()
|
|||||||
src = Glob('*.c')
|
src = Glob('*.c')
|
||||||
CPPPATH = [cwd, str(Dir('#'))]
|
CPPPATH = [cwd, str(Dir('#'))]
|
||||||
|
|
||||||
group = DefineGroup('spi', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if rtconfig.CROSS_TOOL == 'gcc':
|
|||||||
elif rtconfig.CROSS_TOOL == 'iar':
|
elif rtconfig.CROSS_TOOL == 'iar':
|
||||||
libs += ['libsmartconfig_armcm4_iar']
|
libs += ['libsmartconfig_armcm4_iar']
|
||||||
|
|
||||||
group = DefineGroup('smartconfig', src, depend = ['RT_USING_SMARTCONFIG_LIB'], CPPPATH = path, LIBS = libs, LIBPATH = libpath)
|
group = DefineGroup('Libraries', src, depend = ['RT_USING_SMARTCONFIG_LIB'], CPPPATH = path, LIBS = libs, LIBPATH = libpath)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ CPPPATH = [cwd]
|
|||||||
#remove other no use files
|
#remove other no use files
|
||||||
#SrcRemove(src, '*.c')
|
#SrcRemove(src, '*.c')
|
||||||
|
|
||||||
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
@@ -8,5 +8,5 @@ CPPPATH = [cwd]
|
|||||||
# The set of source files associated with this SConscript file.
|
# The set of source files associated with this SConscript file.
|
||||||
src = Glob('*.c')
|
src = Glob('*.c')
|
||||||
|
|
||||||
group = DefineGroup('platform', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -41,6 +41,6 @@ path = [
|
|||||||
|
|
||||||
CPPDEFINES = ['USE_STDPERIPH_DRIVER']
|
CPPDEFINES = ['USE_STDPERIPH_DRIVER']
|
||||||
|
|
||||||
group = DefineGroup('AT32_Lib', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ if rtconfig.PLATFORM == 'cl':
|
|||||||
if rtconfig.PLATFORM == 'mingw':
|
if rtconfig.PLATFORM == 'mingw':
|
||||||
src = Glob('*.c')
|
src = Glob('*.c')
|
||||||
|
|
||||||
group = DefineGroup('platform', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Platform', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ if rtconfig.PLATFORM == 'cl':
|
|||||||
if rtconfig.PLATFORM == 'mingw':
|
if rtconfig.PLATFORM == 'mingw':
|
||||||
src = Glob('*.c')
|
src = Glob('*.c')
|
||||||
|
|
||||||
group = DefineGroup('platform', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Platform', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -25,6 +25,6 @@ CPPPATH = [
|
|||||||
cwd + '/DRIVERS/USART',
|
cwd + '/DRIVERS/USART',
|
||||||
]
|
]
|
||||||
|
|
||||||
group = DefineGroup('Startup', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ CONFIG_RT_USING_OVERFLOW_CHECK=y
|
|||||||
CONFIG_RT_USING_HOOK=y
|
CONFIG_RT_USING_HOOK=y
|
||||||
CONFIG_RT_USING_IDLE_HOOK=y
|
CONFIG_RT_USING_IDLE_HOOK=y
|
||||||
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
|
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
|
||||||
CONFIG_IDLE_THREAD_STACK_SIZE=1024
|
CONFIG_IDLE_THREAD_STACK_SIZE=512
|
||||||
CONFIG_RT_USING_TIMER_SOFT=y
|
CONFIG_RT_USING_TIMER_SOFT=y
|
||||||
CONFIG_RT_TIMER_THREAD_PRIO=4
|
CONFIG_RT_TIMER_THREAD_PRIO=4
|
||||||
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
|
CONFIG_RT_TIMER_THREAD_STACK_SIZE=256
|
||||||
CONFIG_RT_DEBUG=y
|
CONFIG_RT_DEBUG=y
|
||||||
# CONFIG_RT_DEBUG_COLOR is not set
|
# CONFIG_RT_DEBUG_COLOR is not set
|
||||||
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
|
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
|
||||||
@@ -96,7 +96,7 @@ CONFIG_FINSH_USING_SYMTAB=y
|
|||||||
CONFIG_FINSH_USING_DESCRIPTION=y
|
CONFIG_FINSH_USING_DESCRIPTION=y
|
||||||
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
|
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
|
||||||
CONFIG_FINSH_THREAD_PRIORITY=20
|
CONFIG_FINSH_THREAD_PRIORITY=20
|
||||||
CONFIG_FINSH_THREAD_STACK_SIZE=4096
|
CONFIG_FINSH_THREAD_STACK_SIZE=2048
|
||||||
CONFIG_FINSH_CMD_SIZE=80
|
CONFIG_FINSH_CMD_SIZE=80
|
||||||
# CONFIG_FINSH_USING_AUTH is not set
|
# CONFIG_FINSH_USING_AUTH is not set
|
||||||
CONFIG_FINSH_USING_MSH=y
|
CONFIG_FINSH_USING_MSH=y
|
||||||
@@ -107,7 +107,18 @@ CONFIG_FINSH_ARG_MAX=10
|
|||||||
#
|
#
|
||||||
# Device virtual file system
|
# Device virtual file system
|
||||||
#
|
#
|
||||||
# CONFIG_RT_USING_DFS is not set
|
CONFIG_RT_USING_DFS=y
|
||||||
|
CONFIG_DFS_USING_WORKDIR=y
|
||||||
|
CONFIG_DFS_FILESYSTEMS_MAX=2
|
||||||
|
CONFIG_DFS_FILESYSTEM_TYPES_MAX=2
|
||||||
|
CONFIG_DFS_FD_MAX=16
|
||||||
|
# CONFIG_RT_USING_DFS_MNTTABLE is not set
|
||||||
|
# CONFIG_RT_USING_DFS_ELMFAT is not set
|
||||||
|
# CONFIG_RT_USING_DFS_DEVFS is not set
|
||||||
|
CONFIG_RT_USING_DFS_ROMFS=y
|
||||||
|
# CONFIG_RT_USING_DFS_RAMFS is not set
|
||||||
|
# CONFIG_RT_USING_DFS_UFFS is not set
|
||||||
|
# CONFIG_RT_USING_DFS_JFFS2 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Device Drivers
|
# Device Drivers
|
||||||
@@ -134,7 +145,10 @@ CONFIG_RT_USING_PIN=y
|
|||||||
# CONFIG_RT_USING_SDIO is not set
|
# CONFIG_RT_USING_SDIO is not set
|
||||||
# CONFIG_RT_USING_SPI is not set
|
# CONFIG_RT_USING_SPI is not set
|
||||||
# CONFIG_RT_USING_WDT is not set
|
# CONFIG_RT_USING_WDT is not set
|
||||||
# CONFIG_RT_USING_AUDIO is not set
|
CONFIG_RT_USING_AUDIO=y
|
||||||
|
CONFIG_RT_AUDIO_REPLAY_MP_BLOCK_SIZE=1024
|
||||||
|
CONFIG_RT_AUDIO_REPLAY_MP_BLOCK_COUNT=2
|
||||||
|
CONFIG_RT_AUDIO_RECORD_PIPE_SIZE=512
|
||||||
# CONFIG_RT_USING_SENSOR is not set
|
# CONFIG_RT_USING_SENSOR is not set
|
||||||
# CONFIG_RT_USING_TOUCH is not set
|
# CONFIG_RT_USING_TOUCH is not set
|
||||||
# CONFIG_RT_USING_HWCRYPTO is not set
|
# CONFIG_RT_USING_HWCRYPTO is not set
|
||||||
@@ -153,6 +167,7 @@ CONFIG_RT_USING_PIN=y
|
|||||||
#
|
#
|
||||||
CONFIG_RT_USING_LIBC=y
|
CONFIG_RT_USING_LIBC=y
|
||||||
# CONFIG_RT_USING_PTHREADS is not set
|
# CONFIG_RT_USING_PTHREADS is not set
|
||||||
|
# CONFIG_RT_USING_POSIX is not set
|
||||||
# CONFIG_RT_USING_MODULE is not set
|
# CONFIG_RT_USING_MODULE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -273,6 +288,7 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# CONFIG_PKG_USING_PDULIB is not set
|
# CONFIG_PKG_USING_PDULIB is not set
|
||||||
# CONFIG_PKG_USING_BTSTACK is not set
|
# CONFIG_PKG_USING_BTSTACK is not set
|
||||||
# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
|
# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
|
||||||
|
# CONFIG_PKG_USING_WAYZ_IOTKIT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# security packages
|
# security packages
|
||||||
@@ -325,6 +341,8 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# CONFIG_PKG_USING_UMCN is not set
|
# CONFIG_PKG_USING_UMCN is not set
|
||||||
# CONFIG_PKG_USING_LWRB2RTT is not set
|
# CONFIG_PKG_USING_LWRB2RTT is not set
|
||||||
# CONFIG_PKG_USING_CPU_USAGE is not set
|
# CONFIG_PKG_USING_CPU_USAGE is not set
|
||||||
|
# CONFIG_PKG_USING_GBK2UTF8 is not set
|
||||||
|
# CONFIG_PKG_USING_VCONSOLE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# system packages
|
# system packages
|
||||||
@@ -419,6 +437,9 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# CONFIG_PKG_USING_SSD1306 is not set
|
# CONFIG_PKG_USING_SSD1306 is not set
|
||||||
# CONFIG_PKG_USING_QKEY is not set
|
# CONFIG_PKG_USING_QKEY is not set
|
||||||
# CONFIG_PKG_USING_RS485 is not set
|
# CONFIG_PKG_USING_RS485 is not set
|
||||||
|
# CONFIG_PKG_USING_NES is not set
|
||||||
|
# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set
|
||||||
|
# CONFIG_PKG_USING_VDEVICE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# miscellaneous packages
|
# miscellaneous packages
|
||||||
@@ -430,8 +451,6 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# CONFIG_PKG_USING_QUICKLZ is not set
|
# CONFIG_PKG_USING_QUICKLZ is not set
|
||||||
# CONFIG_PKG_USING_LZMA is not set
|
# CONFIG_PKG_USING_LZMA is not set
|
||||||
# CONFIG_PKG_USING_MULTIBUTTON is not set
|
# CONFIG_PKG_USING_MULTIBUTTON is not set
|
||||||
# CONFIG_PKG_USING_MULTIBUTTON_V102 is not set
|
|
||||||
# CONFIG_PKG_USING_MULTIBUTTON_LATEST_VERSION is not set
|
|
||||||
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
|
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
|
||||||
# CONFIG_PKG_USING_CANFESTIVAL is not set
|
# CONFIG_PKG_USING_CANFESTIVAL is not set
|
||||||
# CONFIG_PKG_USING_ZLIB is not set
|
# CONFIG_PKG_USING_ZLIB is not set
|
||||||
@@ -479,6 +498,8 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# Onboard Peripheral Drivers
|
# Onboard Peripheral Drivers
|
||||||
#
|
#
|
||||||
CONFIG_BSP_USING_USB_TO_USART=y
|
CONFIG_BSP_USING_USB_TO_USART=y
|
||||||
|
CONFIG_BSP_USING_AUDIO=y
|
||||||
|
CONFIG_BSP_USING_AUDIO_PLAY=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# On-chip Peripheral Drivers
|
# On-chip Peripheral Drivers
|
||||||
|
|||||||
@@ -38,11 +38,12 @@
|
|||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make.165021533" name="Build command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make" useByScannerDiscovery="false" value="make" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make.165021533" name="Build command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make" useByScannerDiscovery="false" value="make" valueType="string" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm.366517344" name="Remove command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm" useByScannerDiscovery="false" value="rm" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm.366517344" name="Remove command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm" useByScannerDiscovery="false" value="rm" valueType="string" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id.1691164793" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id" useByScannerDiscovery="false" value="512258282" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id.1691164793" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id" useByScannerDiscovery="false" value="512258282" valueType="string" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base.1598161476" name="Architecture" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.arch.rv32i" valueType="enumerated" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base.1598161476" name="Architecture" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.arch.default" valueType="enumerated" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer.562211802" name="Integer ABI" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.abi.integer.ilp32" valueType="enumerated" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer.562211802" name="Integer ABI" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.abi.integer.default" valueType="enumerated" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.fp.929485575" name="Floating point ABI" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.fp" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.abi.fp.none" valueType="enumerated" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.fp.929485575" name="Floating point ABI" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.fp" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.abi.fp.none" valueType="enumerated" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.fp.2086917901" name="Floating point" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.fp" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.isa.fp.none" valueType="enumerated" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.fp.2086917901" name="Floating point" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.fp" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.isa.fp.none" valueType="enumerated" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice.2138403588" name="Output file format (-O)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice.binary" valueType="enumerated" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice.2138403588" name="Output file format (-O)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createflash.choice.binary" valueType="enumerated" />
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.smalldatalimit.954692637" name="Small data limit" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.smalldatalimit" useByScannerDiscovery="false" value="" valueType="string" />
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform.631468712" isAbstract="false" osList="all" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform" />
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform.631468712" isAbstract="false" osList="all" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform" />
|
||||||
<builder buildPath="${workspace_loc:/${ProjName}}" cleanBuildTarget="clean" id="ilg.gnumcueclipse.managedbuild.cross.riscv.builder.56173494" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make 构建器" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.builder" />
|
<builder buildPath="${workspace_loc:/${ProjName}}" cleanBuildTarget="clean" id="ilg.gnumcueclipse.managedbuild.cross.riscv.builder.56173494" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make 构建器" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.builder" />
|
||||||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.773327382" name="GNU RISC-V Cross Assembler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler">
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.773327382" name="GNU RISC-V Cross Assembler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler">
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths.302555696" name="Include paths (-I)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths.302555696" name="Include paths (-I)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis/include}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis/include}"" />
|
||||||
</option>
|
</option>
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.other.651906394" name="Other assembler flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.other" useByScannerDiscovery="false" value="" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.other.651906394" name="Other assembler flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.other" useByScannerDiscovery="false" value="-c -mcmodel=medany -march=rv32imc -mabi=ilp32 -x assembler-with-cpp" valueType="string" />
|
||||||
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input.2020551447" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input" />
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input.2020551447" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input" />
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.2003680225" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler">
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.2003680225" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler">
|
||||||
@@ -66,7 +67,6 @@
|
|||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis/include}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis/include}"" />
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//libraries/hal_libraries/bmsis}"" />
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/drivers/include}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/drivers/include}"" />
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/drivers/sensors}"" />
|
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/finsh}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/finsh}"" />
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/common}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/common}"" />
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/newlib}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/newlib}"" />
|
||||||
@@ -81,13 +81,13 @@
|
|||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.systempaths.1138643188" name="Include system paths (-isystem)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.systempaths" useByScannerDiscovery="true" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.systempaths.1138643188" name="Include system paths (-isystem)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.systempaths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}"" />
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}"" />
|
||||||
</option>
|
</option>
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.other.68088914" name="Other compiler flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.other" useByScannerDiscovery="true" value="" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.other.68088914" name="Other compiler flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.other" useByScannerDiscovery="true" value="-c -mcmodel=medany -march=rv32imc -mabi=ilp32 -Os" valueType="string" />
|
||||||
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.2078217664" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input" />
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.2078217664" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input" />
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler.282359881" name="GNU RISC-V Cross C++ Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler" />
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler.282359881" name="GNU RISC-V Cross C++ Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler" />
|
||||||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.1082822632" name="GNU RISC-V Cross C Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker">
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.1082822632" name="GNU RISC-V Cross C Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker">
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections.1342883380" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections" useByScannerDiscovery="false" value="true" valueType="boolean" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections.1342883380" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections" useByScannerDiscovery="false" value="true" valueType="boolean" />
|
||||||
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.other.1506934091" name="Other linker flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.other" useByScannerDiscovery="false" value="" valueType="string" />
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.other.1506934091" name="Other linker flags" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.other" useByScannerDiscovery="false" value="-mcmodel=medany -march=rv32imc -mabi=ilp32 -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start" valueType="string" />
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.libs.1209561486" name="Libraries (-l)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.libs" useByScannerDiscovery="false" valueType="libs">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.libs.1209561486" name="Libraries (-l)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.libs" useByScannerDiscovery="false" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value="c " />
|
<listOptionValue builtIn="false" value="c " />
|
||||||
<listOptionValue builtIn="false" value="m " />
|
<listOptionValue builtIn="false" value="m " />
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry excluding="//rt-thread/components/cplusplus|//rt-thread/components/dfs|//rt-thread/components/drivers/audio|//rt-thread/components/drivers/can|//rt-thread/components/drivers/cputime|//rt-thread/components/drivers/hwcrypto|//rt-thread/components/drivers/hwtimer|//rt-thread/components/drivers/i2c|//rt-thread/components/drivers/misc/adc.c|//rt-thread/components/drivers/misc/dac.c|//rt-thread/components/drivers/misc/pulse_encoder.c|//rt-thread/components/drivers/misc/rt_drv_pwm.c|//rt-thread/components/drivers/misc/rt_inputcapture.c|//rt-thread/components/drivers/mtd|//rt-thread/components/drivers/pm|//rt-thread/components/drivers/rtc|//rt-thread/components/drivers/sdio|//rt-thread/components/drivers/spi|//rt-thread/components/drivers/touch|//rt-thread/components/drivers/usb|//rt-thread/components/drivers/watchdog|//rt-thread/components/drivers/wlan|//rt-thread/components/finsh/msh_file.c|//rt-thread/components/finsh/symbol.c|//rt-thread/components/libc/aio|//rt-thread/components/libc/compilers/armlibc|//rt-thread/components/libc/compilers/common/unistd.c|//rt-thread/components/libc/compilers/dlib|//rt-thread/components/libc/compilers/minilibc|//rt-thread/components/libc/getline|//rt-thread/components/libc/libdl|//rt-thread/components/libc/mmap|//rt-thread/components/libc/pthreads|//rt-thread/components/libc/signal|//rt-thread/components/libc/termios|//rt-thread/components/libc/time|//rt-thread/components/lwp|//rt-thread/components/net|//rt-thread/components/utilities|//rt-thread/components/vbus|//rt-thread/components/vmm|//rt-thread/libcpu|//rt-thread/src/cpu.c|//rt-thread/src/slab.c|//rt-thread/tools" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="" />
|
<entry excluding="//rt-thread/components/cplusplus|//rt-thread/components/dfs|//rt-thread/components/drivers/audio|//rt-thread/components/drivers/can|//rt-thread/components/drivers/cputime|//rt-thread/components/drivers/hwcrypto|//rt-thread/components/drivers/hwtimer|//rt-thread/components/drivers/i2c|//rt-thread/components/drivers/misc/adc.c|//rt-thread/components/drivers/misc/dac.c|//rt-thread/components/drivers/misc/pulse_encoder.c|//rt-thread/components/drivers/misc/rt_drv_pwm.c|//rt-thread/components/drivers/misc/rt_inputcapture.c|//rt-thread/components/drivers/mtd|//rt-thread/components/drivers/pm|//rt-thread/components/drivers/rtc|//rt-thread/components/drivers/sdio|//rt-thread/components/drivers/sensors|//rt-thread/components/drivers/spi|//rt-thread/components/drivers/touch|//rt-thread/components/drivers/usb|//rt-thread/components/drivers/watchdog|//rt-thread/components/drivers/wlan|//rt-thread/components/finsh/msh_file.c|//rt-thread/components/finsh/symbol.c|//rt-thread/components/libc/aio|//rt-thread/components/libc/compilers/armlibc|//rt-thread/components/libc/compilers/common/unistd.c|//rt-thread/components/libc/compilers/dlib|//rt-thread/components/libc/compilers/minilibc|//rt-thread/components/libc/getline|//rt-thread/components/libc/libdl|//rt-thread/components/libc/mmap|//rt-thread/components/libc/pthreads|//rt-thread/components/libc/signal|//rt-thread/components/libc/termios|//rt-thread/components/libc/time|//rt-thread/components/lwp|//rt-thread/components/net|//rt-thread/components/utilities|//rt-thread/components/vbus|//rt-thread/components/vmm|//rt-thread/libcpu|//rt-thread/src/cpu.c|//rt-thread/src/slab.c|//rt-thread/tools" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="" />
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
|||||||
Binary file not shown.
+2
@@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
toolchain.path.512258282=${toolchain_install_path}/${riscv_gcc_relative_path}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="400486564004621042" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-309903127852947962" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
</provider>
|
</provider>
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
#RT-Thread Studio Project Configuration
|
#RT-Thread Studio Project Configuration
|
||||||
#Mon Dec 14 17:48:04 CST 2020
|
#Wed Dec 16 14:30:21 CST 2020
|
||||||
cfg_version=v3.0
|
cfg_version=v3.0
|
||||||
board_name=AB32VG1-AB-PROUGEN
|
board_name=AB32VG1-AB-PROUGEN
|
||||||
example_name=
|
example_name=
|
||||||
hardware_adapter=ST-LINK
|
hardware_adapter=DAP-LINK
|
||||||
project_type=rt-thread
|
project_type=rt-thread
|
||||||
board_base_nano_proj=False
|
board_base_nano_proj=False
|
||||||
chip_name=AB32VG1
|
chip_name=AB32VG1
|
||||||
selected_rtt_version=latest
|
selected_rtt_version=latest
|
||||||
bsp_version=1.0.1
|
bsp_version=1.0.0
|
||||||
os_branch=full
|
os_branch=full
|
||||||
output_project_path=D\:/Softwares/RT-ThreadStudio/workspace
|
output_project_path=D\:/Softwares/RT-ThreadStudio/workspace
|
||||||
is_base_example_project=False
|
is_base_example_project=False
|
||||||
is_use_scons_build=True
|
is_use_scons_build=True
|
||||||
project_base_bsp=true
|
project_base_bsp=true
|
||||||
project_name=ab32101
|
project_name=ab32vg1
|
||||||
os_version=latest
|
os_version=latest
|
||||||
bsp_path=repo/Local/Board_Support_Packages/Bluetrum/AB32VG1-AB-PROUGEN/1.0.1/Bluetrum_AB32VG1-ab-prougen
|
bsp_path=repo/Local/Board_Support_Packages/Bluetrum/AB32VG1-AB-PROUGEN/1.0.0
|
||||||
|
|||||||
@@ -102,7 +102,9 @@ msh >
|
|||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
波特率默认为 1.5M,需要使用 [Downloader](https://github.com/BLUETRUM/Downloader) 下载 `.dcf` 到芯片
|
波特率默认为 1.5M,需要使用 [Downloader](https://github.com/BLUETRUM/Downloader) 下载 `.dcf` 到芯片,需要编译后自动下载,需要在 `Downloader` 中的下载的下拉窗中选择 `自动`;目前暂时屏蔽 uart1 打印
|
||||||
|
|
||||||
|
使用 `romfs` 时,需要自己生成 `romfs.c` 进行替换,操作参考[使用 RomFS](https://www.rt-thread.org/document/site/tutorial/qemu-network/filesystems/filesystems/#romfs)
|
||||||
|
|
||||||
编译报错的时候,如果出现重复定义的报错,可能需要在 `cconfig.h` 中手动添加以下配置
|
编译报错的时候,如果出现重复定义的报错,可能需要在 `cconfig.h` 中手动添加以下配置
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
#ifdef RT_USING_DFS
|
||||||
|
#include <dfs_fs.h>
|
||||||
|
#include "dfs_romfs.h"
|
||||||
|
|
||||||
|
int mnt_init(void)
|
||||||
|
{
|
||||||
|
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0)
|
||||||
|
{
|
||||||
|
rt_kprintf("ROM file system initializated!\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("ROM file system initializate failed!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_ENV_EXPORT(mnt_init);
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Generated by mkromfs. Edit with caution. */
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
#ifdef RT_USING_DFS
|
||||||
|
#include <dfs_romfs.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static const struct romfs_dirent _romfs_root[] = {
|
||||||
|
{ROMFS_DIRENT_FILE, "ab32vg1", RT_NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct romfs_dirent romfs_root = {
|
||||||
|
ROMFS_DIRENT_DIR, "/", (rt_uint8_t *)_romfs_root, sizeof(_romfs_root)/sizeof(_romfs_root[0])
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -8,14 +8,25 @@ menu "Onboard Peripheral Drivers"
|
|||||||
select BSP_USING_UART0
|
select BSP_USING_UART0
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
menuconfig BSP_USING_AUDIO
|
||||||
|
bool "Enable Audio Device"
|
||||||
|
select RT_USING_AUDIO
|
||||||
|
default n
|
||||||
|
|
||||||
|
if BSP_USING_AUDIO
|
||||||
|
config BSP_USING_AUDIO_PLAY
|
||||||
|
bool "Enable Audio Play"
|
||||||
|
default y
|
||||||
|
endif
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "On-chip Peripheral Drivers"
|
menu "On-chip Peripheral Drivers"
|
||||||
|
|
||||||
menuconfig BSP_USING_UART0
|
menuconfig BSP_USING_UART0
|
||||||
bool "Enable UART0"
|
bool "Enable UART0"
|
||||||
select RT_USING_SERIAL
|
select RT_USING_SERIAL
|
||||||
default y
|
default y
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ ab32vg1_hal_msp.c
|
|||||||
''')
|
''')
|
||||||
CPPPATH = [cwd]
|
CPPPATH = [cwd]
|
||||||
|
|
||||||
|
if GetDepend(['RT_USING_AUDIO']):
|
||||||
|
src += Glob('ports/audio/drv_sound.c')
|
||||||
|
|
||||||
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
objs = [group]
|
objs = [group]
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,12 +1,16 @@
|
|||||||
/* Define the flash max size */
|
/* Define the flash max size */
|
||||||
__max_flash_size = 768k;
|
__max_flash_size = 1024k;
|
||||||
|
|
||||||
__comm_ram_size = 104k;
|
__data_ram_size = 8k;
|
||||||
__heap_ram_size = 14k;
|
__stack_ram_size = 4k;
|
||||||
|
__comm_ram_size = 83k;
|
||||||
|
__heap_ram_size = 29k;
|
||||||
|
|
||||||
__base = 0x10000000;
|
__base = 0x10000000;
|
||||||
|
|
||||||
__comm_vma = 0x12800;
|
__data_vma = 0x11000;
|
||||||
|
__stack_vma = __data_vma + __data_ram_size;
|
||||||
|
__comm_vma = __stack_vma + __stack_ram_size;
|
||||||
__heap_vma = __comm_vma + __comm_ram_size;
|
__heap_vma = __comm_vma + __comm_ram_size;
|
||||||
|
|
||||||
__ram1_vma = 0x50000;
|
__ram1_vma = 0x50000;
|
||||||
@@ -17,8 +21,8 @@ MEMORY
|
|||||||
flash(rx) : org = __base + 512, len = __max_flash_size
|
flash(rx) : org = __base + 512, len = __max_flash_size
|
||||||
comm(rx) : org = __comm_vma, len = __comm_ram_size
|
comm(rx) : org = __comm_vma, len = __comm_ram_size
|
||||||
|
|
||||||
data : org = 0x11000, len = 5k
|
data : org = __data_vma, len = __data_ram_size
|
||||||
stack : org = 0x12400, len = 1k
|
stack : org = __stack_vma, len = __stack_ram_size
|
||||||
heap : org = __heap_vma, len = __heap_ram_size
|
heap : org = __heap_vma, len = __heap_ram_size
|
||||||
ram1(rx) : org = __ram1_vma, len = 0x7a00
|
ram1(rx) : org = __ram1_vma, len = 0x7a00
|
||||||
}
|
}
|
||||||
@@ -30,14 +34,8 @@ SECTIONS
|
|||||||
} > init
|
} > init
|
||||||
|
|
||||||
.ram1 __ram1_vma : {
|
.ram1 __ram1_vma : {
|
||||||
/*board\\ports\\*.o(.text*)*/
|
*components*drivers**.o(.text* .rodata*)
|
||||||
*hal_drivers\\*.o(.text*)
|
*device.o(.text*)
|
||||||
*hal_libraries\\ab32vg1_hal\\*.o(.text*)
|
|
||||||
*components\\drivers\\*.o(.text* .rodata*)
|
|
||||||
*components\\libc\\*.o(.text*)
|
|
||||||
*ab32vg1_hal_msp.o(.text*)
|
|
||||||
*components.o(.text* .rodata*)
|
|
||||||
*ipc.o(.text* .rodata*)
|
|
||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
} > ram1 AT > flash
|
} > ram1 AT > flash
|
||||||
|
|
||||||
@@ -62,9 +60,15 @@ SECTIONS
|
|||||||
} > ram1 AT > flash
|
} > ram1 AT > flash
|
||||||
|
|
||||||
.comm : {
|
.comm : {
|
||||||
KEEP(*(.vector))
|
KEEP (*(.vector))
|
||||||
*(.text*)
|
EXCLUDE_FILE (*hal_drivers**.o *ab32vg1_hal**.o *components*finsh**.o *components*libc**.o *rt-thread*src**.o *kernel*src**.o *romfs.o *lib_a**.o) *(.text*)
|
||||||
*(.rodata*)
|
*idle.o (.text*)
|
||||||
|
*ipc.o (.text*)
|
||||||
|
*irq.o (.text*)
|
||||||
|
*scheduler.o (.text*)
|
||||||
|
*timer.o (.text*)
|
||||||
|
*kservice.o (.text*)
|
||||||
|
EXCLUDE_FILE (*romfs.o *lib_a**.o) *(.rodata*)
|
||||||
*(.srodata*)
|
*(.srodata*)
|
||||||
*(.rela*)
|
*(.rela*)
|
||||||
*(.data*)
|
*(.data*)
|
||||||
@@ -72,10 +76,6 @@ SECTIONS
|
|||||||
. = ALIGN(512);
|
. = ALIGN(512);
|
||||||
} > comm AT > flash
|
} > comm AT > flash
|
||||||
|
|
||||||
.flash : {
|
|
||||||
. = ALIGN(512);
|
|
||||||
} > flash
|
|
||||||
|
|
||||||
.bss (NOLOAD):
|
.bss (NOLOAD):
|
||||||
{
|
{
|
||||||
__bss_start = .;
|
__bss_start = .;
|
||||||
@@ -89,16 +89,22 @@ SECTIONS
|
|||||||
|
|
||||||
.stack (NOLOAD) : {
|
.stack (NOLOAD) : {
|
||||||
__irq_stack_start = .;
|
__irq_stack_start = .;
|
||||||
. = 0x400;
|
. = __stack_ram_size;
|
||||||
__irq_stack = .;
|
__irq_stack = .;
|
||||||
} > stack
|
} > stack
|
||||||
__irq_stack_size = __irq_stack - __irq_stack_start;
|
__irq_stack_size = __irq_stack - __irq_stack_start;
|
||||||
|
|
||||||
.heap : {
|
.heap (NOLOAD) : {
|
||||||
__heap_start = .;
|
__heap_start = .;
|
||||||
. = __heap_ram_size;
|
. = __heap_ram_size;
|
||||||
__heap_end = .;
|
__heap_end = .;
|
||||||
} > heap
|
} > heap
|
||||||
|
|
||||||
|
.flash : {
|
||||||
|
*(.text*)
|
||||||
|
*(.rodata*)
|
||||||
|
. = ALIGN(512);
|
||||||
|
} > flash
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calc the lma */
|
/* Calc the lma */
|
||||||
|
|||||||
@@ -15,10 +15,10 @@
|
|||||||
#define RT_USING_HOOK
|
#define RT_USING_HOOK
|
||||||
#define RT_USING_IDLE_HOOK
|
#define RT_USING_IDLE_HOOK
|
||||||
#define RT_IDLE_HOOK_LIST_SIZE 4
|
#define RT_IDLE_HOOK_LIST_SIZE 4
|
||||||
#define IDLE_THREAD_STACK_SIZE 1024
|
#define IDLE_THREAD_STACK_SIZE 512
|
||||||
#define RT_USING_TIMER_SOFT
|
#define RT_USING_TIMER_SOFT
|
||||||
#define RT_TIMER_THREAD_PRIO 4
|
#define RT_TIMER_THREAD_PRIO 4
|
||||||
#define RT_TIMER_THREAD_STACK_SIZE 512
|
#define RT_TIMER_THREAD_STACK_SIZE 256
|
||||||
#define RT_DEBUG
|
#define RT_DEBUG
|
||||||
|
|
||||||
/* Inter-Thread communication */
|
/* Inter-Thread communication */
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
#define FINSH_USING_SYMTAB
|
#define FINSH_USING_SYMTAB
|
||||||
#define FINSH_USING_DESCRIPTION
|
#define FINSH_USING_DESCRIPTION
|
||||||
#define FINSH_THREAD_PRIORITY 20
|
#define FINSH_THREAD_PRIORITY 20
|
||||||
#define FINSH_THREAD_STACK_SIZE 4096
|
#define FINSH_THREAD_STACK_SIZE 2048
|
||||||
#define FINSH_CMD_SIZE 80
|
#define FINSH_CMD_SIZE 80
|
||||||
#define FINSH_USING_MSH
|
#define FINSH_USING_MSH
|
||||||
#define FINSH_USING_MSH_DEFAULT
|
#define FINSH_USING_MSH_DEFAULT
|
||||||
@@ -72,6 +72,12 @@
|
|||||||
|
|
||||||
/* Device virtual file system */
|
/* Device virtual file system */
|
||||||
|
|
||||||
|
#define RT_USING_DFS
|
||||||
|
#define DFS_USING_WORKDIR
|
||||||
|
#define DFS_FILESYSTEMS_MAX 2
|
||||||
|
#define DFS_FILESYSTEM_TYPES_MAX 2
|
||||||
|
#define DFS_FD_MAX 16
|
||||||
|
#define RT_USING_DFS_ROMFS
|
||||||
|
|
||||||
/* Device Drivers */
|
/* Device Drivers */
|
||||||
|
|
||||||
@@ -80,6 +86,10 @@
|
|||||||
#define RT_USING_SERIAL
|
#define RT_USING_SERIAL
|
||||||
#define RT_SERIAL_RB_BUFSZ 64
|
#define RT_SERIAL_RB_BUFSZ 64
|
||||||
#define RT_USING_PIN
|
#define RT_USING_PIN
|
||||||
|
#define RT_USING_AUDIO
|
||||||
|
#define RT_AUDIO_REPLAY_MP_BLOCK_SIZE 1024
|
||||||
|
#define RT_AUDIO_REPLAY_MP_BLOCK_COUNT 2
|
||||||
|
#define RT_AUDIO_RECORD_PIPE_SIZE 512
|
||||||
|
|
||||||
/* Using USB */
|
/* Using USB */
|
||||||
|
|
||||||
@@ -159,6 +169,8 @@
|
|||||||
/* Onboard Peripheral Drivers */
|
/* Onboard Peripheral Drivers */
|
||||||
|
|
||||||
#define BSP_USING_USB_TO_USART
|
#define BSP_USING_USB_TO_USART
|
||||||
|
#define BSP_USING_AUDIO
|
||||||
|
#define BSP_USING_AUDIO_PLAY
|
||||||
|
|
||||||
/* On-chip Peripheral Drivers */
|
/* On-chip Peripheral Drivers */
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ if PLATFORM == 'gcc':
|
|||||||
DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n'
|
DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n'
|
||||||
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
|
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
|
||||||
POST_ACTION += './riscv32-elf-xmaker -b rtthread.xm\n'
|
POST_ACTION += './riscv32-elf-xmaker -b rtthread.xm\n'
|
||||||
|
POST_ACTION += './riscv32-elf-xmaker -b download.xm\n'
|
||||||
|
|
||||||
def dist_handle(BSP_ROOT, dist_dir):
|
def dist_handle(BSP_ROOT, dist_dir):
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ enable_int_ret:
|
|||||||
|
|
||||||
/* Macro for saving task context */
|
/* Macro for saving task context */
|
||||||
.macro save_context
|
.macro save_context
|
||||||
addi sp, sp, -120
|
addi sp, sp, -124
|
||||||
|
|
||||||
/* Save Context */
|
/* Save Context */
|
||||||
sw x1, 0(sp)
|
sw x1, 0(sp)
|
||||||
@@ -79,6 +79,8 @@ enable_int_ret:
|
|||||||
|
|
||||||
lw a5, EPC(zero) //Saves current program counter (EPC) as task program counter
|
lw a5, EPC(zero) //Saves current program counter (EPC) as task program counter
|
||||||
sw a5, 116(sp)
|
sw a5, 116(sp)
|
||||||
|
lw a5, EPICCON(zero)
|
||||||
|
sw a5, 120(sp)
|
||||||
|
|
||||||
sw sp, rt_cur_thread_sp, a4 //store sp in preempted tasks tcb
|
sw sp, rt_cur_thread_sp, a4 //store sp in preempted tasks tcb
|
||||||
.endm
|
.endm
|
||||||
@@ -93,6 +95,8 @@ enable_int_ret:
|
|||||||
/* Load task program counter EPC*/
|
/* Load task program counter EPC*/
|
||||||
lw a5, 116(sp)
|
lw a5, 116(sp)
|
||||||
sw a5, EPC(zero)
|
sw a5, EPC(zero)
|
||||||
|
lw a5, 120(sp)
|
||||||
|
sw a5, EPICCON(zero)
|
||||||
|
|
||||||
/* Restore registers,
|
/* Restore registers,
|
||||||
Skip global pointer because that does not change */
|
Skip global pointer because that does not change */
|
||||||
@@ -126,7 +130,7 @@ enable_int_ret:
|
|||||||
lw x30, 108(sp)
|
lw x30, 108(sp)
|
||||||
lw x31, 112(sp)
|
lw x31, 112(sp)
|
||||||
|
|
||||||
addi sp, sp, 120
|
addi sp, sp, 124
|
||||||
mret
|
mret
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
|
|||||||
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
|
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
|
||||||
stk = (rt_uint32_t *)stack_addr;
|
stk = (rt_uint32_t *)stack_addr;
|
||||||
|
|
||||||
|
stk--;
|
||||||
|
*stk = (rt_uint32_t)0x10003; /* Start address */
|
||||||
stk--;
|
stk--;
|
||||||
*stk = (rt_uint32_t)tentry; /* Start address */
|
*stk = (rt_uint32_t)tentry; /* Start address */
|
||||||
stk -= 22;
|
stk -= 22;
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
#include <rthw.h>
|
#include <rthw.h>
|
||||||
#include "ab32vgx.h"
|
#include "ab32vgx.h"
|
||||||
|
|
||||||
uint32_t irq_mask AT(.bss.irq_tbl);
|
uint32_t irq_mask;
|
||||||
void *tbl_irq_vector[IRQ_TOTAL_NUM] AT(.bss.irq_tbl);
|
void *tbl_irq_vector[IRQ_TOTAL_NUM];
|
||||||
void (*cpu_irq_comm_hook)(void);
|
void (*cpu_irq_comm_hook)(void);
|
||||||
|
|
||||||
void set_cpu_irq_comm(void (*irq_hook)(void))
|
void set_cpu_irq_comm(void (*irq_hook)(void))
|
||||||
@@ -22,7 +22,6 @@ void set_cpu_irq_comm(void (*irq_hook)(void))
|
|||||||
cpu_irq_comm_hook = irq_hook;
|
cpu_irq_comm_hook = irq_hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
AT(.com_text.irq)
|
|
||||||
void cpu_irq_comm_do(void)
|
void cpu_irq_comm_do(void)
|
||||||
{
|
{
|
||||||
void (*pfnct)(void);
|
void (*pfnct)(void);
|
||||||
@@ -37,6 +36,20 @@ void cpu_irq_comm_do(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rt_hw_irq_enable(int vector)
|
||||||
|
{
|
||||||
|
if (vector < IRQ_TOTAL_NUM) {
|
||||||
|
PICEN |= BIT(vector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void rt_hw_irq_disable(int vector)
|
||||||
|
{
|
||||||
|
if (vector < IRQ_TOTAL_NUM) {
|
||||||
|
PICEN &= ~BIT(vector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void rt_hw_interrupt_init(void)
|
void rt_hw_interrupt_init(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -58,7 +71,7 @@ rt_isr_handler_t rt_hw_interrupt_install(int vector,
|
|||||||
rt_isr_handler_t old_handler = RT_NULL;
|
rt_isr_handler_t old_handler = RT_NULL;
|
||||||
|
|
||||||
if (vector < IRQ_TOTAL_NUM) {
|
if (vector < IRQ_TOTAL_NUM) {
|
||||||
uint32_t cpu_ie = PICCON&BIT(0);
|
uint32_t cpu_ie = PICCON & BIT(0);
|
||||||
PICCON &= ~BIT(0);
|
PICCON &= ~BIT(0);
|
||||||
old_handler = tbl_irq_vector[vector];
|
old_handler = tbl_irq_vector[vector];
|
||||||
tbl_irq_vector[vector] = handler;
|
tbl_irq_vector[vector] = handler;
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#ifndef INTERRUPT_H__
|
||||||
|
#define INTERRUPT_H__
|
||||||
|
|
||||||
|
void rt_hw_irq_enable(int vector);
|
||||||
|
void rt_hw_irq_disable(int vector);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -136,8 +136,8 @@ static int ab32_getc(struct rt_serial_device *serial)
|
|||||||
|
|
||||||
ch = -1;
|
ch = -1;
|
||||||
if(hal_uart_getflag(uart->handle.instance, UART_FLAG_RXPND) != HAL_RESET) {
|
if(hal_uart_getflag(uart->handle.instance, UART_FLAG_RXPND) != HAL_RESET) {
|
||||||
hal_uart_clrflag(uart->handle.instance, UART_FLAG_RXPND);
|
|
||||||
ch = hal_uart_read(uart->handle.instance);
|
ch = hal_uart_read(uart->handle.instance);
|
||||||
|
hal_uart_clrflag(uart->handle.instance, UART_FLAG_RXPND);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ch;
|
return ch;
|
||||||
@@ -156,10 +156,10 @@ static void uart_isr(int vector, void *param)
|
|||||||
{
|
{
|
||||||
rt_hw_serial_isr(&(uart_obj[UART0_INDEX].serial), RT_SERIAL_EVENT_RX_IND);
|
rt_hw_serial_isr(&(uart_obj[UART0_INDEX].serial), RT_SERIAL_EVENT_RX_IND);
|
||||||
}
|
}
|
||||||
if(hal_uart_getflag(UART1_BASE, UART_FLAG_RXPND)) //RX one byte finish
|
// if(hal_uart_getflag(UART1_BASE, UART_FLAG_RXPND)) //RX one byte finish
|
||||||
{
|
// {
|
||||||
rt_hw_serial_isr(&(uart_obj[UART1_INDEX].serial), RT_SERIAL_EVENT_RX_IND);
|
// rt_hw_serial_isr(&(uart_obj[UART1_INDEX].serial), RT_SERIAL_EVENT_RX_IND);
|
||||||
}
|
// }
|
||||||
|
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
static uint32_t hw_ticks = 0;
|
static uint32_t hw_ticks = 0;
|
||||||
|
|
||||||
void timer0_cfg(uint32_t ticks);
|
|
||||||
|
|
||||||
static void (*tick_cfg_hook)(uint32_t ticks) = HAL_NULL;
|
static void (*tick_cfg_hook)(uint32_t ticks) = HAL_NULL;
|
||||||
|
|
||||||
void hal_set_tick_hook(void (*hook)(uint32_t ticks))
|
void hal_set_tick_hook(void (*hook)(uint32_t ticks))
|
||||||
|
|||||||
@@ -133,8 +133,29 @@ typedef enum
|
|||||||
#define TMR2CNT SFR_RW (SFR0_BASE + 0x3c*4)
|
#define TMR2CNT SFR_RW (SFR0_BASE + 0x3c*4)
|
||||||
#define TMR2PR SFR_RW (SFR0_BASE + 0x3d*4)
|
#define TMR2PR SFR_RW (SFR0_BASE + 0x3d*4)
|
||||||
|
|
||||||
|
//------------------------- SFR Group1 ---------------------------------------//
|
||||||
|
#define AUBUFDATA SFR_RW (SFR1_BASE + 0x01*4)
|
||||||
|
#define AUBUFCON SFR_RW (SFR1_BASE + 0x02*4)
|
||||||
|
#define AUBUFSTARTADDR SFR_RW (SFR1_BASE + 0x03*4)
|
||||||
|
#define AUBUFSIZE SFR_RW (SFR1_BASE + 0x04*4)
|
||||||
|
#define AUBUFFIFOCNT SFR_RW (SFR1_BASE + 0x05*4)
|
||||||
|
#define AUBUF1DATA SFR_RW (SFR1_BASE + 0x06*4)
|
||||||
|
#define AUBUF1CON SFR_RW (SFR1_BASE + 0x07*4)
|
||||||
|
#define AUBUF1STARTADDR SFR_RW (SFR1_BASE + 0x08*4)
|
||||||
|
#define AUBUF1SIZE SFR_RW (SFR1_BASE + 0x09*4)
|
||||||
|
#define AUBUF1FIFOCNT SFR_RW (SFR1_BASE + 0x0a*4)
|
||||||
|
|
||||||
#define DACDIGCON0 SFR_RW (SFR1_BASE + 0x10*4)
|
#define DACDIGCON0 SFR_RW (SFR1_BASE + 0x10*4)
|
||||||
#define DACVOLCON SFR_RW (SFR1_BASE + 0x11*4)
|
#define DACVOLCON SFR_RW (SFR1_BASE + 0x11*4)
|
||||||
|
#define AU0LMIXCOEF SFR_RW (SFR1_BASE + 0x12*4)
|
||||||
|
#define AU0RMIXCOEF SFR_RW (SFR1_BASE + 0x13*4)
|
||||||
|
#define AU1LMIXCOEF SFR_RW (SFR1_BASE + 0x14*4)
|
||||||
|
#define AU1RMIXCOEF SFR_RW (SFR1_BASE + 0x15*4)
|
||||||
|
|
||||||
|
#define AUANGCON0 SFR_RW (SFR1_BASE + 0x3c*4)
|
||||||
|
#define AUANGCON1 SFR_RW (SFR1_BASE + 0x3d*4)
|
||||||
|
#define AUANGCON2 SFR_RW (SFR1_BASE + 0x3e*4)
|
||||||
|
#define AUANGCON3 SFR_RW (SFR1_BASE + 0x3f*4)
|
||||||
|
|
||||||
#define USBCON0 SFR_RW (SFR3_BASE + 0x00*4)
|
#define USBCON0 SFR_RW (SFR3_BASE + 0x00*4)
|
||||||
#define USBCON1 SFR_RW (SFR3_BASE + 0x01*4)
|
#define USBCON1 SFR_RW (SFR3_BASE + 0x01*4)
|
||||||
@@ -148,6 +169,7 @@ typedef enum
|
|||||||
#define PLL1DIV SFR_RW (SFR3_BASE + 0x24*4)
|
#define PLL1DIV SFR_RW (SFR3_BASE + 0x24*4)
|
||||||
#define PLL0CON SFR_RW (SFR3_BASE + 0x26*4)
|
#define PLL0CON SFR_RW (SFR3_BASE + 0x26*4)
|
||||||
#define PLL1CON SFR_RW (SFR3_BASE + 0x27*4)
|
#define PLL1CON SFR_RW (SFR3_BASE + 0x27*4)
|
||||||
|
#define PLL2CON SFR_RW (SFR3_BASE + 0x28*4)
|
||||||
#define XO26MCON SFR_RW (SFR3_BASE + 0x29*4)
|
#define XO26MCON SFR_RW (SFR3_BASE + 0x29*4)
|
||||||
#define CLKCON2 SFR_RW (SFR3_BASE + 0x2a*4)
|
#define CLKCON2 SFR_RW (SFR3_BASE + 0x2a*4)
|
||||||
#define CLKGAT0 SFR_RW (SFR3_BASE + 0x2c*4)
|
#define CLKGAT0 SFR_RW (SFR3_BASE + 0x2c*4)
|
||||||
@@ -174,6 +196,7 @@ typedef enum
|
|||||||
#define PICPR SFR_RW (SFR5_BASE + 0x12*4)
|
#define PICPR SFR_RW (SFR5_BASE + 0x12*4)
|
||||||
#define PICADR SFR_RW (SFR5_BASE + 0x13*4)
|
#define PICADR SFR_RW (SFR5_BASE + 0x13*4)
|
||||||
#define PICPND SFR_RW (SFR5_BASE + 0x14*4)
|
#define PICPND SFR_RW (SFR5_BASE + 0x14*4)
|
||||||
|
#define EPICCON SFR_RW (SFR5_BASE + 0x1e*4)
|
||||||
#define EPC SFR_RW (SFR5_BASE + 0x1f*4)
|
#define EPC SFR_RW (SFR5_BASE + 0x1f*4)
|
||||||
|
|
||||||
#define SADCDAT0 SFR_RO (SFR5_BASE + 0x20*4)
|
#define SADCDAT0 SFR_RO (SFR5_BASE + 0x20*4)
|
||||||
|
|||||||
@@ -56,6 +56,43 @@ _start:
|
|||||||
jal x0, low_prio_irq
|
jal x0, low_prio_irq
|
||||||
mret
|
mret
|
||||||
|
|
||||||
|
.org 0x80
|
||||||
|
#define METHOD 1
|
||||||
|
#if METHOD == 1
|
||||||
|
addi sp, sp, -6*4
|
||||||
|
lw a0, PICEN(zero)
|
||||||
|
lw a1, EPC(zero)
|
||||||
|
lw a2, EPICCON(zero)
|
||||||
|
sw a0, 3*4(sp)
|
||||||
|
sw a1, 4*4(sp)
|
||||||
|
sw a2, 5*4(sp)
|
||||||
|
andi a0, a0, 1
|
||||||
|
sw a0, PICEN(zero)
|
||||||
|
la a0, 0f
|
||||||
|
sw a0, EPC(zero)
|
||||||
|
j 0x84020
|
||||||
|
0:
|
||||||
|
sw a0, 0(sp)
|
||||||
|
sw a1, 4(sp)
|
||||||
|
sw a2, 8(sp)
|
||||||
|
|
||||||
|
lw a0, 3*4(sp)
|
||||||
|
lw a1, 4*4(sp)
|
||||||
|
lw a2, 5*4(sp)
|
||||||
|
sw a0, PICEN(zero)
|
||||||
|
sw a1, EPC(zero)
|
||||||
|
sw a2, EPICCON(zero)
|
||||||
|
|
||||||
|
lw a0, 0(sp)
|
||||||
|
lw a1, 4(sp)
|
||||||
|
lw a2, 8(sp)
|
||||||
|
addi sp, sp, 6*4
|
||||||
|
mret
|
||||||
|
.align 4
|
||||||
|
1: .word 0, 0
|
||||||
|
j 0x84020
|
||||||
|
#endif
|
||||||
|
|
||||||
.global cpu_irq_comm
|
.global cpu_irq_comm
|
||||||
cpu_irq_comm:
|
cpu_irq_comm:
|
||||||
la a5, __irq_stack
|
la a5, __irq_stack
|
||||||
|
|||||||
@@ -43,6 +43,6 @@ path = [cwd + '/include',
|
|||||||
cwd + '/common/wdt'
|
cwd + '/common/wdt'
|
||||||
]
|
]
|
||||||
|
|
||||||
group = DefineGroup('libraries', src, depend = [''], CPPPATH = path)
|
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -26,6 +26,6 @@ if GetDepend('RT_USING_SPI_CONTROL'):
|
|||||||
if GetDepend('RT_USING_EMAC'):
|
if GetDepend('RT_USING_EMAC'):
|
||||||
src += ['davinci_emac.c']
|
src += ['davinci_emac.c']
|
||||||
|
|
||||||
group = DefineGroup('Startup', src, depend = [''], CPPPATH = path)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
@@ -72,6 +72,6 @@ path = [cwd + '/emlib/inc',
|
|||||||
|
|
||||||
CPPDEFINES = [rtconfig.EFM32_TYPE]
|
CPPDEFINES = [rtconfig.EFM32_TYPE]
|
||||||
#group = DefineGroup('EFM32_StdPeriph', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES, LINKFLAGS = linker_scripts[rtconfig.EFM32_FAMILY])
|
#group = DefineGroup('EFM32_StdPeriph', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES, LINKFLAGS = linker_scripts[rtconfig.EFM32_FAMILY])
|
||||||
group = DefineGroup('EFM32_StdPeriph', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -86,6 +86,22 @@ msh >
|
|||||||
|
|
||||||
2. 输入`menuconfig`命令配置工程,配置好之后保存退出。
|
2. 输入`menuconfig`命令配置工程,配置好之后保存退出。
|
||||||
|
|
||||||
|
a)如果需要使用内核用例,先配置rt-thread内核,如图:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
然后配置内核用例,如图:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
b)如果需要使用驱动用例:先使能驱动,如图:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
然后配置驱动用例,如图:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
3. 输入`pkgs --update`命令更新软件包。
|
3. 输入`pkgs --update`命令更新软件包。
|
||||||
|
|
||||||
4. 输入`scons --target=mdk5/iar` 命令重新生成工程。
|
4. 输入`scons --target=mdk5/iar` 命令重新生成工程。
|
||||||
@@ -94,7 +110,7 @@ msh >
|
|||||||
|
|
||||||
## 4. 联系人信息
|
## 4. 联系人信息
|
||||||
|
|
||||||
- [wangyongquan](https://github.com/wangyq2018)
|
- [liuhongyan](https://gitee.com/liuhongyan98)
|
||||||
|
|
||||||
## 5. 参考
|
## 5. 参考
|
||||||
|
|
||||||
|
|||||||
@@ -127,4 +127,50 @@ menu "Hardware Drivers Config"
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
|
||||||
|
menu "Peripheral Drivers test example"
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_ADC_VOL
|
||||||
|
bool "BSP_USING_EXAMPLE_ADC_VOL"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_HWTIMER
|
||||||
|
bool "BSP_USING_EXAMPLE_HWTIMER"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_I2C
|
||||||
|
bool "BSP_USING_EXAMPLE_I2C"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_LED_BLINK
|
||||||
|
bool "BSP_USING_EXAMPLE_LED_BLINK"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_PIN_BEEP
|
||||||
|
bool "BSP_USING_EXAMPLE_PIN_BEEP"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_PWM_LED
|
||||||
|
bool "BSP_USING_EXAMPLE_PWM_LED"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_RTC
|
||||||
|
bool "BSP_USING_EXAMPLE_RTC"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_SPI
|
||||||
|
bool "BSP_USING_EXAMPLE_SPI"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_UART
|
||||||
|
bool "BSP_USING_EXAMPLE_UART"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config BSP_USING_EXAMPLE_PM
|
||||||
|
bool "BSP_USING_EXAMPLE_PM"
|
||||||
|
default n
|
||||||
|
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ from building import *
|
|||||||
|
|
||||||
cwd = GetCurrentDir()
|
cwd = GetCurrentDir()
|
||||||
|
|
||||||
|
objs = []
|
||||||
|
|
||||||
# add the general drivers.
|
# add the general drivers.
|
||||||
src = Split('''
|
src = Split('''
|
||||||
board.c
|
board.c
|
||||||
@@ -50,5 +52,43 @@ if GetDepend(['BSP_USING_ADC']):
|
|||||||
|
|
||||||
CPPPATH = [cwd]
|
CPPPATH = [cwd]
|
||||||
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
objs = objs + group
|
||||||
|
|
||||||
Return('group')
|
src = []
|
||||||
|
cwd = GetCurrentDir()
|
||||||
|
include_path = [cwd]
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_ADC_VOL'):
|
||||||
|
src += ['bsp_driver_example/adc_vol_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_HWTIMER'):
|
||||||
|
src += ['bsp_driver_example/hwtimer_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_I2C'):
|
||||||
|
src += ['bsp_driver_example/i2c_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_LED_BLINK'):
|
||||||
|
src += ['bsp_driver_example/led_blink_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_PIN_BEEP'):
|
||||||
|
src += ['bsp_driver_example/pin_beep_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_PWM_LED'):
|
||||||
|
src += ['bsp_driver_example/pwm_led_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_RTC'):
|
||||||
|
src += ['bsp_driver_example/rtc_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_UART'):
|
||||||
|
src += ['bsp_driver_example/uart_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_SPI'):
|
||||||
|
src += ['bsp_driver_example/spi_sample.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_EXAMPLE_PM'):
|
||||||
|
src += ['bsp_driver_example/pm_sample.c']
|
||||||
|
|
||||||
|
group = DefineGroup('bsp-drivers-test-samples', src, depend = [''], CPPPATH = include_path)
|
||||||
|
|
||||||
|
objs = objs + group
|
||||||
|
Return('objs')
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.ko
|
||||||
|
*.obj
|
||||||
|
*.elf
|
||||||
|
|
||||||
|
# Linker output
|
||||||
|
*.ilk
|
||||||
|
*.map
|
||||||
|
*.exp
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
*.lib
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs)
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.i*86
|
||||||
|
*.x86_64
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
# Debug files
|
||||||
|
*.dSYM/
|
||||||
|
*.su
|
||||||
|
*.idb
|
||||||
|
*.pdb
|
||||||
|
|
||||||
|
# Kernel Module Compile Results
|
||||||
|
*.mod*
|
||||||
|
*.cmd
|
||||||
|
.tmp_versions/
|
||||||
|
modules.order
|
||||||
|
Module.symvers
|
||||||
|
Mkfile.old
|
||||||
|
dkms.conf
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# 外设驱动测试用例
|
||||||
|
|
||||||
|
## 1、介绍
|
||||||
|
|
||||||
|
这个软件包包含一些外设设备操作的例程。
|
||||||
|
|
||||||
|
### 1.1 例程说明
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
| ---------------- | ------------------------------- |
|
||||||
|
| adc_vol_sample.c | 使用 ADC 设备转换电压数据 |
|
||||||
|
| can_sample.c | 通过 CAN 设备发送一帧,并创建一个线程接收数据然后打印输出。 |
|
||||||
|
| hwtimer_sample.c | 使用 硬件定时器定时 |
|
||||||
|
| i2c_sample.c | 使用 i2c 设备进行读写 |
|
||||||
|
| pm.c | 反复进入不同程度的睡眠。 |
|
||||||
|
| led_blink_sample.c | 使用 pin 设备控制 LED 闪烁 |
|
||||||
|
| pin_beep_sample.c | 使用 pin 设备控制蜂鸣器 |
|
||||||
|
| pwm_led_sample.c | 使用 pwm 设备控制 LED 的亮度 |
|
||||||
|
| rtc_sample.c | 使用 rtc 设备设置年月日时分秒信息 |
|
||||||
|
| spi_sample.c | 使用 spi 设备进行读写 |
|
||||||
|
| uart_sample.c | 使用 serial 设备中断接收及轮询发送模式收发数据 |
|
||||||
|
|
||||||
|
### 1.2 依赖
|
||||||
|
|
||||||
|
依赖设备管理模块提供的设备驱动。
|
||||||
|
|
||||||
|
## 2、如何打开 外设驱动测试用例
|
||||||
|
|
||||||
|
使用 外设驱动测试用例 需要在 RT-Thread 的menuconfig中选择它,具体路径如下:
|
||||||
|
|
||||||
|
```
|
||||||
|
Hardware Driver Config --->
|
||||||
|
Peripheral Driver test example--->
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3、使用 外设驱动测试用例
|
||||||
|
|
||||||
|
在打开 Peripheral Driver test example 后,当进行 BSP 编译时,选择的软件包相关源代码会被加入到 BSP 工程中进行编译。
|
||||||
|
|
||||||
|
## 4、注意事项
|
||||||
|
|
||||||
|
暂无。
|
||||||
|
|
||||||
|
## 5、联系方式 & 感谢
|
||||||
|
|
||||||
|
* 维护:[misonyo](https://github.com/misonyo)
|
||||||
|
* 主页:https://github.com/RT-Thread-packages/peripheral-sample
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-11-29 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单: ADC 设备使用例程
|
||||||
|
* 例程导出了 adc_sample 命令到控制终端
|
||||||
|
* 命令调用格式:adc_sample
|
||||||
|
* 程序功能:通过 ADC 设备采样电压值并转换为数值。
|
||||||
|
* 示例代码参考电压为3.3V,转换位数为12位。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define ADC_DEV_NAME "adc0" /* ADC 设备名称 */
|
||||||
|
#define ADC_DEV_CHANNEL 5 /* PA1 ADC 通道 */
|
||||||
|
#define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
|
||||||
|
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 */
|
||||||
|
|
||||||
|
static int adc_vol_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_adc_device_t adc_dev;
|
||||||
|
rt_uint32_t value, vol;
|
||||||
|
rt_err_t ret = RT_EOK;
|
||||||
|
|
||||||
|
/* 查找设备 */
|
||||||
|
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
|
||||||
|
if (adc_dev == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 使能设备 */
|
||||||
|
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
|
||||||
|
|
||||||
|
/* 读取采样值 */
|
||||||
|
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
|
||||||
|
rt_kprintf("the value is :%d \n", value);
|
||||||
|
|
||||||
|
/* 转换为对应电压值 */
|
||||||
|
vol = value * REFER_VOLTAGE / CONVERT_BITS;
|
||||||
|
rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
|
||||||
|
|
||||||
|
/* 关闭通道 */
|
||||||
|
ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2019-06-25 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 CAN 设备使用例程
|
||||||
|
* 例程导出了 can_sample 命令到控制终端
|
||||||
|
* 命令调用格式:can_sample can2
|
||||||
|
* 命令解释:命令第二个参数是要使用的 CAN 设备名称,为空则使用默认的 CAN 设备
|
||||||
|
* 程序功能:通过 CAN 设备发送一帧,并创建一个线程接收数据然后打印输出。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include "rtdevice.h"
|
||||||
|
|
||||||
|
#define CAN_DEV_NAME "can2" /* CAN 设备名称 */
|
||||||
|
|
||||||
|
static struct rt_semaphore rx_sem; /* 用于接收消息的信号量 */
|
||||||
|
static rt_device_t can_dev; /* CAN 设备句柄 */
|
||||||
|
|
||||||
|
/* 接收数据回调函数 */
|
||||||
|
static rt_err_t can_rx_call(rt_device_t dev, rt_size_t size)
|
||||||
|
{
|
||||||
|
/* CAN 接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
|
||||||
|
rt_sem_release(&rx_sem);
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void can_rx_thread(void *parameter)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct rt_can_msg rxmsg = {0};
|
||||||
|
|
||||||
|
/* 设置接收回调函数 */
|
||||||
|
rt_device_set_rx_indicate(can_dev, can_rx_call);
|
||||||
|
|
||||||
|
#ifdef RT_CAN_USING_HDR
|
||||||
|
|
||||||
|
rt_err_t res;
|
||||||
|
|
||||||
|
struct rt_can_filter_item items[5] =
|
||||||
|
{
|
||||||
|
RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 0, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x100~0x1ff,hdr为-1,设置默认过滤表 */
|
||||||
|
RT_CAN_FILTER_ITEM_INIT(0x300, 0, 0, 0, 0x700, RT_NULL, RT_NULL), /* std,match ID:0x300~0x3ff,hdr为-1 */
|
||||||
|
RT_CAN_FILTER_ITEM_INIT(0x211, 0, 0, 0, 0x7ff, RT_NULL, RT_NULL), /* std,match ID:0x211,hdr为-1 */
|
||||||
|
RT_CAN_FILTER_STD_INIT(0x486, RT_NULL, RT_NULL), /* std,match ID:0x486,hdr为-1 */
|
||||||
|
{0x555, 0, 0, 0, 0x7ff, 7,} /* std,match ID:0x555,hdr为7,指定设置7号过滤表 */
|
||||||
|
};
|
||||||
|
struct rt_can_filter_config cfg = {5, 1, items}; /* 一共有5个过滤表 */
|
||||||
|
/* 设置硬件过滤表 */
|
||||||
|
res = rt_device_control(can_dev, RT_CAN_CMD_SET_FILTER, &cfg);
|
||||||
|
RT_ASSERT(res == RT_EOK);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
/* hdr值为-1,表示直接从uselist链表读取数据 */
|
||||||
|
rxmsg.hdr = -1;
|
||||||
|
/* 阻塞等待接收信号量 */
|
||||||
|
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
|
||||||
|
/* 从CAN读取一帧数据 */
|
||||||
|
rt_device_read(can_dev, 0, &rxmsg, sizeof(rxmsg));
|
||||||
|
/* 打印数据ID及内容 */
|
||||||
|
rt_kprintf("ID:%x ", rxmsg.id);
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
rt_kprintf("%2x ", rxmsg.data[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int can_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct rt_can_msg msg = {0};
|
||||||
|
rt_err_t res;
|
||||||
|
rt_size_t size;
|
||||||
|
rt_thread_t thread;
|
||||||
|
char can_name[RT_NAME_MAX];
|
||||||
|
|
||||||
|
if (argc == 2)
|
||||||
|
{
|
||||||
|
rt_strncpy(can_name, argv[1], RT_NAME_MAX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_strncpy(can_name, CAN_DEV_NAME, RT_NAME_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
can_dev = rt_device_find(can_name);
|
||||||
|
if (!can_dev)
|
||||||
|
{
|
||||||
|
rt_kprintf("find %s failed!\n", can_name);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 初始化CAN接收信号量 */
|
||||||
|
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
|
||||||
|
|
||||||
|
/* 以中断接收及发送方式打开CAN设备 */
|
||||||
|
res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX);
|
||||||
|
RT_ASSERT(res == RT_EOK);
|
||||||
|
|
||||||
|
thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10);
|
||||||
|
if (thread != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_thread_startup(thread);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("create can_rx thread failed!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
msg.id = 0x78; /* ID为0x78 */
|
||||||
|
msg.ide = RT_CAN_STDID; /* 标准格式 */
|
||||||
|
msg.rtr = RT_CAN_DTR; /* 数据帧 */
|
||||||
|
msg.len = 8; /* 数据长度为8 */
|
||||||
|
/* 待发送的8字节数据 */
|
||||||
|
msg.data[0] = 0x00;
|
||||||
|
msg.data[1] = 0x11;
|
||||||
|
msg.data[2] = 0x22;
|
||||||
|
msg.data[3] = 0x33;
|
||||||
|
msg.data[4] = 0x44;
|
||||||
|
msg.data[5] = 0x55;
|
||||||
|
msg.data[6] = 0x66;
|
||||||
|
msg.data[7] = 0x77;
|
||||||
|
/* 发送一帧CAN数据 */
|
||||||
|
size = rt_device_write(can_dev, 0, &msg, sizeof(msg));
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
rt_kprintf("can dev write data failed!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(can_sample, can device sample);
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-11-30 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 hwtimer 设备使用例程
|
||||||
|
* 例程导出了 hwtimer_sample 命令到控制终端
|
||||||
|
* 命令调用格式:hwtimer_sample
|
||||||
|
* 程序功能:硬件定时器超时回调函数周期性的打印当前tick值,2次tick值之差换算为时间等同于定时时间值。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */
|
||||||
|
|
||||||
|
/* 定时器超时回调函数 */
|
||||||
|
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
|
||||||
|
{
|
||||||
|
rt_kprintf("tick is :%d !\n", rt_tick_get());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hwtimer_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_err_t ret = RT_EOK;
|
||||||
|
rt_hwtimerval_t timeout_s; /* 定时器超时值 */
|
||||||
|
rt_device_t hw_dev = RT_NULL; /* 定时器设备句柄 */
|
||||||
|
rt_hwtimer_mode_t mode; /* 定时器模式 */
|
||||||
|
|
||||||
|
/* 查找定时器设备 */
|
||||||
|
hw_dev = rt_device_find(HWTIMER_DEV_NAME);
|
||||||
|
if (hw_dev == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 以读写方式打开设备 */
|
||||||
|
ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
|
||||||
|
if (ret != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf("open %s device failed!\n", HWTIMER_DEV_NAME);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置超时回调函数 */
|
||||||
|
rt_device_set_rx_indicate(hw_dev, timeout_cb);
|
||||||
|
|
||||||
|
/* 设置模式为周期性定时器 */
|
||||||
|
mode = HWTIMER_MODE_PERIOD;
|
||||||
|
ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
|
||||||
|
if (ret != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf("set mode failed! ret is :%d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置定时器超时值为5s并启动定时器 */
|
||||||
|
timeout_s.sec = 5; /* 秒 */
|
||||||
|
timeout_s.usec = 0; /* 微秒 */
|
||||||
|
|
||||||
|
if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s))
|
||||||
|
{
|
||||||
|
rt_kprintf("set timeout value failed\n");
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 延时3500ms */
|
||||||
|
rt_thread_mdelay(3500);
|
||||||
|
|
||||||
|
/* 读取定时器当前值 */
|
||||||
|
rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s));
|
||||||
|
rt_kprintf("Read: Sec = %d, Usec = %d\n", timeout_s.sec, timeout_s.usec);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample);
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2020-12-15 liuhy first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 I2C 设备使用例程
|
||||||
|
* 例程导出了 i2c_io_sample 命令到控制终端
|
||||||
|
* 命令调用格式:i2c_io_sample
|
||||||
|
* 命令解释:使用默认的I2C总线设备
|
||||||
|
* 程序功能:通过 I2C 设备接收数据并打印,然后将接收的字符加1输出。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define I2C_BUS_NAME "i2c1" /* I2C总线设备名称 */
|
||||||
|
#define SLAVE_ADDR 0x2D /* 从机地址 */
|
||||||
|
#define STR_LEN 16 /* 接收发送的数据长度 */
|
||||||
|
|
||||||
|
static void i2c_io_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
struct rt_i2c_bus_device *i2c_bus = RT_NULL; /* I2C总线设备句柄 */
|
||||||
|
struct rt_i2c_msg temp_msg; /* I2C消息 */
|
||||||
|
rt_uint8_t buffer[STR_LEN] = { 0U };
|
||||||
|
rt_uint32_t i,num_msg;
|
||||||
|
rt_size_t s_stat;
|
||||||
|
|
||||||
|
i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(I2C_BUS_NAME); /* 通过名字获取I2C总线设备的句柄 */
|
||||||
|
|
||||||
|
if( i2c_bus == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("can't find i2c device :%s !\n",I2C_BUS_NAME);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*初始化消息*/
|
||||||
|
temp_msg.addr = SLAVE_ADDR; /* 从机地址 */
|
||||||
|
temp_msg.len = STR_LEN; /* 传输的数据长度 */
|
||||||
|
temp_msg.buf = buffer; /* 读写缓存器 */
|
||||||
|
|
||||||
|
num_msg = 1; /* 传输一条消息 */
|
||||||
|
|
||||||
|
temp_msg.flags = RT_I2C_RD; /* I2C读 */
|
||||||
|
s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输消息 */
|
||||||
|
|
||||||
|
rt_thread_mdelay(400);
|
||||||
|
|
||||||
|
if( s_stat == num_msg )
|
||||||
|
{
|
||||||
|
rt_kprintf("receive successful. \n receive messege : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < STR_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("device s% recieve fail \n buffer : s%\n",I2C_BUS_NAME,buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0 ; i < STR_LEN ; i++)
|
||||||
|
buffer[i]++;
|
||||||
|
|
||||||
|
temp_msg.flags = RT_I2C_WR; /* I2C写 */
|
||||||
|
s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输一条 */
|
||||||
|
|
||||||
|
rt_thread_mdelay(400);
|
||||||
|
|
||||||
|
if( s_stat == num_msg )
|
||||||
|
{
|
||||||
|
rt_kprintf(" send successful \n messege : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < STR_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("device s% send fail \n",I2C_BUS_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(i2c_io_sample, i2c io sample);
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-09-25 misonyo first edition.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个通过PIN脚控制LED亮灭的使用例程
|
||||||
|
* 例程导出了 led_sample 命令到控制终端
|
||||||
|
* 命令调用格式:led_sample
|
||||||
|
* 命令解释:命令第二个参数是要使用的PIN脚编号,为空则使用例程默认的引脚编号。
|
||||||
|
* 程序功能:程序创建一个led线程,线程每隔1000ms改变PIN脚状态,达到控制led灯
|
||||||
|
* 亮灭的效果。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* PIN脚编号,查看驱动文件drv_gpio.c确定 */
|
||||||
|
#define LED_PIN_NUM 45 /*PA12*/
|
||||||
|
static int pin_num;
|
||||||
|
|
||||||
|
static void led_entry(void *parameter)
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
/* 设置PIN脚模式为输出 */
|
||||||
|
rt_pin_mode(pin_num, PIN_MODE_OUTPUT);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
rt_kprintf("thread run count : %d\r\n", count);
|
||||||
|
/* 拉低PIN脚 */
|
||||||
|
rt_pin_write(pin_num, PIN_LOW);
|
||||||
|
rt_kprintf("led on!\r\n");
|
||||||
|
/* 延时1000ms */
|
||||||
|
rt_thread_mdelay(1000);
|
||||||
|
|
||||||
|
/* 拉高PIN脚 */
|
||||||
|
rt_pin_write(pin_num, PIN_HIGH);
|
||||||
|
rt_kprintf("led off!\r\n");
|
||||||
|
rt_thread_mdelay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int led_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
rt_err_t ret = RT_EOK;
|
||||||
|
|
||||||
|
/* 判断命令行参数是否给定了PIN脚编号 */
|
||||||
|
if (argc == 2)
|
||||||
|
{
|
||||||
|
pin_num = atoi(argv[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pin_num = LED_PIN_NUM;
|
||||||
|
}
|
||||||
|
|
||||||
|
tid = rt_thread_create("led",
|
||||||
|
led_entry,
|
||||||
|
RT_NULL,
|
||||||
|
512,
|
||||||
|
RT_THREAD_PRIORITY_MAX / 3,
|
||||||
|
20);
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(led_sample, led sample);
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-08-15 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 PIN 设备使用例程
|
||||||
|
* 例程导出了 pin_beep_sample 命令到控制终端
|
||||||
|
* 命令调用格式:pin_beep_sample
|
||||||
|
* 程序功能:通过按键控制蜂鸣器对应引脚的电平状态控制蜂鸣器
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
/* 引脚编号,通过查看驱动文件drv_gpio.c确定 */
|
||||||
|
#ifndef BEEP_PIN_NUM
|
||||||
|
#define BEEP_PIN_NUM 45 /* PA12 */
|
||||||
|
#endif
|
||||||
|
#ifndef KEY0_PIN_NUM
|
||||||
|
#define KEY0_PIN_NUM 18 /* PF0 */
|
||||||
|
#endif
|
||||||
|
#ifndef KEY1_PIN_NUM
|
||||||
|
#define KEY1_PIN_NUM 19 /* PF1 */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void beep_on(void *args)
|
||||||
|
{
|
||||||
|
rt_kprintf("turn on beep!\n");
|
||||||
|
|
||||||
|
rt_pin_write(BEEP_PIN_NUM, PIN_HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void beep_off(void *args)
|
||||||
|
{
|
||||||
|
rt_kprintf("turn off beep!\n");
|
||||||
|
|
||||||
|
rt_pin_write(BEEP_PIN_NUM, PIN_LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pin_beep_sample(void)
|
||||||
|
{
|
||||||
|
/* 蜂鸣器引脚为输出模式 */
|
||||||
|
rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT);
|
||||||
|
/* 默认低电平 */
|
||||||
|
rt_pin_write(BEEP_PIN_NUM, PIN_LOW);
|
||||||
|
|
||||||
|
/* 按键0引脚为输入模式 */
|
||||||
|
rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP);
|
||||||
|
/* 绑定中断,下降沿模式,回调函数名为beep_on */
|
||||||
|
rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL);
|
||||||
|
/* 使能中断 */
|
||||||
|
rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE);
|
||||||
|
|
||||||
|
/* 按键1引脚为输入模式 */
|
||||||
|
rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP);
|
||||||
|
/* 绑定中断,下降沿模式,回调函数名为beep_off */
|
||||||
|
rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_off, RT_NULL);
|
||||||
|
/* 使能中断 */
|
||||||
|
rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE);
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(pin_beep_sample, pin beep sample);
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2020-12-15 liuhy first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 pm睡眠唤醒的使用例程
|
||||||
|
* 例程导出了 pm_sample 命令到控制终端
|
||||||
|
* 命令调用格式:pm_sample
|
||||||
|
* 命令解释:进入不同的睡眠模式,然后用按键唤醒
|
||||||
|
* 程序功能:通过串口输出字符串,告知进入睡眠和唤醒睡眠的情况。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define PM_NAME "pm" /* 设备名称 */
|
||||||
|
#define WAKE_UP_PIN 18 /* 唤醒源 */
|
||||||
|
#define SLEEP_TIMES 12 /* 进入睡眠次数,轮流进入不同的睡眠模式,包括无睡眠模式 */
|
||||||
|
|
||||||
|
struct pm_callback_t
|
||||||
|
{
|
||||||
|
volatile int in_fun_times; /*进入函数的次数*/
|
||||||
|
volatile char flag; /*标志*/
|
||||||
|
volatile int mode; /*需要打印的模式*/
|
||||||
|
};
|
||||||
|
|
||||||
|
volatile struct pm_callback_t g_pm_data;
|
||||||
|
|
||||||
|
/*进入睡眠前,睡眠唤醒后,都会进入。*/
|
||||||
|
/*函数打印睡眠相关的信息*/
|
||||||
|
void sleep_in_out_callback(rt_uint8_t event, rt_uint8_t mode, void *data)
|
||||||
|
{
|
||||||
|
/*没有标志,不处理*/
|
||||||
|
if(!(g_pm_data.flag))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*标志不正常,清空标志*/
|
||||||
|
if((g_pm_data.flag) > 2)
|
||||||
|
{
|
||||||
|
(g_pm_data.flag) = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*模式不匹配*/
|
||||||
|
if(g_pm_data.mode != mode )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*进入的事件*/
|
||||||
|
switch(event)
|
||||||
|
{
|
||||||
|
/*进入睡眠前*/
|
||||||
|
case RT_PM_ENTER_SLEEP: g_pm_data.flag = 1;
|
||||||
|
rt_kprintf("\n\r##%d : ENTER ",g_pm_data.in_fun_times);
|
||||||
|
g_pm_data.in_fun_times++; /*进入睡眠次数+1*/
|
||||||
|
break;
|
||||||
|
/*睡眠唤醒后*/
|
||||||
|
case RT_PM_EXIT_SLEEP: g_pm_data.flag = 0; /*睡眠唤醒后*/
|
||||||
|
rt_kprintf("\n\rEXIT\n\r");
|
||||||
|
rt_pm_release(mode); /*释放休眠模式*/
|
||||||
|
return;
|
||||||
|
|
||||||
|
default: break;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*当前的睡眠模式*/
|
||||||
|
switch(mode)
|
||||||
|
{
|
||||||
|
case PM_SLEEP_MODE_NONE: rt_kprintf("PM_SLEEP_MODE_NONE\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_IDLE: rt_kprintf("PM_SLEEP_MODE_IDLE\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_LIGHT: rt_kprintf("PM_SLEEP_MODE_LIGHT\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_DEEP: rt_kprintf("PM_SLEEP_MODE_DEEP\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_STANDBY: rt_kprintf("PM_SLEEP_MODE_STANDBY\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_SHUTDOWN: rt_kprintf("PM_SLEEP_MODE_SHUTDOWN\n\r");
|
||||||
|
break;
|
||||||
|
case PM_SLEEP_MODE_MAX: rt_kprintf("PM_SLEEP_MODE_MAX\n\r");
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pm测试函数 */
|
||||||
|
static void pm_test(void *parameter)
|
||||||
|
{
|
||||||
|
int in_mode[7],i = 0;
|
||||||
|
|
||||||
|
g_pm_data.in_fun_times = 0;
|
||||||
|
g_pm_data.flag = 0;
|
||||||
|
|
||||||
|
in_mode[0] = PM_SLEEP_MODE_NONE;
|
||||||
|
in_mode[1] = PM_SLEEP_MODE_IDLE;
|
||||||
|
in_mode[2] = PM_SLEEP_MODE_LIGHT;
|
||||||
|
in_mode[3] = PM_SLEEP_MODE_DEEP;
|
||||||
|
in_mode[4] = PM_SLEEP_MODE_STANDBY;
|
||||||
|
in_mode[5] = PM_SLEEP_MODE_SHUTDOWN;
|
||||||
|
in_mode[6] = PM_SLEEP_MODE_MAX;
|
||||||
|
|
||||||
|
/*设置回调函数和私有数据*/
|
||||||
|
rt_pm_notify_set(sleep_in_out_callback,RT_NULL);
|
||||||
|
|
||||||
|
while(i < SLEEP_TIMES)
|
||||||
|
{
|
||||||
|
|
||||||
|
g_pm_data.mode = in_mode[i%6];
|
||||||
|
|
||||||
|
/*无休眠模式,不赋予标志*/
|
||||||
|
if(g_pm_data.mode != PM_SLEEP_MODE_NONE)
|
||||||
|
{
|
||||||
|
g_pm_data.flag = 2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*请求选择的休眠模式*/
|
||||||
|
rt_pm_request(in_mode[i%6]);
|
||||||
|
|
||||||
|
rt_thread_mdelay(500);
|
||||||
|
|
||||||
|
/*无休眠模式,不需要额外的等待*/
|
||||||
|
while(( g_pm_data.flag != 0 )&&(g_pm_data.mode != PM_SLEEP_MODE_NONE))
|
||||||
|
{
|
||||||
|
rt_thread_mdelay(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*释放选择的休眠模式*/
|
||||||
|
rt_pm_release(in_mode[i%6]);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
}
|
||||||
|
/*清除回调函数和私有数据*/
|
||||||
|
rt_pm_notify_set(RT_NULL,RT_NULL);
|
||||||
|
rt_kprintf("thread pm_test close\n\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*按键唤醒的回调函数*/
|
||||||
|
void wake_by_pin(void *args)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pm_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_thread_t thread;
|
||||||
|
|
||||||
|
/* 按键引脚为输入模式 */
|
||||||
|
rt_pin_mode(WAKE_UP_PIN, PIN_MODE_INPUT_PULLUP);
|
||||||
|
|
||||||
|
/* 绑定中断,下降沿模式,回调函数名为wake_by_pin */
|
||||||
|
rt_pin_attach_irq(WAKE_UP_PIN, PIN_IRQ_MODE_RISING, wake_by_pin, RT_NULL);
|
||||||
|
/* 使能中断 */
|
||||||
|
rt_pin_irq_enable(WAKE_UP_PIN, PIN_IRQ_ENABLE);
|
||||||
|
|
||||||
|
thread = rt_thread_create("pm_test", pm_test, RT_NULL, 1024, 25, 10);
|
||||||
|
|
||||||
|
if (thread != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_thread_startup(thread);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("create pm_test thread failed!\n\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(pm_sample, pm sample);
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-11-25 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 PWM 设备使用例程
|
||||||
|
* 例程导出了 pwm_led_sample 命令到控制终端
|
||||||
|
* 命令调用格式:pwm_led_sample
|
||||||
|
* 程序功能:通过 PWM 设备控制 LED 灯的亮度,可以看到LED不停的由暗变到亮,然后又从亮变到暗。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define LED_PIN_NUM 45 /* PA12 LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
|
||||||
|
#define PWM_DEV_NAME "pwm0" /* PWM设备名称 */
|
||||||
|
#define PWM_DEV_CHANNEL 2 /* PA9 PWM通道 */
|
||||||
|
|
||||||
|
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
|
||||||
|
|
||||||
|
static int pwm_led_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_uint32_t period, pulse, dir;
|
||||||
|
|
||||||
|
period = 500000; /* 周期为0.5ms,单位为纳秒ns */
|
||||||
|
dir = 1; /* PWM脉冲宽度值的增减方向 */
|
||||||
|
pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */
|
||||||
|
|
||||||
|
/* 查找设备 */
|
||||||
|
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
|
||||||
|
if (pwm_dev == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置PWM周期和脉冲宽度默认值 */
|
||||||
|
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
|
||||||
|
/* 使能设备 */
|
||||||
|
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
rt_thread_mdelay(50);
|
||||||
|
if (dir)
|
||||||
|
{
|
||||||
|
pulse += 5000; /* 从0值开始每次增加5000ns */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pulse -= 5000; /* 从最大值开始每次减少5000ns */
|
||||||
|
}
|
||||||
|
if (pulse >= period)
|
||||||
|
{
|
||||||
|
dir = 0;
|
||||||
|
}
|
||||||
|
if (0 == pulse)
|
||||||
|
{
|
||||||
|
dir = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置PWM周期和脉冲宽度 */
|
||||||
|
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(pwm_led_sample, pwm sample);
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-11-30 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 RTC 设备使用例程
|
||||||
|
* 例程导出了 rtc_sample 命令到控制终端
|
||||||
|
* 命令调用格式:rtc_sample
|
||||||
|
* 程序功能:设置RTC设备的日期和时间,延时一段时间后获取当前时间并打印显示。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
static int rtc_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_err_t ret = RT_EOK;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
/* 设置日期 */
|
||||||
|
ret = set_date(2018, 12, 3);
|
||||||
|
if (ret != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf("set RTC date failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置时间 */
|
||||||
|
ret = set_time(11, 15, 50);
|
||||||
|
if (ret != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf("set RTC time failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 延时3秒 */
|
||||||
|
rt_thread_mdelay(3000);
|
||||||
|
|
||||||
|
/* 获取时间 */
|
||||||
|
now = time(RT_NULL);
|
||||||
|
rt_kprintf("%s\n", ctime(&now));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(rtc_sample, rtc sample);
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2020-12-15 liuhy first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 SPI 设备使用例程
|
||||||
|
* 例程导出了 spi_io_sample 命令到控制终端
|
||||||
|
* 命令调用格式:spi_io_sample
|
||||||
|
* 程序功能:通过SPI设备先读取数据,然后每个字符加1后输出。
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
#define SPI_DEVICE_NAME "spi00"
|
||||||
|
#define BUF_LEN 16
|
||||||
|
|
||||||
|
static void spi_io_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct rt_spi_device * spi_dev; /* spi设备的句柄 */
|
||||||
|
struct rt_spi_configuration spi_config;
|
||||||
|
rt_uint8_t i,buffer[BUF_LEN] = { 0U };
|
||||||
|
rt_err_t s_stat;
|
||||||
|
rt_err_t result;
|
||||||
|
|
||||||
|
/* 查找 spi设备 获取spi设备句柄 */
|
||||||
|
spi_dev = (struct rt_spi_device *)rt_device_find(SPI_DEVICE_NAME);
|
||||||
|
|
||||||
|
if (spi_dev == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("spi sample run failed! can't find %s device!\n", SPI_DEVICE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 清空配置结构体 */
|
||||||
|
rt_memset(&spi_config,0,sizeof(struct rt_spi_configuration));
|
||||||
|
|
||||||
|
spi_config.mode &= ~RT_SPI_SLAVE; /* 主机模式 */
|
||||||
|
spi_config.mode &= ~RT_SPI_3WIRE; /* 4线,双向传输 */
|
||||||
|
spi_config.mode |= RT_SPI_CPHA; /* 第二边沿采样 */
|
||||||
|
spi_config.mode |= RT_SPI_CPOL; /* 空闲高电平 */
|
||||||
|
spi_config.mode |= RT_SPI_NO_CS; /* 禁用软件从机选择管理 */
|
||||||
|
spi_config.mode |= RT_SPI_MSB; /* 高位在前 */
|
||||||
|
|
||||||
|
spi_config.data_width = 8; /* 数据长度:8 */
|
||||||
|
|
||||||
|
spi_config.max_hz = 2000000; /* 最快时钟频率 */
|
||||||
|
|
||||||
|
/* 配置SPI设备 */
|
||||||
|
s_stat = rt_spi_configure(spi_dev,&spi_config);
|
||||||
|
|
||||||
|
if(s_stat != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf(" spi config fail !\n ");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 获取总线 ,防止总线被多个线程同时使用 */
|
||||||
|
result = rt_spi_take_bus(spi_dev);
|
||||||
|
|
||||||
|
if (result != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf(" %s take spi bus failed! \n", SPI_DEVICE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 选中片选 */
|
||||||
|
result = rt_spi_take(spi_dev);
|
||||||
|
|
||||||
|
if (result != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf(" %s take spi cs failed! \n", SPI_DEVICE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*接收一次数据*/
|
||||||
|
result = rt_spi_recv(spi_dev,buffer,BUF_LEN);
|
||||||
|
|
||||||
|
if(result != BUF_LEN)
|
||||||
|
{
|
||||||
|
rt_kprintf("receive fail. \n buffer is : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < BUF_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_kprintf("receive successful. \n buffer is : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < BUF_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
|
||||||
|
/* 将接收到的数据加1 */
|
||||||
|
for( i = 0 ; i < BUF_LEN ; i++)
|
||||||
|
buffer[i]++;
|
||||||
|
|
||||||
|
/*发送数据*/
|
||||||
|
result = rt_spi_send(spi_dev,buffer,BUF_LEN);
|
||||||
|
|
||||||
|
if(result != BUF_LEN)
|
||||||
|
{
|
||||||
|
rt_kprintf("send fail. \n buffer is : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < BUF_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_kprintf("send successful. \n buffer is : %s \n:",buffer);
|
||||||
|
|
||||||
|
for( i = 0 ; i < BUF_LEN ; i++)
|
||||||
|
rt_kprintf(" %x",(unsigned int)buffer[i]);
|
||||||
|
|
||||||
|
rt_kprintf("\n");
|
||||||
|
|
||||||
|
/* 释放片选 */
|
||||||
|
result = rt_spi_release(spi_dev);
|
||||||
|
|
||||||
|
if (result != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf(" %s release spi cs failed! \n", SPI_DEVICE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 释放总线 */
|
||||||
|
result = rt_spi_release_bus(spi_dev);
|
||||||
|
|
||||||
|
if (result != RT_EOK)
|
||||||
|
{
|
||||||
|
rt_kprintf(" %s release spi bus failed! \n", SPI_DEVICE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(spi_io_sample, spi sample);
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-08-15 misonyo first implementation.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* 程序清单:这是一个 串口 设备使用例程
|
||||||
|
* 例程导出了 uart_sample 命令到控制终端
|
||||||
|
* 命令调用格式:uart_sample uart2
|
||||||
|
* 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备
|
||||||
|
* 程序功能:通过串口输出字符串"hello RT-Thread!",然后错位输出输入的字符
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
#define SAMPLE_UART_NAME "uart1" /* 串口设备名称 */
|
||||||
|
|
||||||
|
/* 用于接收消息的信号量 */
|
||||||
|
static struct rt_semaphore rx_sem;
|
||||||
|
static rt_device_t serial;
|
||||||
|
|
||||||
|
/* 接收数据回调函数 */
|
||||||
|
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
|
||||||
|
{
|
||||||
|
/* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
|
||||||
|
rt_sem_release(&rx_sem);
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void serial_thread_entry(void *parameter)
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
/* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */
|
||||||
|
while (rt_device_read(serial, -1, &ch, 1) != 1)
|
||||||
|
{
|
||||||
|
/* 阻塞等待接收信号量,等到信号量后再次读取数据 */
|
||||||
|
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
|
||||||
|
}
|
||||||
|
/* 读取到的数据通过串口错位输出 */
|
||||||
|
ch = ch + 1;
|
||||||
|
rt_device_write(serial, 0, &ch, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int uart_sample(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
rt_err_t ret = RT_EOK;
|
||||||
|
char uart_name[RT_NAME_MAX];
|
||||||
|
char str[] = "hello RT-Thread!\r\n";
|
||||||
|
|
||||||
|
if (argc == 2)
|
||||||
|
{
|
||||||
|
rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 查找串口设备 */
|
||||||
|
serial = rt_device_find(uart_name);
|
||||||
|
if (!serial)
|
||||||
|
{
|
||||||
|
rt_kprintf("find %s failed!\n", uart_name);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 初始化信号量 */
|
||||||
|
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
|
||||||
|
/* 以中断接收及轮询发送方式打开串口设备 */
|
||||||
|
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
|
||||||
|
/* 设置接收回调函数 */
|
||||||
|
rt_device_set_rx_indicate(serial, uart_input);
|
||||||
|
/* 发送字符串 */
|
||||||
|
rt_device_write(serial, 0, str, (sizeof(str) - 1));
|
||||||
|
|
||||||
|
/* 创建 serial 线程 */
|
||||||
|
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
|
||||||
|
/* 创建成功则启动线程 */
|
||||||
|
if (thread != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_thread_startup(thread);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
MSH_CMD_EXPORT(uart_sample, uart device sample);
|
||||||
@@ -146,9 +146,9 @@ static rt_err_t es32f0_get_adc_value(struct rt_adc_device *device, rt_uint32_t c
|
|||||||
RT_ASSERT(value != RT_NULL);
|
RT_ASSERT(value != RT_NULL);
|
||||||
|
|
||||||
/* config adc channel */
|
/* config adc channel */
|
||||||
nm_config.channel = es32f0_adc_get_channel(channel);
|
nm_config.ch = es32f0_adc_get_channel(channel);
|
||||||
nm_config.rank = ADC_NCH_RANK_1;
|
nm_config.idx = ADC_NCH_IDX_1;
|
||||||
nm_config.samp_time = ADC_SAMPLETIME_4;
|
nm_config.samp = ADC_SAMPLETIME_4;
|
||||||
ald_adc_normal_channel_config(_hadc, &nm_config);
|
ald_adc_normal_channel_config(_hadc, &nm_config);
|
||||||
|
|
||||||
ald_adc_normal_start(_hadc);
|
ald_adc_normal_start(_hadc);
|
||||||
@@ -172,16 +172,16 @@ int rt_hw_adc_init(void)
|
|||||||
|
|
||||||
/* adc function initialization */
|
/* adc function initialization */
|
||||||
_h_adc0.perh = ADC0;
|
_h_adc0.perh = ADC0;
|
||||||
_h_adc0.init.data_align = ADC_DATAALIGN_RIGHT;
|
_h_adc0.init.align = ADC_DATAALIGN_RIGHT;
|
||||||
_h_adc0.init.scan_mode = DISABLE;
|
_h_adc0.init.scan = DISABLE;
|
||||||
_h_adc0.init.cont_mode = DISABLE;
|
_h_adc0.init.cont = DISABLE;
|
||||||
_h_adc0.init.disc_mode = ADC_ALL_DISABLE;
|
_h_adc0.init.disc = ADC_ALL_DISABLE;
|
||||||
_h_adc0.init.disc_nbr = ADC_DISC_NBR_1;
|
_h_adc0.init.disc_nr = ADC_DISC_NR_1;
|
||||||
_h_adc0.init.conv_res = ADC_CONV_RES_10;
|
_h_adc0.init.data_bit = ADC_CONV_BIT_12;
|
||||||
_h_adc0.init.clk_div = ADC_CKDIV_128;
|
_h_adc0.init.div = ADC_CKDIV_128;
|
||||||
_h_adc0.init.nche_sel = ADC_NCHESEL_MODE_ALL;
|
_h_adc0.init.nche_sel = ADC_NCHESEL_MODE_ALL;
|
||||||
_h_adc0.init.neg_ref = ADC_NEG_REF_VSS;
|
_h_adc0.init.n_ref = ADC_NEG_REF_VSS;
|
||||||
_h_adc0.init.pos_ref = ADC_POS_REF_VDD;
|
_h_adc0.init.p_ref = ADC_POS_REF_VDD;
|
||||||
ald_adc_init(&_h_adc0);
|
ald_adc_init(&_h_adc0);
|
||||||
|
|
||||||
rt_hw_adc_register(&_device_adc0, "adc0", &es32f0_adc_ops, &_h_adc0);
|
rt_hw_adc_register(&_device_adc0, "adc0", &es32f0_adc_ops, &_h_adc0);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2019-03-19 wangyq the first version
|
* 2019-03-19 wangyq the first version
|
||||||
* 2019-11-01 wangyq update libraries
|
* 2019-11-01 wangyq update libraries
|
||||||
|
* 2020-12-15 liuhy update libraries
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
@@ -29,7 +30,7 @@ static void _i2c_init(void)
|
|||||||
|
|
||||||
/* Initialize I2C Pin */
|
/* Initialize I2C Pin */
|
||||||
gpio_instruct.mode = GPIO_MODE_OUTPUT;
|
gpio_instruct.mode = GPIO_MODE_OUTPUT;
|
||||||
gpio_instruct.odos = GPIO_PUSH_PULL;
|
gpio_instruct.odos = GPIO_OPEN_DRAIN;
|
||||||
gpio_instruct.pupd = GPIO_PUSH_UP;
|
gpio_instruct.pupd = GPIO_PUSH_UP;
|
||||||
gpio_instruct.odrv = GPIO_OUT_DRIVE_NORMAL;
|
gpio_instruct.odrv = GPIO_OUT_DRIVE_NORMAL;
|
||||||
gpio_instruct.flt = GPIO_FILTER_DISABLE;
|
gpio_instruct.flt = GPIO_FILTER_DISABLE;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* 2019-04-08 wangyq the first version
|
* 2019-04-08 wangyq the first version
|
||||||
* 2019-11-01 wangyq adapt to the new power management interface
|
* 2019-11-01 wangyq adapt to the new power management interface
|
||||||
*/
|
*/
|
||||||
|
#include <rthw.h>
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
#include <rtdevice.h>
|
#include <rtdevice.h>
|
||||||
#include <drv_lptim.h>
|
#include <drv_lptim.h>
|
||||||
@@ -24,6 +24,21 @@ static void uart_console_reconfig(void)
|
|||||||
rt_device_control(rt_console_get_device(), RT_DEVICE_CTRL_CONFIG, &config);
|
rt_device_control(rt_console_get_device(), RT_DEVICE_CTRL_CONFIG, &config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void delay(void)
|
||||||
|
{
|
||||||
|
long i;
|
||||||
|
rt_base_t level;
|
||||||
|
|
||||||
|
level = rt_hw_interrupt_disable();
|
||||||
|
i = 0;
|
||||||
|
do{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (i < 10000);
|
||||||
|
|
||||||
|
rt_hw_interrupt_enable(level);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function will put ES32F033x into sleep mode.
|
* This function will put ES32F033x into sleep mode.
|
||||||
*
|
*
|
||||||
@@ -50,22 +65,26 @@ static void sleep(struct rt_pm *pm, uint8_t mode)
|
|||||||
{
|
{
|
||||||
/* Enter SLEEP Mode, Main regulator is ON */
|
/* Enter SLEEP Mode, Main regulator is ON */
|
||||||
ald_pmu_stop1_enter();
|
ald_pmu_stop1_enter();
|
||||||
|
delay();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PM_SLEEP_MODE_DEEP:
|
case PM_SLEEP_MODE_DEEP:
|
||||||
/* Enter STOP 2 mode */
|
/* Enter STOP 2 mode */
|
||||||
ald_pmu_stop2_enter();
|
ald_pmu_stop2_enter();
|
||||||
|
delay();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PM_SLEEP_MODE_STANDBY:
|
case PM_SLEEP_MODE_STANDBY:
|
||||||
/* Enter STANDBY mode */
|
/* Enter STANDBY mode */
|
||||||
ald_pmu_stop2_enter();
|
ald_pmu_stop2_enter();
|
||||||
|
delay();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PM_SLEEP_MODE_SHUTDOWN:
|
case PM_SLEEP_MODE_SHUTDOWN:
|
||||||
/* Enter SHUTDOWNN mode */
|
/* Enter SHUTDOWNN mode */
|
||||||
ald_pmu_stop2_enter();
|
ald_pmu_stop2_enter();
|
||||||
|
delay();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 150 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 172 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 201 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
+27
-776
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
+136
-153
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -35,44 +35,44 @@ extern "C" {
|
|||||||
/** @defgroup BKPC_Public_Macros BKPC Public Macros
|
/** @defgroup BKPC_Public_Macros BKPC Public Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define BKPC_LOCK() (WRITE_REG(BKPC->PROT, 0))
|
#define BKPC_LOCK() (WRITE_REG(BKPC->PROT, 0U))
|
||||||
#define BKPC_UNLOCK() (WRITE_REG(BKPC->PROT, 0x9669AA55))
|
#define BKPC_UNLOCK() (WRITE_REG(BKPC->PROT, 0x9669AA55U))
|
||||||
#define BKPC_LRC_ENABLE() \
|
#define BKPC_LRC_ENABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
SET_BIT(BKPC->CR, BKPC_CR_LRCEN_MSK); \
|
SET_BIT(BKPC->CR, BKPC_CR_LRCEN_MSK); \
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define BKPC_LRC_DISABLE() \
|
#define BKPC_LRC_DISABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
CLEAR_BIT(BKPC->CR, BKPC_CR_LRCEN_MSK); \
|
CLEAR_BIT(BKPC->CR, BKPC_CR_LRCEN_MSK); \
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define BKPC_LOSM_ENABLE() \
|
#define BKPC_LOSM_ENABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
SET_BIT(BKPC->CR, BKPC_CR_LOSMEN_MSK); \
|
SET_BIT(BKPC->CR, BKPC_CR_LOSMEN_MSK); \
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define BKPC_LOSM_DISABLE() \
|
#define BKPC_LOSM_DISABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
CLEAR_BIT(BKPC->CR, BKPC_CR_LOSMEN_MSK);\
|
CLEAR_BIT(BKPC->CR, BKPC_CR_LOSMEN_MSK);\
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define BKPC_LOSC_ENABLE() \
|
#define BKPC_LOSC_ENABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
SET_BIT(BKPC->CR, BKPC_CR_LOSCEN_MSK); \
|
SET_BIT(BKPC->CR, BKPC_CR_LOSCEN_MSK); \
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define BKPC_LOSC_DISABLE() \
|
#define BKPC_LOSC_DISABLE() \
|
||||||
do { \
|
do { \
|
||||||
BKPC_UNLOCK(); \
|
BKPC_UNLOCK(); \
|
||||||
CLEAR_BIT(BKPC->CR, BKPC_CR_LOSCEN_MSK);\
|
CLEAR_BIT(BKPC->CR, BKPC_CR_LOSCEN_MSK);\
|
||||||
BKPC_LOCK(); \
|
BKPC_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
@@ -83,37 +83,31 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief BKPC ldo output select
|
* @brief BKPC ldo output select
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
BKPC_LDO_OUTPUT_1_6 = 0x0U, /**< 1.6V */
|
||||||
BKPC_LDO_OUTPUT_1_6 = 0x0, /**< 1.6V */
|
BKPC_LDO_OUTPUT_1_3 = 0x1U, /**< 1.3V */
|
||||||
BKPC_LDO_OUTPUT_1_3 = 0x1, /**< 1.3V */
|
BKPC_LDO_OUTPUT_1_4 = 0x2U, /**< 1.4V */
|
||||||
BKPC_LDO_OUTPUT_1_4 = 0x2, /**< 1.4V */
|
BKPC_LDO_OUTPUT_1_5 = 0x4U, /**< 1.5V */
|
||||||
BKPC_LDO_OUTPUT_1_5 = 0x4, /**< 1.5V */
|
|
||||||
} bkpc_ldo_output_t;
|
} bkpc_ldo_output_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief BKPC BOR voltage select
|
* @brief Standby wakeup port select
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
PMU_STANDBY_PORT_SEL_PA0 = 0x0U, /**< Wakeup by PA0 */
|
||||||
BKPC_BOR_VOL_1_7 = 0x0, /**< 1.7V */
|
PMU_STANDBY_PORT_SEL_PA1 = 0x1U, /**< Wakeup by PA1 */
|
||||||
BKPC_BOR_VOL_2_0 = 0x1, /**< 2.0V */
|
PMU_STANDBY_PORT_SEL_PA2 = 0x2U, /**< Wakeup by PA2 */
|
||||||
BKPC_BOR_VOL_2_1 = 0x2, /**< 2.1V */
|
PMU_STANDBY_PORT_SEL_PA3 = 0x3U, /**< Wakeup by PA3 */
|
||||||
BKPC_BOR_VOL_2_2 = 0x3, /**< 2.2V */
|
PMU_STANDBY_PORT_SEL_NONE = 0xFU, /**< Wakeup by other source */
|
||||||
BKPC_BOR_VOL_2_3 = 0x4, /**< 2.3V */
|
} bkpc_wakeup_port_t;
|
||||||
BKPC_BOR_VOL_2_4 = 0x5, /**< 2.4V */
|
|
||||||
BKPC_BOR_VOL_2_5 = 0x6, /**< 2.5V */
|
|
||||||
BKPC_BOR_VOL_2_6 = 0x7, /**< 2.6V */
|
|
||||||
BKPC_BOR_VOL_2_8 = 0x8, /**< 2.8V */
|
|
||||||
BKPC_BOR_VOL_3_0 = 0x9, /**< 3.0V */
|
|
||||||
BKPC_BOR_VOL_3_1 = 0xA, /**< 3.1V */
|
|
||||||
BKPC_BOR_VOL_3_3 = 0xB, /**< 3.3V */
|
|
||||||
BKPC_BOR_VOL_3_6 = 0xC, /**< 3.6V */
|
|
||||||
BKPC_BOR_VOL_3_7 = 0xD, /**< 3.7V */
|
|
||||||
BKPC_BOR_VOL_4_0 = 0xE, /**< 4.0V */
|
|
||||||
BKPC_BOR_VOL_4_3 = 0xF, /**< 4.3V */
|
|
||||||
} bkpc_bor_vol_t;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Standby wakeup level
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
PMU_STANDBY_LEVEL_HIGH = 0x0U, /**< High level */
|
||||||
|
PMU_STANDBY_LEVEL_LOW = 0x1U, /**< Low level */
|
||||||
|
} bkpc_wakeup_level_t;
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
@@ -126,22 +120,13 @@ typedef enum
|
|||||||
((x) == BKPC_LDO_OUTPUT_1_3) || \
|
((x) == BKPC_LDO_OUTPUT_1_3) || \
|
||||||
((x) == BKPC_LDO_OUTPUT_1_4) || \
|
((x) == BKPC_LDO_OUTPUT_1_4) || \
|
||||||
((x) == BKPC_LDO_OUTPUT_1_5))
|
((x) == BKPC_LDO_OUTPUT_1_5))
|
||||||
#define IS_BKPC_BOR_VOL(x) (((x) == BKPC_BOR_VOL_1_7) || \
|
#define IS_BKPC_WAKEUP_PORT(x) (((x) == PMU_STANDBY_PORT_SEL_PA0) || \
|
||||||
((x) == BKPC_BOR_VOL_2_0) || \
|
((x) == PMU_STANDBY_PORT_SEL_PA1) || \
|
||||||
((x) == BKPC_BOR_VOL_2_1) || \
|
((x) == PMU_STANDBY_PORT_SEL_PA2) || \
|
||||||
((x) == BKPC_BOR_VOL_2_2) || \
|
((x) == PMU_STANDBY_PORT_SEL_PA3) || \
|
||||||
((x) == BKPC_BOR_VOL_2_3) || \
|
((x) == PMU_STANDBY_PORT_SEL_NONE))
|
||||||
((x) == BKPC_BOR_VOL_2_4) || \
|
#define IS_BKPC_WAKEUP_LEVEL(x) (((x) == PMU_STANDBY_LEVEL_HIGH) || \
|
||||||
((x) == BKPC_BOR_VOL_2_5) || \
|
((x) == PMU_STANDBY_LEVEL_LOW))
|
||||||
((x) == BKPC_BOR_VOL_2_6) || \
|
|
||||||
((x) == BKPC_BOR_VOL_2_8) || \
|
|
||||||
((x) == BKPC_BOR_VOL_3_0) || \
|
|
||||||
((x) == BKPC_BOR_VOL_3_1) || \
|
|
||||||
((x) == BKPC_BOR_VOL_3_3) || \
|
|
||||||
((x) == BKPC_BOR_VOL_3_6) || \
|
|
||||||
((x) == BKPC_BOR_VOL_3_7) || \
|
|
||||||
((x) == BKPC_BOR_VOL_4_0) || \
|
|
||||||
((x) == BKPC_BOR_VOL_4_3))
|
|
||||||
#define IS_BKPC_RAM_IDX(x) ((x) < 32)
|
#define IS_BKPC_RAM_IDX(x) ((x) < 32)
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -154,8 +139,8 @@ typedef enum
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/* control functions */
|
/* control functions */
|
||||||
|
extern void ald_bkpc_standby_wakeup_config(bkpc_wakeup_port_t port, bkpc_wakeup_level_t level);
|
||||||
extern void ald_bkpc_ldo_config(bkpc_ldo_output_t output, type_func_t state);
|
extern void ald_bkpc_ldo_config(bkpc_ldo_output_t output, type_func_t state);
|
||||||
extern void ald_bkpc_bor_config(bkpc_bor_vol_t vol, type_func_t state);
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@
|
|||||||
#define __ALD_CRC_H__
|
#define __ALD_CRC_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@@ -39,75 +39,69 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief CRC mode
|
* @brief CRC mode
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
CRC_MODE_CCITT = 0U, /**< Ccitt */
|
||||||
CRC_MODE_CCITT = 0, /**< Ccitt */
|
CRC_MODE_8 = 1U, /**< Crc8 */
|
||||||
CRC_MODE_8 = 1, /**< Crc8 */
|
CRC_MODE_16 = 2U, /**< Crc16 */
|
||||||
CRC_MODE_16 = 2, /**< Crc16 */
|
CRC_MODE_32 = 3U, /**< Crc32 */
|
||||||
CRC_MODE_32 = 3, /**< Crc32 */
|
|
||||||
} crc_mode_t;
|
} crc_mode_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CRC input length
|
* @brief CRC input length
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
CRC_LEN_AUTO = 0U, /**< Auto */
|
||||||
CRC_LEN_AUTO = 0, /**< Auto */
|
CRC_DATASIZE_8 = 1U, /**< Byte */
|
||||||
CRC_DATASIZE_8 = 1, /**< Byte */
|
CRC_DATASIZE_16 = 2U, /**< Half word */
|
||||||
CRC_DATASIZE_16 = 2, /**< Half word */
|
CRC_DATASIZE_32 = 3U, /**< Word */
|
||||||
CRC_DATASIZE_32 = 3, /**< Word */
|
|
||||||
} crc_datasize_t;
|
} crc_datasize_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CRC whether write error or no
|
* @brief CRC whether write error or no
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
CRC_WERR_NO = 0U, /**< No error */
|
||||||
CRC_WERR_NO = 0, /**< No error */
|
CRC_WERR_ERR = 1U, /**< Error */
|
||||||
CRC_WERR_ERR = 1, /**< Error */
|
|
||||||
} crc_werr_t;
|
} crc_werr_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CRC state structures definition
|
* @brief CRC state structures definition
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
CRC_STATE_RESET = 0x0U, /**< Peripheral is not initialized */
|
||||||
CRC_STATE_RESET = 0x0, /**< Peripheral is not initialized */
|
CRC_STATE_READY = 0x1U, /**< Peripheral Initialized and ready for use */
|
||||||
CRC_STATE_READY = 0x1, /**< Peripheral Initialized and ready for use */
|
CRC_STATE_BUSY = 0x2U, /**< An internal process is ongoing */
|
||||||
CRC_STATE_BUSY = 0x2, /**< An internal process is ongoing */
|
CRC_STATE_ERROR = 0x4U, /**< Error */
|
||||||
CRC_STATE_ERROR = 0x4, /**< Error */
|
|
||||||
} crc_state_t;
|
} crc_state_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CRC init structure definition
|
* @brief CRC init structure definition
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
crc_mode_t mode; /**< CRC mode */
|
||||||
crc_mode_t mode; /**< CRC mode */
|
type_func_t data_rev; /**< CRC data reverse or no */
|
||||||
type_func_t data_rev; /**< CRC data reverse or no */
|
type_func_t data_inv; /**< CRC data inverse or no */
|
||||||
type_func_t data_inv; /**< CRC data inverse or no */
|
type_func_t chs_rev; /**< CRC check sum reverse or no */
|
||||||
type_func_t chs_rev; /**< CRC check sum reverse or no */
|
type_func_t chs_inv; /**< CRC check sum inverse or no */
|
||||||
type_func_t chs_inv; /**< CRC check sum inverse or no */
|
uint32_t seed; /**< CRC seed */
|
||||||
uint32_t seed; /**< CRC seed */
|
|
||||||
} crc_init_t;
|
} crc_init_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CRC Handle Structure definition
|
* @brief CRC Handle Structure definition
|
||||||
*/
|
*/
|
||||||
typedef struct crc_handle_s
|
typedef struct crc_handle_s {
|
||||||
{
|
CRC_TypeDef *perh; /**< Register base address */
|
||||||
CRC_TypeDef *perh; /**< Register base address */
|
crc_init_t init; /**< CRC required parameters */
|
||||||
crc_init_t init; /**< CRC required parameters */
|
uint8_t *cal_buf; /**< The pointer of preparing buffer */
|
||||||
uint8_t *cal_buf; /**< The pointer of preparing buffer */
|
uint32_t *cal_res; /**< The pointer of result */
|
||||||
uint32_t *cal_res; /**< The pointer of result */
|
|
||||||
#ifdef ALD_DMA
|
#ifdef ALD_DMA
|
||||||
dma_handle_t hdma; /**< CRC DMA handle parameters */
|
dma_handle_t hdma; /**< CRC DMA handle parameters */
|
||||||
#endif
|
#endif
|
||||||
lock_state_t lock; /**< Locking object */
|
lock_state_t lock; /**< Locking object */
|
||||||
crc_state_t state; /**< CRC operation state */
|
crc_state_t state; /**< CRC operation state */
|
||||||
|
|
||||||
void (*cal_cplt_cbk)(struct crc_handle_s *arg); /**< Calculate completed callback */
|
void (*cal_cplt_cbk)(struct crc_handle_s *arg); /**< Calculate completed callback */
|
||||||
void (*err_cplt_cbk)(struct crc_handle_s *arg); /**< Calculate error callback */
|
void (*err_cplt_cbk)(struct crc_handle_s *arg); /**< Calculate error callback */
|
||||||
} crc_handle_t;
|
} crc_handle_t;
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -131,9 +125,9 @@ typedef struct crc_handle_s
|
|||||||
*/
|
*/
|
||||||
#define IS_CRC(x) ((x) == CRC)
|
#define IS_CRC(x) ((x) == CRC)
|
||||||
#define IS_CRC_MODE(x) (((x) == CRC_MODE_CCITT) || \
|
#define IS_CRC_MODE(x) (((x) == CRC_MODE_CCITT) || \
|
||||||
((x) == CRC_MODE_8) || \
|
((x) == CRC_MODE_8) || \
|
||||||
((x) == CRC_MODE_16) || \
|
((x) == CRC_MODE_16) || \
|
||||||
((x) == CRC_MODE_32))
|
((x) == CRC_MODE_32))
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@
|
|||||||
#define __ALD_DBGC_H__
|
#define __ALD_DBGC_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@@ -41,34 +41,32 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief Debug mode select
|
* @brief Debug mode select
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
DEBC_MODE_SLEEP = (1U << 0), /**< Sleep mode */
|
||||||
DEBC_MODE_SLEEP = (1u << 0), /**< Sleep mode */
|
DEBC_MODE_STOP1 = (1U << 1), /**< STOP1 mode */
|
||||||
DEBC_MODE_STOP1 = (1u << 1), /**< STOP1 mode */
|
DEBC_MODE_STOP2 = (1U << 2), /**< STOP2 mode */
|
||||||
DEBC_MODE_STOP2 = (1u << 2), /**< STOP2 mode */
|
DEBC_MODE_STANDBY = (1U << 3), /**< Standby mode */
|
||||||
DEBC_MODE_STANDBY = (1u << 3), /**< Standby mode */
|
|
||||||
} dbgc_mode_t;
|
} dbgc_mode_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug peripheral select
|
* @brief Debug peripheral select
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
DEBC_PERH_TIMER0 = (1U << 0), /**< AD16C4T0 */
|
||||||
DEBC_PERH_TIMER0 = (1u << 0), /**< AD16C4T0 */
|
DEBC_PERH_TIMER1 = (1U << 1), /**< BS16T0 */
|
||||||
DEBC_PERH_TIMER1 = (1u << 1), /**< BS16T0 */
|
DEBC_PERH_TIMER2 = (1U << 2), /**< GP16C2T0 */
|
||||||
DEBC_PERH_TIMER2 = (1u << 2), /**< GP16C2T0 */
|
DEBC_PERH_TIMER3 = (1U << 3), /**< GP16C2T1 */
|
||||||
DEBC_PERH_TIMER3 = (1u << 3), /**< GP16C2T1 */
|
DEBC_PERH_TIMER4 = (1U << 4), /**< BS16T1 */
|
||||||
DEBC_PERH_TIMER4 = (1u << 4), /**< BS16T1 */
|
DEBC_PERH_TIMER5 = (1U << 5), /**< BS16T2 */
|
||||||
DEBC_PERH_TIMER5 = (1u << 5), /**< BS16T2 */
|
DEBC_PERH_TIMER6 = (1U << 6), /**< GP16C4T0 */
|
||||||
DEBC_PERH_TIMER6 = (1u << 6), /**< GP16C4T0 */
|
DEBC_PERH_TIMER7 = (1U << 7), /**< BS16T3 */
|
||||||
DEBC_PERH_TIMER7 = (1u << 7), /**< BS16T3 */
|
DEBC_PERH_I2C0 = (1U << 8), /**< I2C0 SMBUS */
|
||||||
DEBC_PERH_I2C0 = (1u << 8), /**< I2C0 SMBUS */
|
DEBC_PERH_I2C1 = (1U << 9), /**< I2C1 SMBUS */
|
||||||
DEBC_PERH_I2C1 = (1u << 9), /**< I2C1 SMBUS */
|
DEBC_PERH_CAN = (1U << 12), /**< CAN */
|
||||||
DEBC_PERH_CAN = (1u << 12), /**< CAN */
|
DEBC_PERH_LPTIM0 = (1U << 0) | (1U << 16), /**< LPTIM0 */
|
||||||
DEBC_PERH_LPTIM0 = (1u << 0) | (1u << 16), /**< LPTIM0 */
|
DEBC_PERH_IWDT = (1U << 8) | (1U << 16), /**< IWDT */
|
||||||
DEBC_PERH_IWDT = (1u << 8) | (1u << 16), /**< IWDT */
|
DEBC_PERH_WWDT = (1U << 9) | (1U << 16), /**< WWDT */
|
||||||
DEBC_PERH_WWDT = (1u << 9) | (1u << 16), /**< WWDT */
|
DEBC_PERH_RTC = (1U << 10) | (1U << 16), /**< RTC */
|
||||||
DEBC_PERH_RTC = (1u << 10) | (1u << 16), /**< RTC */
|
|
||||||
} dbgc_perh_t;
|
} dbgc_perh_t;
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -83,7 +81,7 @@ typedef enum
|
|||||||
*/
|
*/
|
||||||
__INLINE uint32_t ald_dbgc_get_rev_id(void)
|
__INLINE uint32_t ald_dbgc_get_rev_id(void)
|
||||||
{
|
{
|
||||||
return (DBGC->IDCODE >> 16);
|
return (DBGC->IDCODE >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,7 +90,7 @@ __INLINE uint32_t ald_dbgc_get_rev_id(void)
|
|||||||
*/
|
*/
|
||||||
__INLINE uint32_t ald_dbgc_get_core_id(void)
|
__INLINE uint32_t ald_dbgc_get_core_id(void)
|
||||||
{
|
{
|
||||||
return (DBGC->IDCODE >> 12) & 0xF;
|
return (DBGC->IDCODE >> 12) & 0xF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -101,7 +99,7 @@ __INLINE uint32_t ald_dbgc_get_core_id(void)
|
|||||||
*/
|
*/
|
||||||
__INLINE uint32_t ald_dbgc_get_device_id(void)
|
__INLINE uint32_t ald_dbgc_get_device_id(void)
|
||||||
{
|
{
|
||||||
return DBGC->IDCODE & 0xFFF;
|
return DBGC->IDCODE & 0xFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,10 +110,10 @@ __INLINE uint32_t ald_dbgc_get_device_id(void)
|
|||||||
*/
|
*/
|
||||||
__INLINE void ald_dbgc_mode_config(dbgc_mode_t mode, type_func_t state)
|
__INLINE void ald_dbgc_mode_config(dbgc_mode_t mode, type_func_t state)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
SET_BIT(DBGC->CR, mode);
|
SET_BIT(DBGC->CR, mode);
|
||||||
else
|
else
|
||||||
CLEAR_BIT(DBGC->CR, mode);
|
CLEAR_BIT(DBGC->CR, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -126,20 +124,18 @@ __INLINE void ald_dbgc_mode_config(dbgc_mode_t mode, type_func_t state)
|
|||||||
*/
|
*/
|
||||||
__INLINE void ald_dbgc_perh_config(dbgc_perh_t perh, type_func_t state)
|
__INLINE void ald_dbgc_perh_config(dbgc_perh_t perh, type_func_t state)
|
||||||
{
|
{
|
||||||
if ((perh >> 16) & 0x1)
|
if ((perh >> 16) & 0x1) {
|
||||||
{
|
if (state)
|
||||||
if (state)
|
SET_BIT(DBGC->APB2FZ, perh);
|
||||||
SET_BIT(DBGC->APB2FZ, perh);
|
else
|
||||||
else
|
CLEAR_BIT(DBGC->APB2FZ, perh);
|
||||||
CLEAR_BIT(DBGC->APB2FZ, perh);
|
}
|
||||||
}
|
else {
|
||||||
else
|
if (state)
|
||||||
{
|
SET_BIT(DBGC->APB1FZ, perh);
|
||||||
if (state)
|
else
|
||||||
SET_BIT(DBGC->APB1FZ, perh);
|
CLEAR_BIT(DBGC->APB1FZ, perh);
|
||||||
else
|
}
|
||||||
CLEAR_BIT(DBGC->APB1FZ, perh);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -36,21 +36,21 @@ extern "C" {
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define FLASH_REG_UNLOCK() \
|
#define FLASH_REG_UNLOCK() \
|
||||||
do { \
|
do { \
|
||||||
if (op_cmd == OP_FLASH) { \
|
if (op_cmd == OP_FLASH) { \
|
||||||
WRITE_REG(MSC->FLASHKEY, 0x8ACE0246); \
|
WRITE_REG(MSC->FLASHKEY, 0x8ACE0246U); \
|
||||||
WRITE_REG(MSC->FLASHKEY, 0x9BDF1357); \
|
WRITE_REG(MSC->FLASHKEY, 0x9BDF1357U); \
|
||||||
} \
|
} \
|
||||||
else { \
|
else { \
|
||||||
WRITE_REG(MSC->INFOKEY, 0x7153BFD9); \
|
WRITE_REG(MSC->INFOKEY, 0x7153BFD9U); \
|
||||||
WRITE_REG(MSC->INFOKEY, 0x0642CEA8); \
|
WRITE_REG(MSC->INFOKEY, 0x0642CEA8U); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define FLASH_REQ() (SET_BIT(MSC->FLASHCR, MSC_FLASHCR_FLASHREQ_MSK))
|
#define FLASH_REQ() (SET_BIT(MSC->FLASHCR, MSC_FLASHCR_FLASHREQ_MSK))
|
||||||
#define FLASH_REQ_FIN() (CLEAR_BIT(MSC->FLASHCR, MSC_FLASHCR_FLASHREQ_MSK))
|
#define FLASH_REQ_FIN() (CLEAR_BIT(MSC->FLASHCR, MSC_FLASHCR_FLASHREQ_MSK))
|
||||||
#define FLASH_IAP_ENABLE() (SET_BIT(MSC->FLASHCR, MSC_FLASHCR_IAPEN_MSK))
|
#define FLASH_IAP_ENABLE() (SET_BIT(MSC->FLASHCR, MSC_FLASHCR_IAPEN_MSK))
|
||||||
#define FLASH_IAP_DISABLE() (CLEAR_BIT(MSC->FLASHCR, MSC_FLASHCR_IAPEN_MSK))
|
#define FLASH_IAP_DISABLE() (CLEAR_BIT(MSC->FLASHCR, MSC_FLASHCR_IAPEN_MSK))
|
||||||
#define FLASH_BASE_ADDR 0x00000000
|
#define FLASH_BASE_ADDR 0x00000000U
|
||||||
#define FLASH_PAGE_SIZE 1024UL
|
#define FLASH_PAGE_SIZE 1024UL
|
||||||
#define FLASH_WORD_SIZE 8UL
|
#define FLASH_WORD_SIZE 8UL
|
||||||
#define FLASH_TOTAL_SIZE 256UL
|
#define FLASH_TOTAL_SIZE 256UL
|
||||||
@@ -67,9 +67,9 @@ extern "C" {
|
|||||||
#define INFO_PAGE_ADDR(ADDR) ((ADDR) & (~INFO_PAGE_MASK))
|
#define INFO_PAGE_ADDR(ADDR) ((ADDR) & (~INFO_PAGE_MASK))
|
||||||
|
|
||||||
#ifdef USE_FLASH_FIFO
|
#ifdef USE_FLASH_FIFO
|
||||||
#define FLASH_FIFO 1
|
#define FLASH_FIFO 1
|
||||||
#else
|
#else
|
||||||
#define FLASH_FIFO 0
|
#define FLASH_FIFO 0
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -78,24 +78,22 @@ extern "C" {
|
|||||||
/** @defgroup FLASH_Private_Types FLASH Private Types
|
/** @defgroup FLASH_Private_Types FLASH Private Types
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
FLASH_CMD_AE = 0x000051AEU, /**< Program area erase all */
|
||||||
FLASH_CMD_AE = 0x000051AE, /**< Program area erase all */
|
FLASH_CMD_PE = 0x00005EA1U, /**< Page erase */
|
||||||
FLASH_CMD_PE = 0x00005EA1, /**< Page erase */
|
FLASH_CMD_WP = 0x00005DA2U, /**< Word program */
|
||||||
FLASH_CMD_WP = 0x00005DA2, /**< Word program */
|
FLASH_CMD_DATAPE = 0x00005BA4U, /**< Data flash page page erase */
|
||||||
FLASH_CMD_DATAPE = 0x00005BA4, /**< Data flash page page erase */
|
FLASH_CMD_DATAWP = 0x00005AA5U, /**< Data flash word program */
|
||||||
FLASH_CMD_DATAWP = 0x00005AA5, /**< Data flash word program */
|
|
||||||
} flash_cmd_type;
|
} flash_cmd_type;
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
OP_FLASH = 0U, /**< Operate Pragram area */
|
||||||
OP_FLASH = 0, /**< Operate Pragram area */
|
OP_INFO = 1U, /**< Operate info area */
|
||||||
OP_INFO = 1, /**< Operate info area */
|
|
||||||
} op_cmd_type;
|
} op_cmd_type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
/** @addtogroup Flash_Private_Functions
|
/** @addtogroup Flash_Private_Functions
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -36,10 +36,10 @@ extern "C" {
|
|||||||
* @defgroup IAP_Private_Macros IAP Private Macros
|
* @defgroup IAP_Private_Macros IAP Private Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define IAP_WSP_ADDR 0x10000000
|
#define IAP_WSP_ADDR 0x10000000U
|
||||||
#define IAP_PE_ADDR 0x10000004
|
#define IAP_PE_ADDR 0x10000004U
|
||||||
#define IAP_WP_ADDR 0x10000008
|
#define IAP_WP_ADDR 0x10000008U
|
||||||
#define IAP_DWP_ADDR 0x1000000c
|
#define IAP_DWP_ADDR 0x1000000cU
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+128
-132
File diff suppressed because it is too large
Load Diff
+125
-140
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
+79
-84
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+31
-33
@@ -18,7 +18,7 @@
|
|||||||
#define __ALD_SYSCFG_H__
|
#define __ALD_SYSCFG_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@@ -36,33 +36,33 @@ extern "C" {
|
|||||||
/** @defgroup SYSCFG_Public_Macros SYSCFG Public Macros
|
/** @defgroup SYSCFG_Public_Macros SYSCFG Public Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define SYSCFG_LOCK() WRITE_REG(SYSCFG->PROT, 0x0)
|
#define SYSCFG_LOCK() WRITE_REG(SYSCFG->PROT, 0x0U)
|
||||||
#define SYSCFG_UNLOCK() WRITE_REG(SYSCFG->PROT, 0x55AA6996)
|
#define SYSCFG_UNLOCK() WRITE_REG(SYSCFG->PROT, 0x55AA6996U)
|
||||||
#define GET_SYSCFG_LOCK() READ_BIT(SYSCFG->PROT, SYSCFG_PROT_PROT_MSK)
|
#define GET_SYSCFG_LOCK() READ_BIT(SYSCFG->PROT, SYSCFG_PROT_PROT_MSK)
|
||||||
|
|
||||||
#define BOOT_FROM_BOOT_ROM() \
|
#define BOOT_FROM_BOOT_ROM() \
|
||||||
do { \
|
do { \
|
||||||
SYSCFG_UNLOCK(); \
|
SYSCFG_UNLOCK(); \
|
||||||
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
||||||
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
||||||
SYSCFG_LOCK(); \
|
SYSCFG_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define BOOT_FROM_BOOT_FLASH() \
|
#define BOOT_FROM_BOOT_FLASH() \
|
||||||
do { \
|
do { \
|
||||||
SYSCFG_UNLOCK(); \
|
SYSCFG_UNLOCK(); \
|
||||||
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
||||||
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
||||||
SYSCFG_LOCK(); \
|
SYSCFG_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define BOOT_FROM_FLASH() \
|
#define BOOT_FROM_FLASH() \
|
||||||
do { \
|
do { \
|
||||||
SYSCFG_UNLOCK(); \
|
SYSCFG_UNLOCK(); \
|
||||||
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BRRMPEN_MSK); \
|
||||||
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BFRMPEN_MSK); \
|
||||||
SYSCFG_LOCK(); \
|
SYSCFG_LOCK(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
@@ -73,20 +73,18 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
__STATIC_INLINE__ void ald_vtor_config(uint32_t offset, type_func_t status)
|
__STATIC_INLINE__ void ald_vtor_config(uint32_t offset, type_func_t status)
|
||||||
{
|
{
|
||||||
SYSCFG_UNLOCK();
|
SYSCFG_UNLOCK();
|
||||||
|
|
||||||
if (status)
|
if (status) {
|
||||||
{
|
MODIFY_REG(SYSCFG->VTOR, SYSCFG_VTOR_VTO_MSK, (offset & ~0x3FU));
|
||||||
MODIFY_REG(SYSCFG->VTOR, SYSCFG_VTOR_VTO_MSK, (offset & ~0x3F));
|
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_VTOEN_MSK);
|
||||||
SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_VTOEN_MSK);
|
}
|
||||||
}
|
else {
|
||||||
else
|
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_VTOEN_MSK);
|
||||||
{
|
}
|
||||||
CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_VTOEN_MSK);
|
|
||||||
}
|
|
||||||
|
|
||||||
SYSCFG_LOCK();
|
SYSCFG_LOCK();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
+474
-513
File diff suppressed because it is too large
Load Diff
@@ -38,93 +38,85 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief Data width
|
* @brief Data width
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_DSEL_1B = 0x0U, /**< 1-bit */
|
||||||
TRNG_DSEL_1B = 0x0, /**< 1-bit */
|
TRNG_DSEL_8B = 0x1U, /**< 8-bit */
|
||||||
TRNG_DSEL_8B = 0x1, /**< 8-bit */
|
TRNG_DSEL_16B = 0x2U, /**< 16-bit */
|
||||||
TRNG_DSEL_16B = 0x2, /**< 16-bit */
|
TRNG_DSEL_32B = 0x3U, /**< 32-bit */
|
||||||
TRNG_DSEL_32B = 0x3, /**< 32-bit */
|
|
||||||
} trng_data_width_t;
|
} trng_data_width_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief seed type
|
* @brief seed type
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_SEED_TYPE_0 = 0x0U, /**< Using 0 as seed */
|
||||||
TRNG_SEED_TYPE_0 = 0x0, /**< Using 0 as seed */
|
TRNG_SEED_TYPE_1 = 0x1U, /**< Using 1 as seed */
|
||||||
TRNG_SEED_TYPE_1 = 0x1, /**< Using 1 as seed */
|
TRNG_SEED_TYPE_LAST = 0x2U, /**< Using last seed */
|
||||||
TRNG_SEED_TYPE_LAST = 0x2, /**< Using last seed */
|
TRNG_SEED_TYPE_SEED = 0x3U, /**< Using value of register */
|
||||||
TRNG_SEED_TYPE_SEED = 0x3, /**< Using value of register */
|
|
||||||
} trng_seed_type_t;
|
} trng_seed_type_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TRNG init structure definition
|
* @brief TRNG init structure definition
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
trng_data_width_t data_width; /**< The width of data */
|
||||||
trng_data_width_t data_width; /**< The width of data */
|
trng_seed_type_t seed_type; /**< The seed type */
|
||||||
trng_seed_type_t seed_type; /**< The seed type */
|
uint32_t seed; /**< The value of seed */
|
||||||
uint32_t seed; /**< The value of seed */
|
uint16_t t_start; /**< T(start) = T(trng) * 2 ^ (t_start + 1), T(start) > 1ms */
|
||||||
uint16_t t_start; /**< T(start) = T(hclk) * (t_start + 1), T(start) > 1ms */
|
uint8_t adjc; /**< Adjust parameter */
|
||||||
uint8_t adjc; /**< Adjust parameter */
|
type_func_t posten; /**< Data back handle function */
|
||||||
type_func_t posten; /**< Data back handle function */
|
|
||||||
} trng_init_t;
|
} trng_init_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TRNG state structures definition
|
* @brief TRNG state structures definition
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_STATE_RESET = 0x0U, /**< Peripheral is not initialized */
|
||||||
TRNG_STATE_RESET = 0x0, /**< Peripheral is not initialized */
|
TRNG_STATE_READY = 0x1U, /**< Peripheral Initialized and ready for use */
|
||||||
TRNG_STATE_READY = 0x1, /**< Peripheral Initialized and ready for use */
|
TRNG_STATE_BUSY = 0x2U, /**< An internal process is ongoing */
|
||||||
TRNG_STATE_BUSY = 0x2, /**< An internal process is ongoing */
|
TRNG_STATE_ERROR = 0x4U, /**< Error */
|
||||||
TRNG_STATE_ERROR = 0x4, /**< Error */
|
|
||||||
} trng_state_t;
|
} trng_state_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief State type
|
* @brief State type
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_STATUS_START = (1U << 0), /**< Start state */
|
||||||
TRNG_STATUS_START = (1U << 0), /**< Start state */
|
TRNG_STATUS_DAVLD = (1U << 1), /**< Data valid state */
|
||||||
TRNG_STATUS_DAVLD = (1U << 1), /**< Data valid state */
|
TRNG_STATUS_SERR = (1U << 2), /**< Error state */
|
||||||
TRNG_STATUS_SERR = (1U << 2), /**< Error state */
|
|
||||||
} trng_status_t;
|
} trng_status_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Interrupt type
|
* @brief Interrupt type
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_IT_START = (1U << 0), /**< Start */
|
||||||
TRNG_IT_START = (1U << 0), /**< Start */
|
TRNG_IT_DAVLD = (1U << 1), /**< Data valid */
|
||||||
TRNG_IT_DAVLD = (1U << 1), /**< Data valid */
|
TRNG_IT_SERR = (1U << 2), /**< Error */
|
||||||
TRNG_IT_SERR = (1U << 2), /**< Error */
|
|
||||||
} trng_it_t;
|
} trng_it_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Interrupt flag type
|
* @brief Interrupt flag type
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
TRNG_IF_START = (1U << 0), /**< Start */
|
||||||
TRNG_IF_START = (1U << 0), /**< Start */
|
TRNG_IF_DAVLD = (1U << 1), /**< Data valid */
|
||||||
TRNG_IF_DAVLD = (1U << 1), /**< Data valid */
|
TRNG_IF_SERR = (1U << 2), /**< Error */
|
||||||
TRNG_IF_SERR = (1U << 2), /**< Error */
|
|
||||||
} trng_flag_t;
|
} trng_flag_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TRNG Handle Structure definition
|
* @brief TRNG Handle Structure definition
|
||||||
*/
|
*/
|
||||||
typedef struct trng_handle_s
|
typedef struct trng_handle_s {
|
||||||
{
|
TRNG_TypeDef *perh; /**< Register base address */
|
||||||
TRNG_TypeDef *perh; /**< Register base address */
|
trng_init_t init; /**< TRNG required parameters */
|
||||||
trng_init_t init; /**< TRNG required parameters */
|
uint32_t data; /**< result data */
|
||||||
uint32_t data; /**< result data */
|
lock_state_t lock; /**< Locking object */
|
||||||
lock_state_t lock; /**< Locking object */
|
trng_state_t state; /**< TRNG operation state */
|
||||||
trng_state_t state; /**< TRNG operation state */
|
|
||||||
|
|
||||||
void (*trng_cplt_cbk)(struct trng_handle_s *arg); /**< Trng completed callback */
|
void (*trng_cplt_cbk)(struct trng_handle_s *arg); /**< Trng completed callback */
|
||||||
void (*err_cplt_cbk)(struct trng_handle_s *arg); /**< Trng error callback */
|
void (*err_cplt_cbk)(struct trng_handle_s *arg); /**< Trng error callback */
|
||||||
void (*init_cplt_cbk)(struct trng_handle_s *arg); /**< Trng init completed callback */
|
void (*init_cplt_cbk)(struct trng_handle_s *arg); /**< Trng init completed callback */
|
||||||
} trng_handle_t;
|
} trng_handle_t;
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -154,15 +146,16 @@ typedef struct trng_handle_s
|
|||||||
((x) == TRNG_SEED_TYPE_LAST) || \
|
((x) == TRNG_SEED_TYPE_LAST) || \
|
||||||
((x) == TRNG_SEED_TYPE_SEED))
|
((x) == TRNG_SEED_TYPE_SEED))
|
||||||
#define IS_TRNG_STATUS(x) (((x) == TRNG_STATUS_START) || \
|
#define IS_TRNG_STATUS(x) (((x) == TRNG_STATUS_START) || \
|
||||||
((x) == TRNG_STATUS_DAVLD) || \
|
((x) == TRNG_STATUS_DAVLD) || \
|
||||||
((x) == TRNG_STATUS_SERR))
|
((x) == TRNG_STATUS_SERR))
|
||||||
#define IS_TRNG_IT(x) (((x) == TRNG_IT_START) || \
|
#define IS_TRNG_IT(x) (((x) == TRNG_IT_START) || \
|
||||||
((x) == TRNG_IT_DAVLD) || \
|
((x) == TRNG_IT_DAVLD) || \
|
||||||
((x) == TRNG_IT_SERR))
|
((x) == TRNG_IT_SERR))
|
||||||
#define IS_TRNG_FLAG(x) (((x) == TRNG_IF_START) || \
|
#define IS_TRNG_FLAG(x) (((x) == TRNG_IF_START) || \
|
||||||
((x) == TRNG_IF_DAVLD) || \
|
((x) == TRNG_IF_DAVLD) || \
|
||||||
((x) == TRNG_IF_SERR))
|
((x) == TRNG_IF_SERR))
|
||||||
#define IS_TRNG_ADJC(x) ((x) < 4)
|
#define IS_TRNG_ADJC(x) ((x) < 4)
|
||||||
|
#define IS_TRNG_T_START(x) ((x) < 8)
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
+75
-103
File diff suppressed because it is too large
Load Diff
+179
-196
File diff suppressed because it is too large
Load Diff
+133
-153
File diff suppressed because it is too large
Load Diff
@@ -38,12 +38,11 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief Wwdt no dog window
|
* @brief Wwdt no dog window
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
WWDT_WIN_25 = 0x0U, /**< No dog window size: 25% */
|
||||||
WWDT_WIN_25 = 0x0, /**< No dog window size: 25% */
|
WWDT_WIN_50 = 0x1U, /**< No dog window size: 50% */
|
||||||
WWDT_WIN_50 = 0x1, /**< No dog window size: 50% */
|
WWDT_WIN_75 = 0x2U, /**< No dog window size: 75% */
|
||||||
WWDT_WIN_75 = 0x2, /**< No dog window size: 75% */
|
WWDT_WIN_00 = 0x3U, /**< No dog window size: 0% */
|
||||||
WWDT_WIN_00 = 0x3, /**< No dog window size: 0% */
|
|
||||||
} wwdt_win_t;
|
} wwdt_win_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,10 +53,10 @@ typedef enum
|
|||||||
* @defgroup WDT_Private_Macros WDT Private Macros
|
* @defgroup WDT_Private_Macros WDT Private Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define WWDT_UNLOCK() {WRITE_REG(WWDT->LOCK, 0x1ACCE551);}
|
#define WWDT_UNLOCK() {WRITE_REG(WWDT->LOCK, 0x1ACCE551U);}
|
||||||
#define WWDT_LOCK() {WRITE_REG(WWDT->LOCK, 0xFFFFFFFF);}
|
#define WWDT_LOCK() {WRITE_REG(WWDT->LOCK, 0xFFFFFFFFU);}
|
||||||
#define IWDT_UNLOCK() {WRITE_REG(IWDT->LOCK, 0x1ACCE551);}
|
#define IWDT_UNLOCK() {WRITE_REG(IWDT->LOCK, 0x1ACCE551U);}
|
||||||
#define IWDT_LOCK() {WRITE_REG(IWDT->LOCK, 0xFFFFFFFF);}
|
#define IWDT_LOCK() {WRITE_REG(IWDT->LOCK, 0xFFFFFFFFU);}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -72,7 +71,7 @@ typedef enum
|
|||||||
(x == WWDT_WIN_75) || \
|
(x == WWDT_WIN_75) || \
|
||||||
(x == WWDT_WIN_00))
|
(x == WWDT_WIN_00))
|
||||||
#define IS_FUNC_STATE(x) (((x) == DISABLE) || \
|
#define IS_FUNC_STATE(x) (((x) == DISABLE) || \
|
||||||
((x) == ENABLE))
|
((x) == ENABLE))
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -34,41 +34,36 @@ extern "C" {
|
|||||||
|
|
||||||
#define __isr__
|
#define __isr__
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
RESET = 0x0U,
|
||||||
RESET = 0x0,
|
SET = 0x1U,
|
||||||
SET = 0x1,
|
|
||||||
} flag_status_t, it_status_t;
|
} flag_status_t, it_status_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
BIT_RESET = 0x0U,
|
||||||
BIT_RESET = 0x0,
|
BIT_SET = 0x1U,
|
||||||
BIT_SET = 0x1,
|
|
||||||
} bit_status_t;
|
} bit_status_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
DISABLE = 0x0U,
|
||||||
DISABLE = 0x0,
|
ENABLE = 0x1U,
|
||||||
ENABLE = 0x1,
|
|
||||||
} type_func_t;
|
} type_func_t;
|
||||||
#define IS_FUNC_STATE(x) (((x) == DISABLE) || ((x) == ENABLE))
|
#define IS_FUNC_STATE(x) (((x) == DISABLE) || ((x) == ENABLE))
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
FALSE = 0x0U,
|
||||||
FALSE = 0x0,
|
TRUE = 0x1U,
|
||||||
TRUE = 0x1,
|
|
||||||
} type_bool_t;
|
} type_bool_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
UNLOCK = 0x0U,
|
||||||
UNLOCK = 0x0,
|
LOCK = 0x1U,
|
||||||
LOCK = 0x1,
|
|
||||||
} lock_state_t;
|
} lock_state_t;
|
||||||
#define IS_LOCK_STATE(x) (((x) == UNLOCK) || ((x) == LOCK))
|
#define IS_LOCK_STATE(x) (((x) == UNLOCK) || ((x) == LOCK))
|
||||||
|
|
||||||
|
|
||||||
#define BIT(x) ((1U << (x)))
|
#define BIT(x) ((1U << (x)))
|
||||||
#define BITS(s, e) ((0xffffffff << (s)) & (0xffffffff >> (31 - (e))))
|
#define BITS(s, e) ((0xffffffffU << (s)) & (0xffffffffU >> (31 - (e))))
|
||||||
#define SET_BIT(reg, bit) ((reg) |= (bit))
|
#define SET_BIT(reg, bit) ((reg) |= (bit))
|
||||||
#define CLEAR_BIT(reg, bit) ((reg) &= ~(bit))
|
#define CLEAR_BIT(reg, bit) ((reg) &= ~(bit))
|
||||||
#define READ_BIT(reg, bit) ((reg) & (bit))
|
#define READ_BIT(reg, bit) ((reg) & (bit))
|
||||||
@@ -77,18 +72,18 @@ typedef enum
|
|||||||
#define WRITE_REG(reg, val) ((reg) = (val))
|
#define WRITE_REG(reg, val) ((reg) = (val))
|
||||||
#define READ_REG(reg) ((reg))
|
#define READ_REG(reg) ((reg))
|
||||||
#define MODIFY_REG(reg, clearmask, setmask) \
|
#define MODIFY_REG(reg, clearmask, setmask) \
|
||||||
WRITE_REG((reg), (((READ_REG(reg)) & (~(clearmask))) | (setmask)))
|
WRITE_REG((reg), (((READ_REG(reg)) & (~(clearmask))) | (setmask)))
|
||||||
#define UNUSED(x) ((void)(x))
|
#define UNUSED(x) ((void)(x))
|
||||||
|
|
||||||
#ifdef USE_ASSERT
|
#ifdef USE_ASSERT
|
||||||
#define assert_param(x) \
|
#define assert_param(x) \
|
||||||
do { \
|
do { \
|
||||||
if (!(x)) { \
|
if (!(x)) { \
|
||||||
__disable_irq(); \
|
__disable_irq(); \
|
||||||
while (1) \
|
while (1) \
|
||||||
; \
|
; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
#define assert_param(x)
|
#define assert_param(x)
|
||||||
#endif
|
#endif
|
||||||
@@ -101,23 +96,23 @@ typedef enum
|
|||||||
|
|
||||||
__STATIC_INLINE__ void BITBAND_PER(volatile uint32_t *addr, uint32_t bit, uint32_t val)
|
__STATIC_INLINE__ void BITBAND_PER(volatile uint32_t *addr, uint32_t bit, uint32_t val)
|
||||||
{
|
{
|
||||||
uint32_t tmp = BITBAND_PER_BASE + (((uint32_t)addr - PER_MEM_BASE) << 5) + (bit << 2);
|
uint32_t tmp = BITBAND_PER_BASE + (((uint32_t)addr - PER_MEM_BASE) << 5) + (bit << 2);
|
||||||
*((volatile uint32_t *)tmp) = (uint32_t)val;
|
*((volatile uint32_t *)tmp) = (uint32_t)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
__STATIC_INLINE__ void BITBAND_SRAM(uint32_t *addr, uint32_t bit, uint32_t val)
|
__STATIC_INLINE__ void BITBAND_SRAM(uint32_t *addr, uint32_t bit, uint32_t val)
|
||||||
{
|
{
|
||||||
uint32_t tmp = BITBAND_RAM_BASE + (((uint32_t)addr - RAM_MEM_BASE) << 5) + (bit << 2);
|
uint32_t tmp = BITBAND_RAM_BASE + (((uint32_t)addr - RAM_MEM_BASE) << 5) + (bit << 2);
|
||||||
*((volatile uint32_t *)tmp) = (uint32_t)val;
|
*((volatile uint32_t *)tmp) = (uint32_t)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined ( __GNUC__ )
|
#if defined ( __GNUC__ )
|
||||||
#ifndef __weak
|
#ifndef __weak
|
||||||
#define __weak __attribute__((weak))
|
#define __weak __attribute__((weak))
|
||||||
#endif /* __weak */
|
#endif /* __weak */
|
||||||
#ifndef __packed
|
#ifndef __packed
|
||||||
#define __packed __attribute__((__packed__))
|
#define __packed __attribute__((__packed__))
|
||||||
#endif /* __packed */
|
#endif /* __packed */
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
#define __UTILS_H__
|
#define __UTILS_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -46,23 +46,21 @@ extern uint32_t __systick_interval;
|
|||||||
/**
|
/**
|
||||||
* @brief ALD Status structures definition
|
* @brief ALD Status structures definition
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
OK = 0x0U, /**< Status: OK */
|
||||||
OK = 0x0,
|
ERROR = 0x1U, /**< Status: ERROR */
|
||||||
ERROR = 0x1,
|
BUSY = 0x2U, /**< Status: BUSY */
|
||||||
BUSY = 0x2,
|
TIMEOUT = 0x3U, /**< Status: TIMEOUT */
|
||||||
TIMEOUT = 0x3
|
|
||||||
} ald_status_t;
|
} ald_status_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief SysTick interval definition
|
* @brief SysTick interval definition
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum {
|
||||||
{
|
SYSTICK_INTERVAL_1MS = 1000U, /**< Interval is 1ms */
|
||||||
SYSTICK_INTERVAL_1MS = 1000, /**< Interval is 1ms */
|
SYSTICK_INTERVAL_10MS = 100U, /**< Interval is 10ms */
|
||||||
SYSTICK_INTERVAL_10MS = 100, /**< Interval is 10ms */
|
SYSTICK_INTERVAL_100MS = 10U, /**< Interval is 100ms */
|
||||||
SYSTICK_INTERVAL_100MS = 10, /**< Interval is 100ms */
|
SYSTICK_INTERVAL_1000MS = 1U, /**< Interval is 1s */
|
||||||
SYSTICK_INTERVAL_1000MS = 1, /**< Interval is 1s */
|
|
||||||
} systick_interval_t;
|
} systick_interval_t;
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -71,25 +69,24 @@ typedef enum
|
|||||||
/** @defgroup ALD_Public_Macros Public Macros
|
/** @defgroup ALD_Public_Macros Public Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define ALD_MAX_DELAY 0xFFFFFFFF
|
#define ALD_MAX_DELAY 0xFFFFFFFFU
|
||||||
|
|
||||||
#define IS_BIT_SET(reg, bit) (((reg) & (bit)) != RESET)
|
#define IS_BIT_SET(reg, bit) (((reg) & (bit)) != RESET)
|
||||||
#define IS_BIT_CLR(reg, bit) (((reg) & (bit)) == RESET)
|
#define IS_BIT_CLR(reg, bit) (((reg) & (bit)) == RESET)
|
||||||
#define RESET_HANDLE_STATE(x) ((x)->state = 0)
|
#define RESET_HANDLE_STATE(x) ((x)->state = 0)
|
||||||
#define __LOCK(x) \
|
#define __LOCK(x) \
|
||||||
do { \
|
do { \
|
||||||
if ((x)->lock == LOCK) { \
|
if ((x)->lock == LOCK) { \
|
||||||
return BUSY; \
|
return BUSY; \
|
||||||
} \
|
} \
|
||||||
else { \
|
else { \
|
||||||
(x)->lock = LOCK; \
|
(x)->lock = LOCK; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define __UNLOCK(x) \
|
#define __UNLOCK(x) \
|
||||||
do { \
|
do { \
|
||||||
(x)->lock = UNLOCK; \
|
(x)->lock = UNLOCK; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -98,6 +95,10 @@ typedef enum
|
|||||||
/** @defgroup ALD_Private_Macros Private Macros
|
/** @defgroup ALD_Private_Macros Private Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
#define MCU_UID0_ADDR 0x000403E0U
|
||||||
|
#define MCU_UID1_ADDR 0x000403E8U
|
||||||
|
#define MCU_UID2_ADDR 0x000403F0U
|
||||||
|
#define MCU_CHIPID_ADDR 0x000403F8U
|
||||||
#define IS_PRIO(x) ((x) < 4)
|
#define IS_PRIO(x) ((x) < 4)
|
||||||
#define IS_SYSTICK_INTERVAL(x) (((x) == SYSTICK_INTERVAL_1MS) || \
|
#define IS_SYSTICK_INTERVAL(x) (((x) == SYSTICK_INTERVAL_1MS) || \
|
||||||
((x) == SYSTICK_INTERVAL_10MS) || \
|
((x) == SYSTICK_INTERVAL_10MS) || \
|
||||||
@@ -140,7 +141,8 @@ ald_status_t ald_wait_flag(uint32_t *reg, uint32_t bit, flag_status_t status, ui
|
|||||||
void ald_mcu_irq_config(IRQn_Type irq, uint8_t prio, type_func_t status);
|
void ald_mcu_irq_config(IRQn_Type irq, uint8_t prio, type_func_t status);
|
||||||
uint32_t ald_mcu_get_tick(void);
|
uint32_t ald_mcu_get_tick(void);
|
||||||
uint32_t ald_mcu_get_cpu_id(void);
|
uint32_t ald_mcu_get_cpu_id(void);
|
||||||
|
void ald_mcu_get_uid(uint8_t *buf);
|
||||||
|
uint32_t ald_mcu_get_chipid(void);
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -41,7 +41,7 @@
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
[..] This section provides functions allowing to:
|
[..] This section provides functions allowing to:
|
||||||
(+) ald_bkpc_ldo_config() API can configure LDO in backup field.
|
(+) ald_bkpc_ldo_config() API can configure LDO in backup field.
|
||||||
(+) ald_bkpc_bor_config() API can configure BOR in backup field.
|
(+) ald_bkpc_standby_wakeup_config() API can configure STANDBY wakeup.
|
||||||
|
|
||||||
@endverbatim
|
@endverbatim
|
||||||
* @{
|
* @{
|
||||||
@@ -55,40 +55,44 @@
|
|||||||
*/
|
*/
|
||||||
void ald_bkpc_ldo_config(bkpc_ldo_output_t output, type_func_t state)
|
void ald_bkpc_ldo_config(bkpc_ldo_output_t output, type_func_t state)
|
||||||
{
|
{
|
||||||
assert_param(IS_BKPC_LDO_OUTPUT(output));
|
assert_param(IS_BKPC_LDO_OUTPUT(output));
|
||||||
assert_param(IS_FUNC_STATE(state));
|
assert_param(IS_FUNC_STATE(state));
|
||||||
|
|
||||||
BKPC_UNLOCK();
|
BKPC_UNLOCK();
|
||||||
MODIFY_REG(BKPC->CR, BKPC_CR_MT_STDB_MSK, state << BKPC_CR_MT_STDB_POS);
|
MODIFY_REG(BKPC->CR, BKPC_CR_MT_STDB_MSK, state << BKPC_CR_MT_STDB_POS);
|
||||||
|
|
||||||
if (state)
|
if (state)
|
||||||
MODIFY_REG(BKPC->CR, BKPC_CR_LDO_VSEL_MSK, output << BKPC_CR_LDO_VSEL_POSS);
|
MODIFY_REG(BKPC->CR, BKPC_CR_LDO_VSEL_MSK, output << BKPC_CR_LDO_VSEL_POSS);
|
||||||
|
|
||||||
BKPC_LOCK();
|
BKPC_LOCK();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Configure bor voltage in backup field
|
* @brief Configure standby wakeup in backup field
|
||||||
* @param vol: Voltage select.
|
* @param port: Wakeup port
|
||||||
* @param state: DISABLE/ENABLE.
|
* @param level: HIGH/LOW.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void ald_bkpc_bor_config(bkpc_bor_vol_t vol, type_func_t state)
|
void ald_bkpc_standby_wakeup_config(bkpc_wakeup_port_t port, bkpc_wakeup_level_t level)
|
||||||
{
|
{
|
||||||
assert_param(IS_BKPC_BOR_VOL(vol));
|
assert_param(IS_BKPC_WAKEUP_PORT(port));
|
||||||
assert_param(IS_FUNC_STATE(state));
|
assert_param(IS_BKPC_WAKEUP_LEVEL(level));
|
||||||
|
|
||||||
BKPC_UNLOCK();
|
if (port == PMU_STANDBY_PORT_SEL_NONE) {
|
||||||
MODIFY_REG(BKPC->PCR, BKPC_PCR_BOREN_MSK, state << BKPC_PCR_BOREN_POS);
|
BKPC_UNLOCK();
|
||||||
|
CLEAR_BIT(BKPC->CR, BKPC_CR_WKPEN_MSK);
|
||||||
if (state)
|
BKPC_LOCK();
|
||||||
MODIFY_REG(BKPC->PCR, BKPC_PCR_BORS_MSK, vol << BKPC_PCR_BORS_POSS);
|
return;
|
||||||
|
}
|
||||||
BKPC_LOCK();
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
BKPC_UNLOCK();
|
||||||
|
SET_BIT(BKPC->CR, BKPC_CR_WKPEN_MSK);
|
||||||
|
MODIFY_REG(BKPC->CR, BKPC_CR_WKPS_MSK, port << BKPC_CR_WKPS_POSS);
|
||||||
|
MODIFY_REG(BKPC->CR, BKPC_CR_WKPOL_MSK, level << BKPC_CR_WKPOL_POS);
|
||||||
|
BKPC_LOCK();
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
@@ -117,13 +121,13 @@ void ald_bkpc_bor_config(bkpc_bor_vol_t vol, type_func_t state)
|
|||||||
*/
|
*/
|
||||||
void ald_bkpc_write_ram(uint8_t idx, uint32_t value)
|
void ald_bkpc_write_ram(uint8_t idx, uint32_t value)
|
||||||
{
|
{
|
||||||
assert_param(IS_BKPC_RAM_IDX(idx));
|
assert_param(IS_BKPC_RAM_IDX(idx));
|
||||||
|
|
||||||
RTC_UNLOCK();
|
RTC_UNLOCK();
|
||||||
WRITE_REG(RTC->BKPR[idx], value);
|
WRITE_REG(RTC->BKPR[idx], value);
|
||||||
RTC_LOCK();
|
RTC_LOCK();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,9 +137,9 @@ void ald_bkpc_write_ram(uint8_t idx, uint32_t value)
|
|||||||
*/
|
*/
|
||||||
uint32_t ald_bkpc_read_ram(uint8_t idx)
|
uint32_t ald_bkpc_read_ram(uint8_t idx)
|
||||||
{
|
{
|
||||||
assert_param(IS_BKPC_RAM_IDX(idx));
|
assert_param(IS_BKPC_RAM_IDX(idx));
|
||||||
|
|
||||||
return READ_REG(RTC->BKPR[idx]);
|
return READ_REG(RTC->BKPR[idx]);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -45,16 +45,15 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Square root operation.
|
* @brief Square root operation.
|
||||||
* @param data: The data;
|
* @param data: The radicand
|
||||||
* @retval The value of square root.
|
* @retval The value of square root.
|
||||||
*/
|
*/
|
||||||
uint32_t ald_calc_sqrt(uint32_t data)
|
uint32_t ald_calc_sqrt(uint32_t data)
|
||||||
{
|
{
|
||||||
WRITE_REG(CALC->RDCND, data);
|
WRITE_REG(CALC->RDCND, data);
|
||||||
|
while (READ_BIT(CALC->SQRTSR, CALC_SQRTSR_BUSY_MSK));
|
||||||
|
|
||||||
while (READ_BIT(CALC->SQRTSR, CALC_SQRTSR_BUSY_MSK));
|
return READ_REG(CALC->SQRTRES);
|
||||||
|
|
||||||
return READ_REG(CALC->SQRTRES);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,15 +65,15 @@ uint32_t ald_calc_sqrt(uint32_t data)
|
|||||||
*/
|
*/
|
||||||
uint32_t ald_calc_div(uint32_t dividend, uint32_t divisor, uint32_t *remainder)
|
uint32_t ald_calc_div(uint32_t dividend, uint32_t divisor, uint32_t *remainder)
|
||||||
{
|
{
|
||||||
CLEAR_BIT(CALC->DIVCSR, CALC_DIVCSR_SIGN_MSK);
|
CLEAR_BIT(CALC->DIVCSR, CALC_DIVCSR_SIGN_MSK);
|
||||||
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_TRM_MSK);
|
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_TRM_MSK);
|
||||||
WRITE_REG(CALC->DIVDR, dividend);
|
WRITE_REG(CALC->DIVDR, dividend);
|
||||||
WRITE_REG(CALC->DIVSR, divisor);
|
WRITE_REG(CALC->DIVSR, divisor);
|
||||||
|
|
||||||
while (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_BUSY_MSK));
|
while (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_BUSY_MSK));
|
||||||
|
|
||||||
*remainder = READ_REG(CALC->DIVRR);
|
*remainder = READ_REG(CALC->DIVRR);
|
||||||
return READ_REG(CALC->DIVQR);
|
return READ_REG(CALC->DIVQR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,15 +85,15 @@ uint32_t ald_calc_div(uint32_t dividend, uint32_t divisor, uint32_t *remainder)
|
|||||||
*/
|
*/
|
||||||
int32_t ald_calc_div_sign(int32_t dividend, int32_t divisor, int32_t *remainder)
|
int32_t ald_calc_div_sign(int32_t dividend, int32_t divisor, int32_t *remainder)
|
||||||
{
|
{
|
||||||
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_SIGN_MSK);
|
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_SIGN_MSK);
|
||||||
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_TRM_MSK);
|
SET_BIT(CALC->DIVCSR, CALC_DIVCSR_TRM_MSK);
|
||||||
WRITE_REG(CALC->DIVDR, dividend);
|
WRITE_REG(CALC->DIVDR, dividend);
|
||||||
WRITE_REG(CALC->DIVSR, divisor);
|
WRITE_REG(CALC->DIVSR, divisor);
|
||||||
|
|
||||||
while (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_BUSY_MSK));
|
while (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_BUSY_MSK));
|
||||||
|
|
||||||
*remainder = READ_REG(CALC->DIVRR);
|
*remainder = READ_REG(CALC->DIVRR);
|
||||||
return READ_REG(CALC->DIVQR);
|
return READ_REG(CALC->DIVQR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,10 +102,10 @@ int32_t ald_calc_div_sign(int32_t dividend, int32_t divisor, int32_t *remainder)
|
|||||||
*/
|
*/
|
||||||
flag_status_t ald_calc_get_dz_status(void)
|
flag_status_t ald_calc_get_dz_status(void)
|
||||||
{
|
{
|
||||||
if (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_DZ_MSK))
|
if (READ_BIT(CALC->DIVCSR, CALC_DIVCSR_DZ_MSK))
|
||||||
return SET;
|
return SET;
|
||||||
|
|
||||||
return RESET;
|
return RESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user