Initial repository layout, add datasheets and device pack
This commit is contained in:
commit
dbbe507931
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
.pio
|
||||
.vscode/.browse.c_cpp.db*
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/launch.json
|
||||
.vscode/ipch
|
10
.vscode/extensions.json
vendored
Normal file
10
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"platformio.platformio-ide"
|
||||
],
|
||||
"unwantedRecommendations": [
|
||||
"ms-vscode.cpptools-extension-pack"
|
||||
]
|
||||
}
|
27
boards/generic_py32f030x6.json
Normal file
27
boards/generic_py32f030x6.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"build": {
|
||||
"cpu": "cortex-m0plus",
|
||||
"extra_flags": "-DPY32F003x6",
|
||||
"f_cpu": "8000000L",
|
||||
"mcu": "py32f030x6",
|
||||
"product_line": "PY32F030x6"
|
||||
},
|
||||
"debug": {
|
||||
"svd_path": "boards/svd/py32f030xx.svd",
|
||||
"pyocd_target": "py32f0xx",
|
||||
"default_tools": [
|
||||
"cmsis-dap"
|
||||
]
|
||||
},
|
||||
"upload": {
|
||||
"maximum_ram_size": 4096,
|
||||
"maximum_size": 32768,
|
||||
"protocol": "cmsis-dap",
|
||||
"protocols": [
|
||||
"cmsis-dap"
|
||||
]
|
||||
},
|
||||
"name": "Generic PY32F002/003/030 (configured as 32K PY32F030x6)",
|
||||
"url": "https://github.com/trueserve",
|
||||
"vendor": "trueControl"
|
||||
}
|
BIN
boards/pack/Puya.PY32F0xx_DFP.1.1.3.pack
Normal file
BIN
boards/pack/Puya.PY32F0xx_DFP.1.1.3.pack
Normal file
Binary file not shown.
7978
boards/svd/py32f002axx.svd
Normal file
7978
boards/svd/py32f002axx.svd
Normal file
File diff suppressed because it is too large
Load Diff
7953
boards/svd/py32f002xx.svd
Normal file
7953
boards/svd/py32f002xx.svd
Normal file
File diff suppressed because it is too large
Load Diff
11089
boards/svd/py32f003xx.svd
Normal file
11089
boards/svd/py32f003xx.svd
Normal file
File diff suppressed because it is too large
Load Diff
11582
boards/svd/py32f030xx.svd
Normal file
11582
boards/svd/py32f030xx.svd
Normal file
File diff suppressed because it is too large
Load Diff
BIN
datasheet/PY32F003 Reference manual v1.0_EN.pdf
Normal file
BIN
datasheet/PY32F003 Reference manual v1.0_EN.pdf
Normal file
Binary file not shown.
BIN
datasheet/PY32F003 datasheet 105℃ Rev.1.0_EN.pdf
Normal file
BIN
datasheet/PY32F003 datasheet 105℃ Rev.1.0_EN.pdf
Normal file
Binary file not shown.
BIN
datasheet/PY32F003 datasheet SOP16 Rev.0.2.pdf
Normal file
BIN
datasheet/PY32F003 datasheet SOP16 Rev.0.2.pdf
Normal file
Binary file not shown.
BIN
datasheet/PY32F003 datasheet SOP16 Rev.0.2_en.pdf
Normal file
BIN
datasheet/PY32F003 datasheet SOP16 Rev.0.2_en.pdf
Normal file
Binary file not shown.
BIN
datasheet/PY32F003 datasheet Rev.1.2_EN.pdf
Normal file
BIN
datasheet/PY32F003 datasheet Rev.1.2_EN.pdf
Normal file
Binary file not shown.
39
include/README
Normal file
39
include/README
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
This directory is intended for project header files.
|
||||
|
||||
A header file is a file containing C declarations and macro definitions
|
||||
to be shared between several project source files. You request the use of a
|
||||
header file in your project source file (C, C++, etc) located in `src` folder
|
||||
by including it, with the C preprocessing directive `#include'.
|
||||
|
||||
```src/main.c
|
||||
|
||||
#include "header.h"
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Including a header file produces the same results as copying the header file
|
||||
into each source file that needs it. Such copying would be time-consuming
|
||||
and error-prone. With a header file, the related declarations appear
|
||||
in only one place. If they need to be changed, they can be changed in one
|
||||
place, and programs that include the header file will automatically use the
|
||||
new version when next recompiled. The header file eliminates the labor of
|
||||
finding and changing all the copies as well as the risk that a failure to
|
||||
find one copy will result in inconsistencies within a program.
|
||||
|
||||
In C, the usual convention is to give header files names that end with `.h'.
|
||||
It is most portable to use only letters, digits, dashes, and underscores in
|
||||
header file names, and at most one dot.
|
||||
|
||||
Read more about using header files in official GCC documentation:
|
||||
|
||||
* Include Syntax
|
||||
* Include Operation
|
||||
* Once-Only Headers
|
||||
* Computed Includes
|
||||
|
||||
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
46
lib/README
Normal file
46
lib/README
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
This directory is intended for project specific (private) libraries.
|
||||
PlatformIO will compile them to static libraries and link into executable file.
|
||||
|
||||
The source code of each library should be placed in a an own separate directory
|
||||
("lib/your_library_name/[here are source files]").
|
||||
|
||||
For example, see a structure of the following two libraries `Foo` and `Bar`:
|
||||
|
||||
|--lib
|
||||
| |
|
||||
| |--Bar
|
||||
| | |--docs
|
||||
| | |--examples
|
||||
| | |--src
|
||||
| | |- Bar.c
|
||||
| | |- Bar.h
|
||||
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||
| |
|
||||
| |--Foo
|
||||
| | |- Foo.c
|
||||
| | |- Foo.h
|
||||
| |
|
||||
| |- README --> THIS FILE
|
||||
|
|
||||
|- platformio.ini
|
||||
|--src
|
||||
|- main.c
|
||||
|
||||
and a contents of `src/main.c`:
|
||||
```
|
||||
#include <Foo.h>
|
||||
#include <Bar.h>
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
PlatformIO Library Dependency Finder will find automatically dependent
|
||||
libraries scanning project source files.
|
||||
|
||||
More information about PlatformIO Library Dependency Finder
|
||||
- https://docs.platformio.org/page/librarymanager/ldf.html
|
67
platformio.ini
Normal file
67
platformio.ini
Normal file
@ -0,0 +1,67 @@
|
||||
; PlatformIO Project Configuration File
|
||||
;
|
||||
; Build options: build flags, source filter
|
||||
; Upload options: custom upload port, speed and extra flags
|
||||
; Library options: dependencies, extra library storages
|
||||
; Advanced options: extra scripting
|
||||
;
|
||||
; Please visit documentation for the other options and examples
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[env]
|
||||
platform = nxplpc ; not actually this and we are not using a framework
|
||||
build_type = debug ; setting platform = nxplpc makes everything happy
|
||||
; as we'll get nano specs and any other needed shit
|
||||
board = generic_py32f030x6
|
||||
|
||||
debug_tool = custom ; built-in pyocd support does not allow config file override
|
||||
debug_server = $PYTHONEXE
|
||||
${platformio.packages_dir}/tool-pyocd/pyocd-gdbserver.py
|
||||
--config
|
||||
$PROJECT_DIR/pyocd.yaml
|
||||
-t
|
||||
PY32F030x6
|
||||
#debug_port = localhost:3333
|
||||
debug_extra_cmds =
|
||||
set mem inaccessible-by-default off
|
||||
|
||||
upload_protocol = custom
|
||||
upload_command = $PYTHONEXE ${platformio.packages_dir}/tool-pyocd/pyocd-flashtool.py --config $PROJECT_DIR/pyocd.yaml -t PY32F030x6 $SOURCE
|
||||
|
||||
build_flags =
|
||||
-DUSE_FULL_LL_DRIVER
|
||||
-L.
|
||||
-Os
|
||||
-std=gnu11
|
||||
|
||||
debug_build_flags =
|
||||
-DUSE_FULL_LL_DRIVER
|
||||
-L.
|
||||
-Os
|
||||
-std=gnu11
|
||||
-Wl,-Map=.pio/output_dbg.map
|
||||
-g
|
||||
|
||||
platform_packages =
|
||||
toolchain-gccarmnoneeabi@1.100301.220327 ; build issues with GCC12, use GCC10 for now
|
||||
tool-pyocd ; user won't have to install it
|
||||
|
||||
|
||||
[env:sc7-testobot-py32f-dbg_pyocd]
|
||||
board_build.ldscript = py32f030x6.ld
|
||||
|
||||
debug_build_flags =
|
||||
-Wl,-Map=.pio/output_dbg.map
|
||||
|
||||
|
||||
[env:sc7-testobot-py32f-rel_bl]
|
||||
board_build.ldscript = py32f030x6_bl.ld
|
||||
|
||||
build_flags =
|
||||
-Wl,-Map=.pio/output_rel.map
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
155
py32f030x6.ld
Normal file
155
py32f030x6.ld
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
**
|
||||
** File : py32f030x6.ld
|
||||
**
|
||||
** Abstract : Linker script for PY32F030x6 series
|
||||
** Set heap size, stack size and stack location according
|
||||
** to application requirements.
|
||||
** Set memory bank area and size if external memory is used.
|
||||
**
|
||||
** Distribution: The file is distributed “as is,” without any warranty
|
||||
** of any kind.
|
||||
**
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Highest address of the user mode stack */
|
||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */
|
||||
/*
|
||||
Generate a link error if heap and stack don't fit into RAM.
|
||||
These numbers affect the USED size of RAM
|
||||
*/
|
||||
_Min_Heap_Size = 0x000; /* required amount of heap: 0 bytes */
|
||||
_Min_Stack_Size = 0x100; /* required amount of stack: 256 bytes */
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
{
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4K
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K
|
||||
}
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
/* The startup code goes first into FLASH */
|
||||
.isr_vector :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.isr_vector)) /* Startup code */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
/* The program code and other data goes into FLASH */
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.text) /* .text sections (code) */
|
||||
*(.text*) /* .text* sections (code) */
|
||||
*(.glue_7) /* glue arm to thumb code */
|
||||
*(.glue_7t) /* glue thumb to arm code */
|
||||
*(.eh_frame)
|
||||
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
|
||||
. = ALIGN(4);
|
||||
_etext = .; /* define a global symbols at end of code */
|
||||
} >FLASH
|
||||
|
||||
/* Constant data goes into FLASH */
|
||||
.rodata :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM : {
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx*)
|
||||
__exidx_end = .;
|
||||
} >FLASH
|
||||
|
||||
.preinit_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array*))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
} >FLASH
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array*))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
} >FLASH
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array*))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
} >FLASH
|
||||
|
||||
/* used by the startup to initialize data */
|
||||
_sidata = LOADADDR(.data);
|
||||
|
||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
||||
.data :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sdata = .; /* create a global symbol at data start */
|
||||
*(.data) /* .data sections */
|
||||
*(.data*) /* .data* sections */
|
||||
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* define a global symbol at data end */
|
||||
} >RAM AT> FLASH
|
||||
|
||||
|
||||
/* Uninitialized data section */
|
||||
. = ALIGN(4);
|
||||
.bss :
|
||||
{
|
||||
/* This is used by the startup in order to initialize the .bss secion */
|
||||
_sbss = .; /* define a global symbol at bss start */
|
||||
__bss_start__ = _sbss;
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
|
||||
. = ALIGN(4);
|
||||
_ebss = .; /* define a global symbol at bss end */
|
||||
__bss_end__ = _ebss;
|
||||
} >RAM
|
||||
|
||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||
._user_heap_stack :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE ( end = . );
|
||||
PROVIDE ( _end = . );
|
||||
. = . + _Min_Heap_Size;
|
||||
. = . + _Min_Stack_Size;
|
||||
. = ALIGN(8);
|
||||
} >RAM
|
||||
|
||||
/* Remove information from the standard libraries */
|
||||
/DISCARD/ :
|
||||
{
|
||||
libc.a ( * )
|
||||
libm.a ( * )
|
||||
libgcc.a ( * )
|
||||
}
|
||||
|
||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||
}
|
||||
|
||||
|
155
py32f030x6_bl.ld
Normal file
155
py32f030x6_bl.ld
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
**
|
||||
** File : py32f030x6.ld
|
||||
**
|
||||
** Abstract : Linker script for PY32F030x6 series
|
||||
** Set heap size, stack size and stack location according
|
||||
** to application requirements.
|
||||
** Set memory bank area and size if external memory is used.
|
||||
**
|
||||
** Distribution: The file is distributed “as is,” without any warranty
|
||||
** of any kind.
|
||||
**
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Highest address of the user mode stack */
|
||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */
|
||||
/*
|
||||
Generate a link error if heap and stack don't fit into RAM.
|
||||
These numbers affect the USED size of RAM
|
||||
*/
|
||||
_Min_Heap_Size = 0x000; /* required amount of heap: 0 bytes */
|
||||
_Min_Stack_Size = 0x100; /* required amount of stack: 256 bytes */
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
{
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4K
|
||||
FLASH (rx) : ORIGIN = 0x08002000, LENGTH = 30K
|
||||
}
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
/* The startup code goes first into FLASH */
|
||||
.isr_vector :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.isr_vector)) /* Startup code */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
/* The program code and other data goes into FLASH */
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.text) /* .text sections (code) */
|
||||
*(.text*) /* .text* sections (code) */
|
||||
*(.glue_7) /* glue arm to thumb code */
|
||||
*(.glue_7t) /* glue thumb to arm code */
|
||||
*(.eh_frame)
|
||||
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
|
||||
. = ALIGN(4);
|
||||
_etext = .; /* define a global symbols at end of code */
|
||||
} >FLASH
|
||||
|
||||
/* Constant data goes into FLASH */
|
||||
.rodata :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM : {
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx*)
|
||||
__exidx_end = .;
|
||||
} >FLASH
|
||||
|
||||
.preinit_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array*))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
} >FLASH
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array*))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
} >FLASH
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array*))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
} >FLASH
|
||||
|
||||
/* used by the startup to initialize data */
|
||||
_sidata = LOADADDR(.data);
|
||||
|
||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
||||
.data :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sdata = .; /* create a global symbol at data start */
|
||||
*(.data) /* .data sections */
|
||||
*(.data*) /* .data* sections */
|
||||
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* define a global symbol at data end */
|
||||
} >RAM AT> FLASH
|
||||
|
||||
|
||||
/* Uninitialized data section */
|
||||
. = ALIGN(4);
|
||||
.bss :
|
||||
{
|
||||
/* This is used by the startup in order to initialize the .bss secion */
|
||||
_sbss = .; /* define a global symbol at bss start */
|
||||
__bss_start__ = _sbss;
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
|
||||
. = ALIGN(4);
|
||||
_ebss = .; /* define a global symbol at bss end */
|
||||
__bss_end__ = _ebss;
|
||||
} >RAM
|
||||
|
||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||
._user_heap_stack :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE ( end = . );
|
||||
PROVIDE ( _end = . );
|
||||
. = . + _Min_Heap_Size;
|
||||
. = . + _Min_Stack_Size;
|
||||
. = ALIGN(8);
|
||||
} >RAM
|
||||
|
||||
/* Remove information from the standard libraries */
|
||||
/DISCARD/ :
|
||||
{
|
||||
libc.a ( * )
|
||||
libm.a ( * )
|
||||
libgcc.a ( * )
|
||||
}
|
||||
|
||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||
}
|
||||
|
||||
|
4
pyocd.yaml
Normal file
4
pyocd.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
pack:
|
||||
- boards/pack/Puya.PY32F0xx_DFP.1.1.3a.pack
|
||||
|
||||
script: pyocd_user.py
|
17
pyocd_user.py
Normal file
17
pyocd_user.py
Normal file
@ -0,0 +1,17 @@
|
||||
# Add missing memory region for peripherals.
|
||||
|
||||
def will_connect(board):
|
||||
print("notice: adding peripheral memory map...");
|
||||
|
||||
target.memory_map.add_region(DeviceRegion(
|
||||
name="Peripheral",
|
||||
start=0x40000000,
|
||||
length=0x20000000,
|
||||
access='rw'
|
||||
))
|
||||
target.memory_map.add_region(DeviceRegion(
|
||||
name="PPB",
|
||||
start=0xE0000000,
|
||||
length=0x20000000,
|
||||
access='rw'
|
||||
))
|
11
test/README
Normal file
11
test/README
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
This directory is intended for PlatformIO Test Runner and project tests.
|
||||
|
||||
Unit Testing is a software testing method by which individual units of
|
||||
source code, sets of one or more MCU program modules together with associated
|
||||
control data, usage procedures, and operating procedures, are tested to
|
||||
determine whether they are fit for use. Unit testing finds problems early
|
||||
in the development cycle.
|
||||
|
||||
More information about PlatformIO Unit Testing:
|
||||
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
Loading…
Reference in New Issue
Block a user