[bsp][hpmicro] Update libraries, add new BSPs

- Updated hpm_sdk in libraries
- Updated rt-thread driver adapter
- Updated bsp for hpm6750evkmini
- Updated bsp for hpm6750evk
- Added bsp for hpm6750evk2
- Added bsp for hpm6300evk
- Added bsp for hpm6200evk

Signed-off-by: Fan YANG <fan.yang@hpmicro.com>
This commit is contained in:
Fan YANG
2023-08-16 13:46:43 +08:00
committed by guo
parent 83a2863ab6
commit 0bd93292b3
685 changed files with 135406 additions and 258066 deletions
+11
View File
@@ -0,0 +1,11 @@
# files format check exclude path, please follow the instructions below to modify;
# If you need to exclude an entire folder, add the folder path in dir_path;
# If you need to exclude a file, add the path to the file in file_path.
dir_path:
- hpm6200evk/startup
- hpm6300evk/startup
- hpm6750evk/startup
- hpm6750evk2/startup
- hpm6750evkmini/startup
- libraries/hpm_sdk
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
mainmenu "RT-Thread Configuration"
config BSP_DIR
string
option env="BSP_ROOT"
default "."
config RTT_DIR
string
option env="RTT_ROOT"
default "../../.."
config PKGS_DIR
string
option env="PKGS_ROOT"
default "packages"
source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "../libraries/Kconfig"
source "board/Kconfig"
+114
View File
@@ -0,0 +1,114 @@
# HPMicro HPM6200EVK BSP(Board Support Package) Introduction
[中文页](README_zh.md) |
## Introduction
This document provides brief introduction of the BSP (board support package) for the HPM6200EVK development board.
The document consists of the following parts:
- HPM6200EVK Board Resources Introduction
- Quickly Getting Started
- Refreences
By reading the Quickly Get Started section developers can quickly get their hands on this BSP and run RT-Thread on the board. More advanced features will be introduced in the Advanced Features section to help developers take advantage of RT-Thread to drive more on-board resources.
## Board Resources Introduction
HPM6200EVK is a development board based on the RISC-V core launched by HPMicro, with rich on-board resources and on-chip resources for motor control, etc.
![board](figures/board.png)
## Peripheral Condition
Each peripheral supporting condition for this BSP is as follows:
| **On-board Peripherals** | **Support** | **Note** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| RTC | √ | |
| PWM | √ | |
| On-Board Debugger | √ | ft2232 |
## Execution Instruction
### Quickly Getting Started
The BSP support being build via the 'scons' command, below is the steps of compiling the example via the 'scons' command
#### Parpare Environment
- Step 1: Prepare [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- Step 2: Prepare [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- Download the package and extract it into a specified directory, for example: `C:\DevTools\riscv32-gnu-toolchain`
- Step 3: Set environment variable `RTT_RISCV_TOOLCHAIN` to `<TOOLCHAIN_DIR>\bin`
- For example: `C:\DevTools\riscv32-gnu-toolchain\bin`
- Step 4: Prepare [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- Download and extract it to specified directory, for example: `C:\DevTools\openocd-hpmicro`
- Add `OpenOCD` environment variable `OPENOCD_HPMICRO` to `<OPENOCD_HPMICRO_DIR>\bin`
- For example: `C:\DevTools\openocd-hpmicro\bin`
#### Configure and Build project
Open RT-Thread ENV command-line, and change directory to this BSP directory, then users can:
- Configure the project via `menuconfig` in `RT-Thread ENV`
- Build the project using `scons -jN`, `N` equals to the number of CPU cores
- Clean the project using `scons -c`
#### Hardware Connection
- Switch BOOT pin to 2'b00
- Connect the `PWR_DEBUG` port to PC via TYPE-C cable
#### Dowload / Debug
- Users can download the project via the below command:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6280-single-core.cfg -f boards\debug_scripts\boards\hpm6200evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- Users can debug the project via the below command:
- Connect debugger via `OpenOCD`:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6280-single-core.cfg -f boards\debug_scripts\boards\hpm6200evk.cfg
```
- Start Debugger via `GDB`:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- In the `gdb shell`, type the following commands:
```console
load
c
```
### **Running Results**
Once the project is successfully downloaded, the system runs automatically. The LED on the board will flash periodically.
Connect the serial port of the board to the PC, communicate with it via a serial terminal tool(115200-8-1-N). Reset the board and the startup information of RT-Thread will be observed:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **References**
- [RT-Thread Documnent Center](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6200EVK RT-Thread BSP Package](https://github.com/hpmicro/rtt-bsp-hpm6200evk)
+115
View File
@@ -0,0 +1,115 @@
# 先楫 HPM6200EVK BSP(板级支持包)说明
[English](README.md) |
## 简介
本文档为 HPM6200EVK 的 BSP (板级支持包) 说明。
本文包含如下部分:
- HPM6200EVK 板级资源介绍
- 快速上手指南
- 参考链接
通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。
## 板级资源介绍
HPM6200EVK 是由先楫半导体推出的一款基于RISCV内核的开发板,带有丰富的片上资源和板上资源,可用于电机控制等应用。
开发板外观如下图所示:
![board](figures/board.png)
## 板载外设
本 BSP 目前对外设的支持情况如下:
| **板载外设** | **支持情况** | **备注** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| 以太网 | √ | 由RT-Thread Industry IO扩展板提供支持 |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| SDIO | √ | |
| RTC | √ | |
| PWM | √ | |
| 板载调试器 | √ | ft2232 |
## 使用说明
### 快速开始
本BSP支持通过`scons`命令来完成编译,在开始之前,需要先准备好开发所需的环境。
#### 准备环境
- 步骤 1: 准备 [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- 步骤 2: 准备 [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- 下载并解压到指定的目录,如: `C:\DevTools\riscv32-gnu-toolchain`
- 步骤 3: 设置环境变量: `RTT_RISCV_TOOLCHAIN` 为 `<TOOLCHAIN_DIR>\bin`, 如: `C:\DevTools\riscv32-gnu-toolchain\bin`
- 步骤 4: 准备 [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- 下载并解压到指定目录,如: `C:\DevTools\openocd-hpmicro`
- 将 `OPENOCD_HPMICRO`环境变量设置为 `<OPENOCD_HPMICRO_DIR>\bin`,如: `C:\DevTools\openocd-hpmicro\bin`
#### 配置和构建工程
通过 RT-Thread ENV 命令行切换目录到当前BSP所在目录后,用户可以:
- 通过 `menuconfig` 命令 配置RT-Thread BSP的功能
- 通过 `scons -jN` 命令完成构建, 其中`N` 最大值可以指定为CP拥有的物理内核数
- 通过 `scons -c` 命令清除构建
#### 硬件连接
- 将BOOT 引脚拨到2'b00
- 通过 TYPE-C线将板上的 `PWR_DEBUG` 连接到电脑
#### 下载 和 调试
- 通过如下命令完成下载:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6280-single-core.cfg -f boards\debug_scripts\boards\hpm6200evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- 通过如下命令实现调试:
- 通过 `OpenOCD` 来连接开发板:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6280-single-core.cfg -f boards\debug_scripts\boards\hpm6200evk.cfg
```
- 通过 `GDB` 实现调试:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- 在`GDB Shell`中使用如下命令来加载和运行:
```console
load
c
```
### **运行结果**
一旦成功下载,程序会自动运行并打印如下结果,板载LED灯会周期性闪烁。
配置好串口终端(串口配置为115200, 8-N-1),按复位键后,串口终端会打印如下日志:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **参考链接**
- [RT-Thread 文档中心](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6200EVK RT-Thread BSP 包](https://github.com/hpmicro/rtt-bsp-hpm6200evk)
+17
View File
@@ -0,0 +1,17 @@
# for module compiling
import os
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
ASFLAGS = ' -I' + cwd
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
+75
View File
@@ -0,0 +1,75 @@
import os
import sys
import rtconfig
if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../../rt-thread')
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
try:
from building import *
except:
print('Cannot found RT-Thread root directory, please check RTT_ROOT')
print(RTT_ROOT)
exit(-1)
TARGET = 'rtthread.' + rtconfig.TARGET_EXT
AddOption('--run',
dest = 'run',
type='string',
nargs=1,
action = 'store',
default = "",
help = 'Upload or debug application using openocd')
DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
AR = rtconfig.AR, ARFLAGS = '-rc',
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS,
CXXCOM = '$CXX -o $TARGET -c $CXXFLAGS $_CCCOMCOM $SOURCES')
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
env['ASCOM'] = env['ASPPCOM']
Export('RTT_ROOT')
Export('rtconfig')
SDK_ROOT = os.path.abspath('./')
if os.path.exists(os.path.join(SDK_ROOT, 'libraries')):
libraries_path_prefix = os.path.join(SDK_ROOT, 'libraries')
else:
libraries_path_prefix = os.path.join(os.path.dirname(SDK_ROOT), 'libraries')
SDK_LIB = libraries_path_prefix
Export('SDK_LIB')
GDB = rtconfig.GDB
# prepare building environment
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)
hpm_library = 'hpm_sdk'
rtconfig.BSP_LIBRARY_TYPE = hpm_library
# include soc
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library,'soc', rtconfig.CHIP_NAME, 'SConscript')))
# include libraries
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'SConscript')))
# include components
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'components', 'SConscript')))
# includes rtt drivers
objs.extend(SConscript(os.path.join(libraries_path_prefix, 'drivers', 'SConscript')))
# make a building
DoBuilding(TARGET, objs)
@@ -9,6 +9,6 @@ src = Glob('*.c')
CPPDEFINES=[]
CPPPATH = [cwd]
group = DefineGroup('board', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
Return('group')
@@ -0,0 +1,38 @@
/*
* Copyright (c) 2021 hpmicro
*
* Change Logs:
* Date Author Notes
* 2021-08-13 Fan YANG first version
*
*/
#include <rtthread.h>
#include <rtdevice.h>
#include "rtt_board.h"
#include <drv_gpio.h>
void thread_entry(void *arg);
int main(void)
{
static uint32_t led_thread_arg = 0;
rt_thread_t led_thread = rt_thread_create("led_th", thread_entry, &led_thread_arg, 1024, 1, 10);
rt_thread_startup(led_thread);
return 0;
}
void thread_entry(void *arg)
{
rt_pin_mode(APP_LED0_PIN_NUM, PIN_MODE_OUTPUT);
while(1){
rt_pin_write(APP_LED0_PIN_NUM, APP_LED_ON);
rt_thread_mdelay(500);
rt_pin_write(APP_LED0_PIN_NUM, APP_LED_OFF);
rt_thread_mdelay(500);
}
}
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
from building import *
cwd = GetCurrentDir()
# add the general drivers
src = Split("""
board.c
rtt_board.c
pinmux.c
fal_flash_port.c
""")
CPPPATH = [cwd]
CPPDEFINES=['D45', 'HPM6280']
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,33 @@
# Copyright 2023 hpmicro
# SPDX-License-Identifier: BSD-3-Clause
flash bank xpi0 hpm_xpi 0x80000000 0x1000000 1 1 $_TARGET0 0xF3040000
proc init_clock {} {
$::_TARGET0 riscv dmi_write 0x39 0xF4002000
$::_TARGET0 riscv dmi_write 0x3C 0x1
$::_TARGET0 riscv dmi_write 0x39 0xF4002000
$::_TARGET0 riscv dmi_write 0x3C 0x2
$::_TARGET0 riscv dmi_write 0x39 0xF4000800
$::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF
$::_TARGET0 riscv dmi_write 0x39 0xF4000810
$::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF
$::_TARGET0 riscv dmi_write 0x39 0xF4000820
$::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF
$::_TARGET0 riscv dmi_write 0x39 0xF4000830
$::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF
echo "clocks has been enabled!"
}
$_TARGET0 configure -event reset-init {
init_clock
}
$_TARGET0 configure -event gdb-attach {
reset halt
}
@@ -0,0 +1,11 @@
# Copyright (c) 2021 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
bindto 0.0.0.0
adapter speed 8000
adapter srst delay 500
source [find interface/cmsis-dap.cfg]
transport select jtag
reset_config srst_only
@@ -0,0 +1,15 @@
# Copyright (c) 2021 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
bindto 0.0.0.0
adapter speed 10000
reset_config trst_and_srst
adapter srst delay 50
adapter driver ftdi
ftdi_vid_pid 0x0403 0x6010
ftdi_layout_init 0x0208 0x020b
ftdi_layout_signal nTRST -data 0x0200 -noe 0x0400
ftdi_layout_signal nSRST -data 0x0100 -noe 0x0800
@@ -0,0 +1,14 @@
# Copyright (c) 2021 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
bindto 0.0.0.0
adapter speed 10000
reset_config trst_and_srst
adapter srst delay 50
adapter driver ftdi
ftdi_vid_pid 0x0403 0x6014
ftdi_layout_init 0x0018 0x001b
ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400
ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800
@@ -0,0 +1,11 @@
# Copyright (c) 2021 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
bindto 0.0.0.0
adapter speed 10000
adapter srst delay 500
source [find interface/jlink.cfg]
transport select jtag
reset_config srst_only
@@ -0,0 +1,14 @@
# Copyright (c) 2021 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
bindto 0.0.0.0
adapter speed 10000
adapter srst delay 500
reset_config srst_only
adapter driver ftdi
ftdi_vid_pid 0x0403 0x6010
ftdi_layout_init 0x0008 0x010b
ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400
ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800
@@ -0,0 +1,61 @@
# Copyright 2021 hpmicro
# SPDX-License-Identifier: BSD-3-Clause
#
set _CHIP hpm6280
set _CPUTAPID 0x1000563D
jtag newtap $_CHIP cpu -irlen 5 -expected-id $_CPUTAPID
set _TARGET0 $_CHIP.cpu0
target create $_TARGET0 riscv -chain-position $_CHIP.cpu -coreid 0
$_TARGET0 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-area-backup 0
targets $_TARGET0
proc dmi_write {reg value} {
$::_TARGET0 riscv dmi_write ${reg} ${value}
}
proc dmi_read {reg} {
set v [$::_TARGET0 riscv dmi_read ${reg}]
return ${v}
}
proc dmi_write_memory {addr value} {
dmi_write 0x39 ${addr}
dmi_write 0x3C ${value}
}
proc dmi_read_memory {addr} {
set sbcs [expr { 0x100000 | [dmi_read 0x38] }]
dmi_write 0x38 ${sbcs}
dmi_write 0x39 ${addr}
set value [dmi_read 0x3C]
return ${value}
}
proc release_core1 {} {
# set start point for core1
dmi_write_memory 0xF4002C08 0x20012588
# set boot flag for core1
dmi_write_memory 0xF4002C0C 0xC1BEF1A9
# release core1
dmi_write_memory 0xF4002C00 0x1000
}
set _TARGET1 $_CHIP.cpu1
target create $_TARGET1 riscv -chain-position $_CHIP.cpu -coreid 1
$_TARGET1 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-area-backup 0
$_TARGET1 configure -event examine-start {
release_core1
}
$_TARGET1 configure -event reset-deassert-pre {
$::_TARGET0 arp_poll
release_core1
}
@@ -0,0 +1,13 @@
# Copyright 2021 hpmicro
# SPDX-License-Identifier: BSD-3-Clause
set _CHIP hpm6280
set _CPUTAPID 0x1000563D
jtag newtap $_CHIP cpu -irlen 5 -expected-id $_CPUTAPID
set _TARGET0 $_CHIP.cpu0
target create $_TARGET0 riscv -chain-position $_CHIP.cpu -coreid 0
$_TARGET0 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-area-backup 0
targets $_TARGET0
+41
View File
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2022 hpmicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtconfig.h>
#include <board.h>
#ifdef RT_USING_FAL
#define NOR_FLASH_DEV_NAME "norflash0"
#define NOR_FLASH_MEM_BASE 0x80000000UL
#define NOR_FLASH_SIZE_IN_BYTES 0x1000000UL
/* ===================== Flash device Configuration ========================= */
extern const struct fal_flash_dev stm32f2_onchip_flash;
extern struct fal_flash_dev nor_flash0;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&nor_flash0, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "app", NOR_FLASH_DEV_NAME, 0, 4*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 4*1024*1024, 3*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 7*1024*1024, 8*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "flashdb", NOR_FLASH_DEV_NAME, 15*1024*1024, 1*1024*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* RT_USING_FAL */
#endif /* _FAL_CFG_H_ */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 hpmicro
* Copyright (c) 2022 hpmicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -7,16 +7,12 @@
#ifndef HPM_PINMUX_H
#define HPM_PINMUX_H
#include "hpm_soc.h"
#ifdef __cplusplus
extern "C" {
#endif
void init_uart_pins(UART_Type *ptr);
void init_lcd_pins(LCDC_Type *ptr);
void init_i2c_pins(I2C_Type *ptr);
void init_cap_pins(void);
void init_sdram_pins(void);
void init_gpio_pins(void);
void init_spi_pins(SPI_Type *ptr);
void init_spi_pins_with_gpio_as_cs(SPI_Type *ptr);
@@ -24,30 +20,23 @@ void init_pins(void);
void init_gptmr_pins(GPTMR_Type *ptr);
void init_hall_trgm_pins(void);
void init_qei_trgm_pins(void);
void init_i2s_pins(I2S_Type *ptr);
void init_dao_pins(void);
void init_pdm_pins(void);
void init_vad_pins(void);
void init_cam_pins(CAM_Type *ptr);
void init_fpga_power_pins(void);
void init_butn_pins(void);
void init_acmp_pins(void);
void init_enet_pins(ENET_Type *ptr);
void init_pwm_pins(PWM_Type *ptr);
void init_hrpwm_pins(PWM_Type *ptr);
void init_adc_pins(void);
void init_usb_pins(USB_Type *ptr);
void init_can_pins(CAN_Type *ptr);
void init_sdxc_pins(SDXC_Type *ptr, bool use_1v8);
void init_adc12_pins(void);
void init_adc16_pins(void);
void init_dac_pins(DAC_Type *ptr);
void init_usb_pins(void);
void init_can_pins(MCAN_Type *ptr);
void init_adc_bldc_pins(void);
void init_rgb_pwm_pins(void);
void init_i2c_pins_as_gpio(I2C_Type *ptr);
void init_beep_pwm_pins(void);
void init_led_pins_as_pwm(void);
void init_led_pins_as_gpio(void);
void init_led_pins_as_pwm(void);
void init_trgmux_pins(uint32_t pin);
void init_pla_pins(void);
void init_lin_pins(LIN_Type *ptr);
void init_sdm_pins(void);
#ifdef __cplusplus
}
#endif
+122
View File
@@ -0,0 +1,122 @@
/*
* Copyright (c) 2021-2023 HPMicro
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include "board.h"
#include "rtt_board.h"
#include "hpm_uart_drv.h"
#include "hpm_gpio_drv.h"
#include "hpm_mchtmr_drv.h"
#include "hpm_pmp_drv.h"
#include "assert.h"
#include "hpm_clock_drv.h"
#include "hpm_sysctl_drv.h"
#include <rthw.h>
#include <rtthread.h>
#include "hpm_dma_manager.h"
void os_tick_config(void);
extern int rt_hw_uart_init(void);
void rtt_board_init(void)
{
board_init_clock();
board_init_console();
board_init_pmp();
dma_manager_init();
/* initialize memory system */
rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END);
/* Configure the OS Tick */
os_tick_config();
/* Initialize the UART driver first, because later driver initialization may require the rt_kprintf */
rt_hw_uart_init();
/* Set console device */
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
}
void app_init_led_pins(void)
{
gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, BOARD_LED_OFF_LEVEL);
}
void app_led_write(uint32_t index, bool state)
{
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state);
}
void BOARD_LED_write(uint32_t index, bool state)
{
switch (index)
{
case 0:
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state);
break;
default:
/* Suppress the toolchain warnings */
break;
}
}
void os_tick_config(void)
{
sysctl_config_clock(HPM_SYSCTL, clock_node_mchtmr0, clock_source_osc0_clk0, 1);
sysctl_add_resource_to_cpu0(HPM_SYSCTL, sysctl_resource_mchtmr0);
mchtmr_set_compare_value(HPM_MCHTMR, BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND);
enable_mchtmr_irq();
}
void rt_hw_board_init(void)
{
rtt_board_init();
/* Call the RT-Thread Component Board Initialization */
rt_components_board_init();
}
void rt_hw_console_output(const char *str)
{
while (*str != '\0')
{
uart_send_byte(BOARD_APP_UART_BASE, *str++);
}
}
ATTR_PLACE_AT(".isr_vector") void mchtmr_isr(void)
{
HPM_MCHTMR->MTIMECMP = HPM_MCHTMR->MTIME + BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND;
rt_interrupt_enter();
rt_tick_increase();
rt_interrupt_leave();
}
void rt_hw_us_delay(rt_uint32_t us)
{
clock_cpu_delay_us(us);
}
void rt_hw_cpu_reset(void)
{
HPM_PPOR->RESET_ENABLE = (1UL << 31);
HPM_PPOR->RESET_HOT &= ~(1UL << 31);
HPM_PPOR->RESET_COLD |= (1UL << 31);
HPM_PPOR->SOFTWARE_RESET = 1000U;
while(1) {
}
}
MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reset, reset the board);
+59
View File
@@ -0,0 +1,59 @@
/*
* Copyright (c) 2021 hpmicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef _RTT_BOARD_H
#define _RTT_BOARD_H
#include "hpm_common.h"
#include "hpm_soc.h"
#include <drv_gpio.h>
/* gpio section */
#define APP_LED0_PIN_NUM GET_PIN(B, 19)
#define APP_LED_ON (1)
#define APP_LED_OFF (0)
/* mchtimer section */
#define BOARD_MCHTMR_FREQ_IN_HZ (24000000UL)
/* CAN section */
#define BOARD_CAN_NAME "can0"
/***************************************************************
*
* RT-Thread related definitions
*
**************************************************************/
extern unsigned int __heap_start__;
extern unsigned int __heap_end__;
#define RT_HW_HEAP_BEGIN ((void*)&__heap_start__)
#define RT_HW_HEAP_END ((void*)&__heap_end__)
typedef struct {
uint16_t vdd;
uint8_t bus_width;
uint8_t drive_strength;
}sdxc_io_cfg_t;
void app_init_led_pins(void);
void app_led_write(uint32_t index, bool state);
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus */
#if defined(__cplusplus)
}
#endif /* __cplusplus */
#endif /* _RTT_BOARD_H */
Binary file not shown.

After

Width:  |  Height:  |  Size: 582 KiB

File diff suppressed because it is too large Load Diff
+108
View File
@@ -0,0 +1,108 @@
# Copyright 2021-2023 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
import os
import sys
# toolchains options
ARCH='risc-v'
CPU='hpmicro'
CHIP_NAME='HPM6280'
CROSS_TOOL='gcc'
# bsp lib config
BSP_LIBRARY_TYPE = None
# Fallback toolchain info
FALLBACK_TOOLCHAIN_VENDOR='RISC-V'
FALLBACK_TOOLCHAIN_PKG='RISC-V-GCC-RV32'
FALLBACK_TOOLCHAIN_VER='2022-04-12'
if os.getenv('RTT_CC'):
CROSS_TOOL = os.getenv('RTT_CC')
RTT_EXEC_PATH = os.getenv('RTT_EXEC_PATH')
if RTT_EXEC_PATH != None:
folders = RTT_EXEC_PATH.split(os.sep)
# If the `RT-Thread Env` is from the RT-Thread Studio, generate the RTT_EXEC_PATH using `FALLBACK_TOOLCHAIN_INFO`
if 'arm_gcc' in folders and 'platform' in folders:
RTT_EXEC_PATH = ''
for path in folders:
if path != 'platform':
RTT_EXEC_PATH = RTT_EXEC_PATH + path + os.sep
else:
break
RTT_EXEC_PATH = os.path.join(RTT_EXEC_PATH, 'repo', 'Extract', 'ToolChain_Support_Packages', FALLBACK_TOOLCHAIN_VENDOR, FALLBACK_TOOLCHAIN_PKG, FALLBACK_TOOLCHAIN_VER, 'bin')
# Override the 'RTT_RISCV_TOOLCHAIN' only if the `RT-Thread ENV` is from the RT-Thread Studio
if 'platform' in folders:
os.environ['RTT_RISCV_TOOLCHAIN'] = RTT_EXEC_PATH
# cross_tool provides the cross compiler
# EXEC_PATH is the compiler path, for example, GNU RISC-V toolchain, IAR
if CROSS_TOOL == 'gcc':
PLATFORM = 'gcc'
if os.getenv('RTT_RISCV_TOOLCHAIN'):
EXEC_PATH = os.getenv('RTT_RISCV_TOOLCHAIN')
else:
EXEC_PATH = r'/opt/riscv-gnu-gcc/bin'
else:
print("CROSS_TOOL = {} not yet supported" % CROSS_TOOL)
BUILD = 'flash_debug'
if PLATFORM == 'gcc':
PREFIX = 'riscv32-unknown-elf-'
CC = PREFIX + 'gcc'
CXX = PREFIX + 'g++'
AS = PREFIX + 'gcc'
AR = PREFIX + 'ar'
LINK = PREFIX + 'gcc'
GDB = PREFIX + 'gdb'
TARGET_EXT = 'elf'
SIZE = PREFIX + 'size'
OBJDUMP = PREFIX + 'objdump'
OBJCPY = PREFIX + 'objcopy'
STRIP = PREFIX + 'strip'
ARCH_ABI = ' -mcmodel=medlow '
CFLAGS = ARCH_ABI + ' -DUSE_NONVECTOR_MODE=1 ' + ' -ffunction-sections -fdata-sections -fno-common '
AFLAGS = CFLAGS
LFLAGS = ARCH_ABI + ' --specs=nano.specs --specs=nosys.specs -u _printf_float -u _scanf_float -nostartfiles -Wl,--gc-sections '
CPATH = ''
LPATH = ''
if BUILD == 'ram_debug':
CFLAGS += ' -gdwarf-2'
AFLAGS += ' -gdwarf-2'
CFLAGS += ' -O0'
LFLAGS += ' -O0'
LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
elif BUILD == 'ram_release':
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
elif BUILD == 'flash_debug':
CFLAGS += ' -gdwarf-2'
AFLAGS += ' -gdwarf-2'
CFLAGS += ' -O0'
LFLAGS += ' -O0'
CFLAGS += ' -DFLASH_XIP=1'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
elif BUILD == 'flash_release':
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
CFLAGS += ' -DFLASH_XIP=1'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
else:
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
LFLAGS += ' -T ' + LINKER_FILE
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
# module setting
CXXFLAGS = CFLAGS + ' -Woverloaded-virtual -fno-exceptions -fno-rtti '
CFLAGS = CFLAGS + ' -std=gnu11'
@@ -12,6 +12,7 @@ src = Split('''
if rtconfig.PLATFORM == 'gcc':
src += [os.path.join('toolchains', 'gcc', 'start.S')]
src += [os.path.join('toolchains', 'gcc', 'port_gcc.S')]
CPPPATH = [cwd]
CPPDEFINES=['D45', rtconfig.CHIP_NAME]
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 - 2022 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
*
*/
@@ -43,11 +43,19 @@ __attribute__((weak)) void c_startup(void)
extern uint8_t __etext[];
extern uint8_t __bss_start__[], __bss_end__[];
extern uint8_t __tbss_start__[], __tbss_end__[];
extern uint8_t __tdata_start__[], __tdata_end__[];
extern uint8_t __data_start__[], __data_end__[];
extern uint8_t __noncacheable_bss_start__[], __noncacheable_bss_end__[];
extern uint8_t __ramfunc_start__[], __ramfunc_end__[];
extern uint8_t __noncacheable_init_start__[], __noncacheable_init_end__[];
/* tbss section */
size = __tbss_end__ - __tbss_start__;
for (i = 0; i < size; i++) {
*(__tbss_start__ + i) = 0;
}
/* bss section */
size = __bss_end__ - __bss_start__;
for (i = 0; i < size; i++) {
@@ -60,22 +68,28 @@ __attribute__((weak)) void c_startup(void)
*(__noncacheable_bss_start__ + i) = 0;
}
/* tdata section LMA: etext */
size = __tdata_end__ - __tdata_start__;
for (i = 0; i < size; i++) {
*(__tdata_start__ + i) = *(__etext + i);
}
/* data section LMA: etext */
size = __data_end__ - __data_start__;
for (i = 0; i < size; i++) {
*(__data_start__ + i) = *(__etext + i);
*(__data_start__ + i) = *(__etext + (__tdata_end__ - __tdata_start__) + i);
}
/* ramfunc section LMA: etext + data length */
size = __ramfunc_end__ - __ramfunc_start__;
for (i = 0; i < size; i++) {
*(__ramfunc_start__ + i) = *(__etext + (__data_end__ - __data_start__) + i);
*(__ramfunc_start__ + i) = *(__etext + (__data_end__ - __tdata_start__) + i);
}
/* noncacheable init section LMA: etext + data length + ramfunc length */
size = __noncacheable_init_end__ - __noncacheable_init_start__;
for (i = 0; i < size; i++) {
*(__noncacheable_init_start__ + i) = *(__etext + (__data_end__ - __data_start__) + (__ramfunc_end__ - __ramfunc_start__) + i);
*(__noncacheable_init_start__ + i) = *(__etext + (__data_end__ - __tdata_start__) + (__ramfunc_end__ - __ramfunc_start__) + i);
}
}
@@ -0,0 +1,23 @@
/*
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include "cpuport.h"
.globl rt_hw_do_after_save_above
.type rt_hw_do_after_save_above,@function
rt_hw_do_after_save_above:
addi sp, sp, -4
STORE ra, 0 * REGBYTES(sp)
csrr t1, mcause
andi t1, t1, 0x3FF
/* get ISR */
la t2, trap_entry
jalr t2
LOAD ra, 0 * REGBYTES(sp)
addi sp, sp, 4
ret
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -16,14 +16,9 @@ _start:
.option push
.option norelax
la gp, __global_pointer$
la tp, __thread_pointer
.option pop
#ifdef INIT_EXT_RAM_FOR_DATA
la t0, _stack_in_dlm
mv sp, t0
call _init_ext_ram
#endif
/* Initialize stack pointer */
la t0, _stack
mv sp, t0
@@ -44,7 +39,6 @@ _start:
#endif
/* Disable Vector mode */
csrci CSR_MMISC_CTL, 2
/* Initialize trap_entry base */
la t0, SW_handler
csrw mtvec, t0
@@ -0,0 +1,108 @@
/*
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
.section .vector_table, "a"
.global __vector_table
.align 9
__vector_table:
.weak default_isr_trap
.set default_isr_trap, SW_handler
.long default_isr_trap
IRQ_HANDLER 1 /* GPIO0_A IRQ handler */
IRQ_HANDLER 2 /* GPIO0_B IRQ handler */
IRQ_HANDLER 3 /* GPIO0_C IRQ handler */
IRQ_HANDLER 4 /* GPIO0_D IRQ handler */
IRQ_HANDLER 5 /* GPIO0_X IRQ handler */
IRQ_HANDLER 6 /* GPIO0_Y IRQ handler */
IRQ_HANDLER 7 /* GPIO0_Z IRQ handler */
IRQ_HANDLER 8 /* GPIO1_A IRQ handler */
IRQ_HANDLER 9 /* GPIO1_B IRQ handler */
IRQ_HANDLER 10 /* GPIO1_C IRQ handler */
IRQ_HANDLER 11 /* GPIO1_D IRQ handler */
IRQ_HANDLER 12 /* GPIO1_X IRQ handler */
IRQ_HANDLER 13 /* GPIO1_Y IRQ handler */
IRQ_HANDLER 14 /* GPIO1_Z IRQ handler */
IRQ_HANDLER 15 /* ADC0 IRQ handler */
IRQ_HANDLER 16 /* ADC1 IRQ handler */
IRQ_HANDLER 17 /* ADC2 IRQ handler */
IRQ_HANDLER 18 /* SDFM IRQ handler */
IRQ_HANDLER 19 /* DAC0 IRQ handler */
IRQ_HANDLER 20 /* DAC1 IRQ handler */
IRQ_HANDLER 21 /* ACMP[0] IRQ handler */
IRQ_HANDLER 22 /* ACMP[1] IRQ handler */
IRQ_HANDLER 23 /* ACMP[2] IRQ handler */
IRQ_HANDLER 24 /* ACMP[3] IRQ handler */
IRQ_HANDLER 25 /* SPI0 IRQ handler */
IRQ_HANDLER 26 /* SPI1 IRQ handler */
IRQ_HANDLER 27 /* SPI2 IRQ handler */
IRQ_HANDLER 28 /* SPI3 IRQ handler */
IRQ_HANDLER 29 /* UART0 IRQ handler */
IRQ_HANDLER 30 /* UART1 IRQ handler */
IRQ_HANDLER 31 /* UART2 IRQ handler */
IRQ_HANDLER 32 /* UART3 IRQ handler */
IRQ_HANDLER 33 /* UART4 IRQ handler */
IRQ_HANDLER 34 /* UART5 IRQ handler */
IRQ_HANDLER 35 /* UART6 IRQ handler */
IRQ_HANDLER 36 /* UART7 IRQ handler */
IRQ_HANDLER 37 /* CAN0 IRQ handler */
IRQ_HANDLER 38 /* CAN1 IRQ handler */
IRQ_HANDLER 39 /* CAN2 IRQ handler */
IRQ_HANDLER 40 /* CAN3 IRQ handler */
IRQ_HANDLER 41 /* PTPC IRQ handler */
IRQ_HANDLER 42 /* WDG0 IRQ handler */
IRQ_HANDLER 43 /* WDG1 IRQ handler */
IRQ_HANDLER 44 /* TSNS IRQ handler */
IRQ_HANDLER 45 /* MBX0A IRQ handler */
IRQ_HANDLER 46 /* MBX0B IRQ handler */
IRQ_HANDLER 47 /* MBX1A IRQ handler */
IRQ_HANDLER 48 /* MBX1B IRQ handler */
IRQ_HANDLER 49 /* GPTMR0 IRQ handler */
IRQ_HANDLER 50 /* GPTMR1 IRQ handler */
IRQ_HANDLER 51 /* GPTMR2 IRQ handler */
IRQ_HANDLER 52 /* GPTMR3 IRQ handler */
IRQ_HANDLER 53 /* I2C0 IRQ handler */
IRQ_HANDLER 54 /* I2C1 IRQ handler */
IRQ_HANDLER 55 /* I2C2 IRQ handler */
IRQ_HANDLER 56 /* I2C3 IRQ handler */
IRQ_HANDLER 57 /* PWM0 IRQ handler */
IRQ_HANDLER 58 /* HALL0 IRQ handler */
IRQ_HANDLER 59 /* QEI0 IRQ handler */
IRQ_HANDLER 60 /* PWM1 IRQ handler */
IRQ_HANDLER 61 /* HALL1 IRQ handler */
IRQ_HANDLER 62 /* QEI1 IRQ handler */
IRQ_HANDLER 63 /* PWM2 IRQ handler */
IRQ_HANDLER 64 /* HALL2 IRQ handler */
IRQ_HANDLER 65 /* QEI2 IRQ handler */
IRQ_HANDLER 66 /* PWM3 IRQ handler */
IRQ_HANDLER 67 /* HALL3 IRQ handler */
IRQ_HANDLER 68 /* QEI3 IRQ handler */
IRQ_HANDLER 69 /* SDP IRQ handler */
IRQ_HANDLER 70 /* XPI0 IRQ handler */
IRQ_HANDLER 71 /* XDMA IRQ handler */
IRQ_HANDLER 72 /* HDMA IRQ handler */
IRQ_HANDLER 73 /* RNG IRQ handler */
IRQ_HANDLER 74 /* USB0 IRQ handler */
IRQ_HANDLER 75 /* PSEC IRQ handler */
IRQ_HANDLER 76 /* PGPIO IRQ handler */
IRQ_HANDLER 77 /* PWDG IRQ handler */
IRQ_HANDLER 78 /* PTMR IRQ handler */
IRQ_HANDLER 79 /* PUART IRQ handler */
IRQ_HANDLER 80 /* FUSE IRQ handler */
IRQ_HANDLER 81 /* SECMON IRQ handler */
IRQ_HANDLER 82 /* RTC IRQ handler */
IRQ_HANDLER 83 /* BUTN IRQ handler */
IRQ_HANDLER 84 /* BGPIO IRQ handler */
IRQ_HANDLER 85 /* BVIO IRQ handler */
IRQ_HANDLER 86 /* BROWNOUT IRQ handler */
IRQ_HANDLER 87 /* SYSCTL IRQ handler */
IRQ_HANDLER 88 /* DEBUG[0] IRQ handler */
IRQ_HANDLER 89 /* DEBUG[1] IRQ handler */
IRQ_HANDLER 90 /* LIN0 IRQ handler */
IRQ_HANDLER 91 /* LIN1 IRQ handler */
IRQ_HANDLER 92 /* LIN2 IRQ handler */
IRQ_HANDLER 93 /* LIN3 IRQ handler */
+13
View File
@@ -0,0 +1,13 @@
# for module compiling
import os
Import('rtconfig')
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
objs = []
objs = objs + SConscript(os.path.join(cwd, rtconfig.CHIP_NAME, 'SConscript'))
ASFLAGS = ' -I' + cwd
Return('objs')
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
mainmenu "RT-Thread Configuration"
config BSP_DIR
string
option env="BSP_ROOT"
default "."
config RTT_DIR
string
option env="RTT_ROOT"
default "../../.."
config PKGS_DIR
string
option env="PKGS_ROOT"
default "packages"
source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "../libraries/Kconfig"
source "board/Kconfig"
+116
View File
@@ -0,0 +1,116 @@
# HPMicro HPM6300EVK BSP(Board Support Package) Introduction
[中文页](README_zh.md) |
## Introduction
This document provides brief introduction of the BSP (board support package) for the HPM6300EVK development board.
The document consists of the following parts:
- HPM6300EVK Board Resources Introduction
- Quickly Getting Started
- Refreences
By reading the Quickly Get Started section developers can quickly get their hands on this BSP and run RT-Thread on the board. More advanced features will be introduced in the Advanced Features section to help developers take advantage of RT-Thread to drive more on-board resources.
## Board Resources Introduction
HPM6300EVK is a development board based on the RISC-V core launched by HPMicro, with rich on-board resources and on-chip resources for motor control, etc.
![board](figures/board.png)
## Peripheral Condition
Each peripheral supporting condition for this BSP is as follows:
| **On-board Peripherals** | **Support** | **Note** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| Ethernet | √ | Supported by RT-Thread Industry IO |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| SDIO | √ | |
| RTC | √ | |
| PWM | √ | |
| On-Board Debugger | √ | ft2232 |
## Execution Instruction
### Quickly Getting Started
The BSP support being build via the 'scons' command, below is the steps of compiling the example via the 'scons' command
#### Parpare Environment
- Step 1: Prepare [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- Step 2: Prepare [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- Download the package and extract it into a specified directory, for example: `C:\DevTools\riscv32-gnu-toolchain`
- Step 3: Set environment variable `RTT_RISCV_TOOLCHAIN` to `<TOOLCHAIN_DIR>\bin`
- For example: `C:\DevTools\riscv32-gnu-toolchain\bin`
- Step 4: Prepare [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- Download and extract it to specified directory, for example: `C:\DevTools\openocd-hpmicro`
- Add `OpenOCD` environment variable `OPENOCD_HPMICRO` to `<OPENOCD_HPMICRO_DIR>\bin`
- For example: `C:\DevTools\openocd-hpmicro\bin`
#### Configure and Build project
Open RT-Thread ENV command-line, and change directory to this BSP directory, then users can:
- Configure the project via `menuconfig` in `RT-Thread ENV`
- Build the project using `scons -jN`, `N` equals to the number of CPU cores
- Clean the project using `scons -c`
#### Hardware Connection
- Switch BOOT pin to 2'b00
- Connect the `PWR_DEBUG` port to PC via TYPE-C cable
#### Dowload / Debug
- Users can download the project via the below command:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6360.cfg -f boards\debug_scripts\boards\hpm6300evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- Users can debug the project via the below command:
- Connect debugger via `OpenOCD`:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6360.cfg -f boards\debug_scripts\boards\hpm6300evk.cfg
```
- Start Debugger via `GDB`:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- In the `gdb shell`, type the following commands:
```console
load
c
```
### **Running Results**
Once the project is successfully downloaded, the system runs automatically. The LED on the board will flash periodically.
Connect the serial port of the board to the PC, communicate with it via a serial terminal tool(115200-8-1-N). Reset the board and the startup information of RT-Thread will be observed:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **References**
- [RT-Thread Documnent Center](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6300EVK RT-Thread BSP Package](https://github.com/hpmicro/rtt-bsp-hpm6300evk)
+115
View File
@@ -0,0 +1,115 @@
# 先楫 HPM6300EVK BSP(板级支持包)说明
[English](README.md) |
## 简介
本文档为 HPM6300EVK 的 BSP (板级支持包) 说明。
本文包含如下部分:
- HPM6300EVK 板级资源介绍
- 快速上手指南
- 参考链接
通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。
## 板级资源介绍
HPM6300EVK 是由先楫半导体推出的一款基于RISCV内核的开发板,带有丰富的片上资源和板上资源,可用于电机控制等应用。
开发板外观如下图所示:
![board](figures/board.png)
## 板载外设
本 BSP 目前对外设的支持情况如下:
| **板载外设** | **支持情况** | **备注** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| 以太网 | √ | 由RT-Thread Industry IO扩展板提供支持 |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| SDIO | √ | |
| RTC | √ | |
| PWM | √ | |
| 板载调试器 | √ | ft2232 |
## 使用说明
### 快速开始
本BSP支持通过`scons`命令来完成编译,在开始之前,需要先准备好开发所需的环境。
#### 准备环境
- 步骤 1: 准备 [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- 步骤 2: 准备 [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- 下载并解压到指定的目录,如: `C:\DevTools\riscv32-gnu-toolchain`
- 步骤 3: 设置环境变量: `RTT_RISCV_TOOLCHAIN` 为 `<TOOLCHAIN_DIR>\bin`, 如: `C:\DevTools\riscv32-gnu-toolchain\bin`
- 步骤 4: 准备 [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- 下载并解压到指定目录,如: `C:\DevTools\openocd-hpmicro`
- 将 `OPENOCD_HPMICRO`环境变量设置为 `<OPENOCD_HPMICRO_DIR>\bin`,如: `C:\DevTools\openocd-hpmicro\bin`
#### 配置和构建工程
通过 RT-Thread ENV 命令行切换目录到当前BSP所在目录后,用户可以:
- 通过 `menuconfig` 命令 配置RT-Thread BSP的功能
- 通过 `scons -jN` 命令完成构建, 其中`N` 最大值可以指定为CP拥有的物理内核数
- 通过 `scons -c` 命令清除构建
#### 硬件连接
- 将BOOT 引脚拨到2'b00
- 通过 TYPE-C线将板上的 `PWR_DEBUG` 连接到电脑
#### 下载 和 调试
- 通过如下命令完成下载:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6360.cfg -f boards\debug_scripts\boards\hpm6300evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- 通过如下命令实现调试:
- 通过 `OpenOCD` 来连接开发板:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6360.cfg -f boards\debug_scripts\boards\hpm6300evk.cfg
```
- 通过 `GDB` 实现调试:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- 在`GDB Shell`中使用如下命令来加载和运行:
```console
load
c
```
### **运行结果**
一旦成功下载,程序会自动运行并打印如下结果,板载LED灯会周期性闪烁。
配置好串口终端(串口配置为115200, 8-N-1),按复位键后,串口终端会打印如下日志:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **参考链接**
- [RT-Thread 文档中心](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6300EVK RT-Thread BSP 包](https://github.com/hpmicro/rtt-bsp-hpm6300evk)
+17
View File
@@ -0,0 +1,17 @@
# for module compiling
import os
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
ASFLAGS = ' -I' + cwd
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
+75
View File
@@ -0,0 +1,75 @@
import os
import sys
import rtconfig
if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../../rt-thread')
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
try:
from building import *
except:
print('Cannot found RT-Thread root directory, please check RTT_ROOT')
print(RTT_ROOT)
exit(-1)
TARGET = 'rtthread.' + rtconfig.TARGET_EXT
AddOption('--run',
dest = 'run',
type='string',
nargs=1,
action = 'store',
default = "",
help = 'Upload or debug application using openocd')
DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
AR = rtconfig.AR, ARFLAGS = '-rc',
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS,
CXXCOM = '$CXX -o $TARGET -c $CXXFLAGS $_CCCOMCOM $SOURCES')
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
env['ASCOM'] = env['ASPPCOM']
Export('RTT_ROOT')
Export('rtconfig')
SDK_ROOT = os.path.abspath('./')
if os.path.exists(os.path.join(SDK_ROOT, 'libraries')):
libraries_path_prefix = os.path.join(SDK_ROOT, 'libraries')
else:
libraries_path_prefix = os.path.join(os.path.dirname(SDK_ROOT), 'libraries')
SDK_LIB = libraries_path_prefix
Export('SDK_LIB')
GDB = rtconfig.GDB
# prepare building environment
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)
hpm_library = 'hpm_sdk'
rtconfig.BSP_LIBRARY_TYPE = hpm_library
# include soc
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library,'soc', rtconfig.CHIP_NAME, 'SConscript')))
# include libraries
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'SConscript')))
# include components
objs.extend(SConscript(os.path.join(libraries_path_prefix, hpm_library, 'components', 'SConscript')))
# includes rtt drivers
objs.extend(SConscript(os.path.join(libraries_path_prefix, 'drivers', 'SConscript')))
# make a building
DoBuilding(TARGET, objs)
@@ -9,6 +9,6 @@ src = Glob('*.c')
CPPDEFINES=[]
CPPPATH = [cwd]
group = DefineGroup('board', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
Return('group')
@@ -0,0 +1,38 @@
/*
* Copyright (c) 2021 hpmicro
*
* Change Logs:
* Date Author Notes
* 2021-08-13 Fan YANG first version
*
*/
#include <rtthread.h>
#include <rtdevice.h>
#include "rtt_board.h"
#include <drv_gpio.h>
void thread_entry(void *arg);
int main(void)
{
static uint32_t led_thread_arg = 0;
rt_thread_t led_thread = rt_thread_create("led_th", thread_entry, &led_thread_arg, 1024, 1, 10);
rt_thread_startup(led_thread);
return 0;
}
void thread_entry(void *arg)
{
rt_pin_mode(APP_LED0_PIN_NUM, PIN_MODE_OUTPUT);
while(1){
rt_pin_write(APP_LED0_PIN_NUM, APP_LED_ON);
rt_thread_mdelay(500);
rt_pin_write(APP_LED0_PIN_NUM, APP_LED_OFF);
rt_thread_mdelay(500);
}
}
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
from building import *
cwd = GetCurrentDir()
# add the general drivers
src = Split("""
board.c
rtt_board.c
pinmux.c
fal_flash_port.c
eth_phy_port.c
""")
CPPPATH = [cwd]
CPPDEFINES=['D45', 'HPM6360']
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 hpmicro
* Copyright (c) 2022-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -41,10 +41,10 @@
#define BOARD_APP_UART_CLK_NAME clock_uart0
#ifndef BOARD_CONSOLE_TYPE
#define BOARD_CONSOLE_TYPE console_type_uart
#define BOARD_CONSOLE_TYPE CONSOLE_TYPE_UART
#endif
#if console_type_uart == BOARD_CONSOLE_TYPE
#if BOARD_CONSOLE_TYPE == CONSOLE_TYPE_UART
#ifndef BOARD_CONSOLE_BASE
#if BOARD_RUNNING_CORE == HPM_CORE0
#define BOARD_CONSOLE_BASE HPM_UART0
@@ -80,8 +80,8 @@
/* sdram section */
#define BOARD_SDRAM_ADDRESS (0x40000000UL)
#define BOARD_SDRAM_SIZE (32*SIZE_1MB)
#define BOARD_SDRAM_CS DRAM_SDRAM_CS0
#define BOARD_SDRAM_PORT_SIZE DRAM_SDRAM_PORT_SIZE_16_BITS
#define BOARD_SDRAM_CS FEMC_SDRAM_CS0
#define BOARD_SDRAM_PORT_SIZE FEMC_SDRAM_PORT_SIZE_16_BITS
#define BOARD_SDRAM_REFRESH_COUNT (8192UL)
#define BOARD_SDRAM_REFRESH_IN_MS (64UL)
#define BOARD_SDRAM_DATA_WIDTH_IN_BYTE (4UL)
@@ -149,22 +149,18 @@
#define BOARD_APP_SPI_RX_DMAMUX_CH DMAMUX_MUXCFG_HDMA_MUX0
#define BOARD_APP_SPI_TX_DMA HPM_DMA_SRC_SPI3_TX
#define BOARD_APP_SPI_TX_DMAMUX_CH DMAMUX_MUXCFG_HDMA_MUX1
#define BOARD_SPI_CS_GPIO_CTRL HPM_GPIO0
#define BOARD_SPI_CS_PIN IOC_PAD_PC18
#define BOARD_SPI_CS_ACTIVE_LEVEL (0U)
/* Flash section */
#define BOARD_APP_XPI_NOR_XPI_BASE (HPM_XPI0)
#define BOARD_APP_XPI_NOR_CFG_OPT_HDR (0xfcf90001U)
#define BOARD_APP_XPI_NOR_CFG_OPT_OPT0 (0x00000005U)
#define BOARD_APP_XPI_NOR_CFG_OPT_OPT0 (0x00000007U)
#define BOARD_APP_XPI_NOR_CFG_OPT_OPT1 (0x00001000U)
/* i2s section */
#define BOARD_APP_I2S_BASE HPM_I2S0
#define BOARD_APP_I2S_DATA_LINE (2U)
#define BOARD_APP_I2S_CLK_NAME clock_i2s0
#define BOARD_APP_AUDIO_CLK_SRC clock_source_pll2_clk0
#define BOARD_APP_AUDIO_CLK_SRC_NAME clk_pll2clk0
/* enet section */
#define BOARD_ENET_RMII HPM_ENET0
@@ -174,12 +170,30 @@
#define BOARD_ENET_RMII HPM_ENET0
#define BOARD_ENET_RMII_INT_REF_CLK (1U)
#define BOARD_ENET_RMII_PTP_CLOCK (clock_ptp0)
#define BOARD_ENET0_INF (0U) /* 0: RMII, 1: RGMII */
#define BOARD_ENET0_INT_REF_CLK (0U)
#define BOARD_ENET0_PHY_RST_TIME (30)
#if BOARD_ENET0_INF
#define BOARD_ENET0_TX_DLY (0U)
#define BOARD_ENET0_RX_DLY (0U)
#endif
#if __USE_ENET_PTP
#define BOARD_ENET0_PTP_CLOCK (clock_ptp0)
#endif
/* ADC section */
#define BOARD_APP_ADC16_NAME "ADC0"
#define BOARD_APP_ADC16_BASE HPM_ADC0
#define BOARD_APP_ADC16_IRQn IRQn_ADC0
#define BOARD_APP_ADC16_CH_1 (13U)
#define BOARD_APP_ADC16_CH (13U)
#define BOARD_APP_ADC_SEQ_DMA_SIZE_IN_4BYTES (1024U)
#define BOARD_APP_ADC_PMT_DMA_SIZE_IN_4BYTES (192U)
#define BOARD_APP_ADC_PREEMPT_TRIG_LEN (1U)
#define BOARD_APP_ADC_SINGLE_CONV_CNT (6)
#define BOARD_APP_ADC_TRIG_PWMT0 HPM_PWM0
#define BOARD_APP_ADC_TRIG_PWMT1 HPM_PWM1
#define BOARD_APP_ADC_TRIG_TRGM0 HPM_TRGM0
@@ -208,15 +222,10 @@
#define BOARD_CALLBACK_TIMER_CLK_NAME (clock_gptmr3)
/* SDXC section */
#define BOARD_APP_SDCARD_SDXC_BASE (HPM_SDXC0)
#define BOARD_APP_SDCARD_SUPPORT_1V8 (0)
#define BOARD_APP_SDCARD_SUPPORT_CARD_DETECTION (1)
#define BOARD_APP_SDCARD_CARD_DETECTION_USING_GPIO (0)
#if BOARD_APP_SDCARD_CARD_DETECTION_USING_GPIO
#define BOARD_APP_SDCARD_CARD_DETECTION_GPIO NULL
#define BOARD_APP_SDCARD_CARD_DETECTION_GPIO_INDEX 0
#define BOARD_APP_SDCARD_CARD_DETECTION_PIN_INDEX 0
#endif
#define BOARD_APP_SDCARD_SDXC_BASE (HPM_SDXC0)
#define BOARD_APP_SDCARD_CDN_GPIO_CTRL (HPM_GPIO0)
#define BOARD_APP_SDCARD_CDN_GPIO_PIN (15UL)
#define BOARD_APP_SDCARD_SUPPORT_1V8 (0)
/* USB section */
#define BOARD_USB0_ID_PORT (HPM_GPIO0)
@@ -328,13 +337,11 @@ void board_init_i2c(I2C_Type *ptr);
void board_init_can(CAN_Type *ptr);
uint32_t board_init_dram_clock(void);
uint32_t board_init_femc_clock(void);
void board_init_sdram_pins(void);
void board_init_gpio_pins(void);
void board_init_spi_pins(SPI_Type *ptr);
void board_init_spi_pins_with_gpio_as_cs(SPI_Type *ptr);
void board_write_spi_cs(uint32_t pin, uint8_t state);
void board_init_led_pins(void);
void board_led_write(uint8_t state);
@@ -354,7 +361,7 @@ void board_init_adc16_pins(void);
void board_init_dac_pins(DAC_Type *ptr);
uint32_t board_init_can_clock(CAN_Type *ptr);
uint32_t board_init_gptmr_clock(GPTMR_Type *ptr);
uint32_t board_init_i2s_clock(I2S_Type *ptr);
uint32_t board_init_pdm_clock(void);
uint32_t board_init_dao_clock(void);
@@ -363,15 +370,19 @@ void board_init_sd_pins(SDXC_Type *ptr);
uint32_t board_sd_configure_clock(SDXC_Type *ptr, uint32_t freq);
void board_sd_switch_pins_to_1v8(SDXC_Type *ptr);
bool board_sd_detect_card(SDXC_Type *ptr);
void board_sd_power_switch(SDXC_Type *ptr, bool on_off);
void board_init_usb_pins(void);
void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level);
uint8_t board_get_usb_id_status(void);
uint8_t board_enet_get_dma_pbl(ENET_Type *ptr);
hpm_stat_t board_reset_enet_phy(ENET_Type *ptr);
hpm_stat_t board_init_enet_pins(ENET_Type *ptr);
hpm_stat_t board_init_enet_rmii_reference_clock(ENET_Type *ptr, bool internal);
hpm_stat_t board_init_enet_ptp_clock(ENET_Type *ptr);
hpm_stat_t board_enet_enable_irq(ENET_Type *ptr);
hpm_stat_t board_enet_disable_irq(ENET_Type *ptr);
/*
* @brief Initialize PMP and PMA for but not limited to the following purposes:
* -- non-cacheable memory initialization
@@ -0,0 +1,50 @@
riscv expose_csrs 262
riscv expose_csrs 800
riscv expose_csrs 1984
riscv expose_csrs 1985
riscv expose_csrs 1986
riscv expose_csrs 1987
riscv expose_csrs 1988
riscv expose_csrs 1989
riscv expose_csrs 1990
riscv expose_csrs 1991
riscv expose_csrs 1992
riscv expose_csrs 1993
riscv expose_csrs 1994
riscv expose_csrs 1995
riscv expose_csrs 1996
riscv expose_csrs 1997
riscv expose_csrs 1998
riscv expose_csrs 1999
riscv expose_csrs 2000
riscv expose_csrs 2001
riscv expose_csrs 2002
riscv expose_csrs 2003
riscv expose_csrs 2004
riscv expose_csrs 2005
riscv expose_csrs 2015
riscv expose_csrs 2016
riscv expose_csrs 2017
riscv expose_csrs 2048
riscv expose_csrs 2049
riscv expose_csrs 2057
riscv expose_csrs 2059
riscv expose_csrs 2060
riscv expose_csrs 2500
riscv expose_csrs 2501
riscv expose_csrs 2505
riscv expose_csrs 2509
riscv expose_csrs 2511
riscv expose_csrs 2513
riscv expose_csrs 2514
riscv expose_csrs 2515
riscv expose_csrs 2516
riscv expose_csrs 2528
riscv expose_csrs 2531
riscv expose_csrs 2532
riscv expose_csrs 2533
riscv expose_csrs 2534
riscv expose_csrs 4032
riscv expose_csrs 4033
riscv expose_csrs 4034
riscv expose_csrs 4035
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,85 @@
/*
* Copyright (c) 2021 hpmicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef ETH_PHY_PORT_H
#define ETH_PHY_PORT_H
#include "hpm_ioc_regs.h"
#include <rtdevice.h>
#ifndef PHY_AUTO_NEGO
#define PHY_AUTO_NEGO (1U)
#endif
#ifndef PHY_MDIO_CSR_CLK_FREQ
#define PHY_MDIO_CSR_CLK_FREQ (200000000U)
#endif
enum phy_link_status
{
PHY_LINK_DOWN = 0U,
PHY_LINK_UP
};
typedef struct {
rt_uint32_t phy_speed;
rt_uint32_t phy_duplex;
} phy_info_t;
typedef struct {
rt_uint32_t phy_link;
rt_phy_t phy;
phy_info_t phy_info;
} phy_device_t;
/** @note PHY: RTL8201 */
#define PHY_NAME ("RTL8201")
#define PHY_ID1 (0x1CU)
/* The PHY basic control register */
#define PHY_BASIC_CONTROL_REG (0x00U)
#define PHY_RESET_MASK (1U << 15)
#define PHY_AUTO_NEGOTIATION_MASK (1U << 12)
/* The PHY basic status register */
#define PHY_BASIC_STATUS_REG (0x01U)
#define PHY_LINKED_STATUS_MASK (1U << 2)
#define PHY_AUTONEGO_COMPLETE_MASK (1U << 5)
/* The PHY ID one register */
#define PHY_ID1_REG (0x02U)
/* The PHY ID two register */
#define PHY_ID2_REG (0x03U)
/* The PHY auto-negotiate advertise register */
#define PHY_AUTONEG_ADVERTISE_REG (0x04U)
/* The PHY status register. */
#define PHY_STATUS_REG (0x00U)
#define PHY_10M_MASK (1 << 13)
#define PHY_100M_MASK (1 << 13)
#define PHY_FULL_DUPLEX_MASK (1 << 8)
#define PHY_STATUS_SPEED_10M(SR) ((SR) & PHY_100M_MASK) ? 0: 1
#define PHY_STATUS_SPEED_100M(SR) ((SR) & PHY_100M_MASK)
#define PHY_STATUS_FULL_DUPLEX(SR) ((SR) & PHY_FULL_DUPLEX_MASK)
/* PHY0 register list */
#define PHY0_REG_LIST PHY_BASIC_CONTROL_REG,\
PHY_BASIC_STATUS_REG,\
PHY_ID1_REG,\
PHY_ID2_REG,\
PHY_AUTONEG_ADVERTISE_REG,\
PHY_STATUS_REG
/* PHY0 register index */
#define PHY_BASIC_STATUS_REG_IDX (1U)
#define PHY_ID1_REG_IDX (2U)
#define PHY_STATUS_REG_IDX (5U)
#endif
+40
View File
@@ -0,0 +1,40 @@
/*
* Copyright (c) 2022-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtconfig.h>
#include <board.h>
#ifdef RT_USING_FAL
#define NOR_FLASH_DEV_NAME "norflash0"
#define NOR_FLASH_MEM_BASE 0x80000000UL
#define NOR_FLASH_SIZE_IN_BYTES 0x1000000UL
/* ===================== Flash device Configuration ========================= */
extern struct fal_flash_dev nor_flash0;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&nor_flash0, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "app", NOR_FLASH_DEV_NAME, 0, 4*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 4*1024*1024, 3*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 7*1024*1024, 8*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "flashdb", NOR_FLASH_DEV_NAME, 15*1024*1024, 1*1024*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* RT_USING_FAL */
#endif /* _FAL_CFG_H_ */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 hpmicro
* Copyright (c) 2022 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -28,6 +28,9 @@ void init_uart_pins(UART_Type *ptr)
} else if (ptr == HPM_UART2) {
HPM_IOC->PAD[IOC_PAD_PC26].FUNC_CTL = IOC_PC26_FUNC_CTL_UART2_TXD;
HPM_IOC->PAD[IOC_PAD_PC27].FUNC_CTL = IOC_PC27_FUNC_CTL_UART2_RXD;
} else if (ptr == HPM_PUART) {
HPM_PIOC->PAD[IOC_PAD_PY07].FUNC_CTL = IOC_PY07_FUNC_CTL_PUART_RXD;
HPM_PIOC->PAD[IOC_PAD_PY06].FUNC_CTL = IOC_PY06_FUNC_CTL_PUART_TXD;
}
}
@@ -135,16 +138,6 @@ void init_spi_pins(SPI_Type *ptr)
}
}
void init_spi_pins_with_gpio_as_cs(SPI_Type *ptr)
{
if (ptr == HPM_SPI3) {
HPM_IOC->PAD[IOC_PAD_PC18].FUNC_CTL = IOC_PC18_FUNC_CTL_GPIO_C_18;
HPM_IOC->PAD[IOC_PAD_PC21].FUNC_CTL = IOC_PC21_FUNC_CTL_SPI3_MOSI;
HPM_IOC->PAD[IOC_PAD_PC19].FUNC_CTL = IOC_PC19_FUNC_CTL_SPI3_MISO;
HPM_IOC->PAD[IOC_PAD_PC20].FUNC_CTL = IOC_PC20_FUNC_CTL_SPI3_SCLK | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1);
}
}
void init_pins(void)
{
init_uart_pins(BOARD_CONSOLE_BASE);
@@ -174,8 +167,8 @@ void init_qei_trgm_pins(void)
void init_butn_pins(void)
{
/* HPM_BIOC->PAD[IOC_PAD_PZ02].FUNC_CTL = IOC_PZ02_FUNC_CTL_PBUTN; */
/* HPM_BIOC->PAD[IOC_PAD_PZ03].FUNC_CTL = IOC_PZ03_FUNC_CTL_WBUTN; */
// HPM_BIOC->PAD[IOC_PAD_PZ02].FUNC_CTL = IOC_PZ02_FUNC_CTL_PBUTN;
// HPM_BIOC->PAD[IOC_PAD_PZ03].FUNC_CTL = IOC_PZ03_FUNC_CTL_WBUTN;
}
void init_acmp_pins(void)
@@ -248,6 +241,23 @@ void init_can_pins(CAN_Type *ptr)
}
}
void init_sdxc_power_pin(SDXC_Type *ptr)
{
}
void init_sdxc_vsel_pin(SDXC_Type *ptr)
{
}
void init_sdxc_card_detection_pin(SDXC_Type *ptr)
{
/* SDXC0.CD */
HPM_IOC->PAD[IOC_PAD_PA14].FUNC_CTL = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(17) | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1);
HPM_IOC->PAD[IOC_PAD_PA14].PAD_CTL = IOC_PAD_PAD_CTL_DS_SET(7) | IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1);
}
void init_sdxc_pins(SDXC_Type *ptr, bool use_1v8)
{
uint32_t func_ctl = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(17) | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1);
@@ -262,10 +272,6 @@ void init_sdxc_pins(SDXC_Type *ptr, bool use_1v8)
HPM_IOC->PAD[IOC_PAD_PA10].FUNC_CTL = func_ctl;
HPM_IOC->PAD[IOC_PAD_PA10].PAD_CTL = pad_ctl;
/* SDXC0.CD */
HPM_IOC->PAD[IOC_PAD_PA14].FUNC_CTL = func_ctl;
HPM_IOC->PAD[IOC_PAD_PA14].PAD_CTL = pad_ctl;
/* SDXC0.DATA0 */
HPM_IOC->PAD[IOC_PAD_PA12].FUNC_CTL = func_ctl;
HPM_IOC->PAD[IOC_PAD_PA12].PAD_CTL = pad_ctl;
@@ -1,5 +1,5 @@
/*
*Copyright (c) 2022 hpmicro
*Copyright (c) 2022-2023 HPMicro
*
*SPDX-License-Identifier: BSD-3-Clause
*
@@ -16,7 +16,6 @@ void init_i2c_pins(I2C_Type *ptr);
void init_sdram_pins(void);
void init_gpio_pins(void);
void init_spi_pins(SPI_Type *ptr);
void init_spi_pins_with_gpio_as_cs(SPI_Type *ptr);
void init_pins(void);
void init_gptmr_pins(GPTMR_Type *ptr);
void init_hall_trgm_pins(void);
@@ -29,6 +28,9 @@ void init_adc_pins(void);
void init_dac_pins(DAC_Type *ptr);
void init_usb_pins(void);
void init_can_pins(CAN_Type *ptr);
void init_sdxc_power_pin(SDXC_Type *ptr);
void init_sdxc_vsel_pin(SDXC_Type *ptr);
void init_sdxc_card_detection_pin(SDXC_Type *ptr);
void init_sdxc_pins(SDXC_Type *ptr, bool use_1v8);
void init_adc_bldc_pins(void);
void init_rgb_pwm_pins(void);
+122
View File
@@ -0,0 +1,122 @@
/*
* Copyright (c) 2021-2022 HPMicro
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include "board.h"
#include "rtt_board.h"
#include "hpm_uart_drv.h"
#include "hpm_gpio_drv.h"
#include "hpm_mchtmr_drv.h"
#include "hpm_pmp_drv.h"
#include "assert.h"
#include "hpm_clock_drv.h"
#include "hpm_sysctl_drv.h"
#include <rthw.h>
#include <rtthread.h>
#include "hpm_dma_manager.h"
void os_tick_config(void);
extern int rt_hw_uart_init(void);
void rtt_board_init(void)
{
board_init_clock();
board_init_console();
board_init_pmp();
dma_manager_init();
/* initialize memory system */
rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END);
/* Configure the OS Tick */
os_tick_config();
/* Initialize the UART driver first, because later driver initialization may require the rt_kprintf */
rt_hw_uart_init();
/* Set console device */
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
}
void app_init_led_pins(void)
{
gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, BOARD_LED_OFF_LEVEL);
}
void app_led_write(uint32_t index, bool state)
{
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state);
}
void BOARD_LED_write(uint32_t index, bool state)
{
switch (index)
{
case 0:
gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, state);
break;
default:
/* Suppress the toolchain warnings */
break;
}
}
void os_tick_config(void)
{
sysctl_config_clock(HPM_SYSCTL, clock_node_mchtmr0, clock_source_osc0_clk0, 1);
sysctl_add_resource_to_cpu0(HPM_SYSCTL, sysctl_resource_mchtmr0);
mchtmr_set_compare_value(HPM_MCHTMR, BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND);
enable_mchtmr_irq();
}
void rt_hw_board_init(void)
{
rtt_board_init();
/* Call the RT-Thread Component Board Initialization */
rt_components_board_init();
}
void rt_hw_console_output(const char *str)
{
while (*str != '\0')
{
uart_send_byte(BOARD_APP_UART_BASE, *str++);
}
}
ATTR_PLACE_AT(".isr_vector") void mchtmr_isr(void)
{
HPM_MCHTMR->MTIMECMP = HPM_MCHTMR->MTIME + BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND;
rt_interrupt_enter();
rt_tick_increase();
rt_interrupt_leave();
}
void rt_hw_us_delay(rt_uint32_t us)
{
clock_cpu_delay_us(us);
}
void rt_hw_cpu_reset(void)
{
HPM_PPOR->RESET_ENABLE = (1UL << 31);
HPM_PPOR->RESET_HOT &= ~(1UL << 31);
HPM_PPOR->RESET_COLD |= (1UL << 31);
HPM_PPOR->SOFTWARE_RESET = 1000U;
while(1) {
}
}
MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reset, reset the board);
+59
View File
@@ -0,0 +1,59 @@
/*
* Copyright (c) 2021 hpmicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef _RTT_BOARD_H
#define _RTT_BOARD_H
#include "hpm_common.h"
#include "hpm_soc.h"
#include <drv_gpio.h>
/* gpio section */
#define APP_LED0_PIN_NUM GET_PIN(A, 7)
#define APP_LED_ON (0)
#define APP_LED_OFF (1)
/* mchtimer section */
#define BOARD_MCHTMR_FREQ_IN_HZ (24000000UL)
/* CAN section */
#define BOARD_CAN_NAME "can0"
/***************************************************************
*
* RT-Thread related definitions
*
**************************************************************/
extern unsigned int __heap_start__;
extern unsigned int __heap_end__;
#define RT_HW_HEAP_BEGIN ((void*)&__heap_start__)
#define RT_HW_HEAP_END ((void*)&__heap_end__)
typedef struct {
uint16_t vdd;
uint8_t bus_width;
uint8_t drive_strength;
}sdxc_io_cfg_t;
void app_init_led_pins(void);
void app_led_write(uint32_t index, bool state);
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus */
#if defined(__cplusplus)
}
#endif /* __cplusplus */
#endif /* _RTT_BOARD_H */
Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

File diff suppressed because it is too large Load Diff
+108
View File
@@ -0,0 +1,108 @@
# Copyright 2021-2023 HPMicro
# SPDX-License-Identifier: BSD-3-Clause
import os
import sys
# toolchains options
ARCH='risc-v'
CPU='hpmicro'
CHIP_NAME='HPM6360'
CROSS_TOOL='gcc'
# bsp lib config
BSP_LIBRARY_TYPE = None
# Fallback toolchain info
FALLBACK_TOOLCHAIN_VENDOR='RISC-V'
FALLBACK_TOOLCHAIN_PKG='RISC-V-GCC-RV32'
FALLBACK_TOOLCHAIN_VER='2022-04-12'
if os.getenv('RTT_CC'):
CROSS_TOOL = os.getenv('RTT_CC')
RTT_EXEC_PATH = os.getenv('RTT_EXEC_PATH')
if RTT_EXEC_PATH != None:
folders = RTT_EXEC_PATH.split(os.sep)
# If the `RT-Thread Env` is from the RT-Thread Studio, generate the RTT_EXEC_PATH using `FALLBACK_TOOLCHAIN_INFO`
if 'arm_gcc' in folders and 'platform' in folders:
RTT_EXEC_PATH = ''
for path in folders:
if path != 'platform':
RTT_EXEC_PATH = RTT_EXEC_PATH + path + os.sep
else:
break
RTT_EXEC_PATH = os.path.join(RTT_EXEC_PATH, 'repo', 'Extract', 'ToolChain_Support_Packages', FALLBACK_TOOLCHAIN_VENDOR, FALLBACK_TOOLCHAIN_PKG, FALLBACK_TOOLCHAIN_VER, 'bin')
# Override the 'RTT_RISCV_TOOLCHAIN' only if the `RT-Thread ENV` is from the RT-Thread Studio
if 'platform' in folders:
os.environ['RTT_RISCV_TOOLCHAIN'] = RTT_EXEC_PATH
# cross_tool provides the cross compiler
# EXEC_PATH is the compiler path, for example, GNU RISC-V toolchain, IAR
if CROSS_TOOL == 'gcc':
PLATFORM = 'gcc'
if os.getenv('RTT_RISCV_TOOLCHAIN'):
EXEC_PATH = os.getenv('RTT_RISCV_TOOLCHAIN')
else:
EXEC_PATH = r'/opt/riscv-gnu-gcc/bin'
else:
print("CROSS_TOOL = {} not yet supported" % CROSS_TOOL)
BUILD = 'flash_debug'
if PLATFORM == 'gcc':
PREFIX = 'riscv32-unknown-elf-'
CC = PREFIX + 'gcc'
CXX = PREFIX + 'g++'
AS = PREFIX + 'gcc'
AR = PREFIX + 'ar'
LINK = PREFIX + 'gcc'
GDB = PREFIX + 'gdb'
TARGET_EXT = 'elf'
SIZE = PREFIX + 'size'
OBJDUMP = PREFIX + 'objdump'
OBJCPY = PREFIX + 'objcopy'
STRIP = PREFIX + 'strip'
ARCH_ABI = ' -mcmodel=medlow '
CFLAGS = ARCH_ABI + ' -DUSE_NONVECTOR_MODE=1 ' + ' -ffunction-sections -fdata-sections -fno-common '
AFLAGS = CFLAGS
LFLAGS = ARCH_ABI + ' --specs=nano.specs --specs=nosys.specs -u _printf_float -u _scanf_float -nostartfiles -Wl,--gc-sections '
CPATH = ''
LPATH = ''
if BUILD == 'ram_debug':
CFLAGS += ' -gdwarf-2'
AFLAGS += ' -gdwarf-2'
CFLAGS += ' -O0'
LFLAGS += ' -O0'
LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
elif BUILD == 'ram_release':
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
elif BUILD == 'flash_debug':
CFLAGS += ' -gdwarf-2'
AFLAGS += ' -gdwarf-2'
CFLAGS += ' -O0'
LFLAGS += ' -O0'
CFLAGS += ' -DFLASH_XIP=1'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
elif BUILD == 'flash_release':
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
CFLAGS += ' -DFLASH_XIP=1'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
else:
CFLAGS += ' -O2 -Os'
LFLAGS += ' -O2 -Os'
LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
LFLAGS += ' -T ' + LINKER_FILE
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
# module setting
CXXFLAGS = CFLAGS + ' -Woverloaded-virtual -fno-exceptions -fno-rtti '
CFLAGS = CFLAGS + ' -std=gnu11'
@@ -12,6 +12,7 @@ src = Split('''
if rtconfig.PLATFORM == 'gcc':
src += [os.path.join('toolchains', 'gcc', 'start.S')]
src += [os.path.join('toolchains', 'gcc', 'port_gcc.S')]
CPPPATH = [cwd]
CPPDEFINES=['D45', rtconfig.CHIP_NAME]
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 - 2022 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
*
*/
@@ -43,11 +43,19 @@ __attribute__((weak)) void c_startup(void)
extern uint8_t __etext[];
extern uint8_t __bss_start__[], __bss_end__[];
extern uint8_t __tbss_start__[], __tbss_end__[];
extern uint8_t __tdata_start__[], __tdata_end__[];
extern uint8_t __data_start__[], __data_end__[];
extern uint8_t __noncacheable_bss_start__[], __noncacheable_bss_end__[];
extern uint8_t __ramfunc_start__[], __ramfunc_end__[];
extern uint8_t __noncacheable_init_start__[], __noncacheable_init_end__[];
/* tbss section */
size = __tbss_end__ - __tbss_start__;
for (i = 0; i < size; i++) {
*(__tbss_start__ + i) = 0;
}
/* bss section */
size = __bss_end__ - __bss_start__;
for (i = 0; i < size; i++) {
@@ -60,22 +68,28 @@ __attribute__((weak)) void c_startup(void)
*(__noncacheable_bss_start__ + i) = 0;
}
/* tdata section LMA: etext */
size = __tdata_end__ - __tdata_start__;
for (i = 0; i < size; i++) {
*(__tdata_start__ + i) = *(__etext + i);
}
/* data section LMA: etext */
size = __data_end__ - __data_start__;
for (i = 0; i < size; i++) {
*(__data_start__ + i) = *(__etext + i);
*(__data_start__ + i) = *(__etext + (__tdata_end__ - __tdata_start__) + i);
}
/* ramfunc section LMA: etext + data length */
size = __ramfunc_end__ - __ramfunc_start__;
for (i = 0; i < size; i++) {
*(__ramfunc_start__ + i) = *(__etext + (__data_end__ - __data_start__) + i);
*(__ramfunc_start__ + i) = *(__etext + (__data_end__ - __tdata_start__) + i);
}
/* noncacheable init section LMA: etext + data length + ramfunc length */
size = __noncacheable_init_end__ - __noncacheable_init_start__;
for (i = 0; i < size; i++) {
*(__noncacheable_init_start__ + i) = *(__etext + (__data_end__ - __data_start__) + (__ramfunc_end__ - __ramfunc_start__) + i);
*(__noncacheable_init_start__ + i) = *(__etext + (__data_end__ - __tdata_start__) + (__ramfunc_end__ - __ramfunc_start__) + i);
}
}
@@ -0,0 +1,23 @@
/*
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include "cpuport.h"
.globl rt_hw_do_after_save_above
.type rt_hw_do_after_save_above,@function
rt_hw_do_after_save_above:
addi sp, sp, -4
STORE ra, 0 * REGBYTES(sp)
csrr t1, mcause
andi t1, t1, 0x3FF
/* get ISR */
la t2, trap_entry
jalr t2
LOAD ra, 0 * REGBYTES(sp)
addi sp, sp, 4
ret
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -16,6 +16,7 @@ _start:
.option push
.option norelax
la gp, __global_pointer$
la tp, __thread_pointer
.option pop
#ifdef INIT_EXT_RAM_FOR_DATA
@@ -44,7 +45,6 @@ _start:
#endif
/* Disable Vector mode */
csrci CSR_MMISC_CTL, 2
/* Initialize trap_entry base */
la t0, SW_handler
csrw mtvec, t0
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021-2022 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
+13
View File
@@ -0,0 +1,13 @@
# for module compiling
import os
Import('rtconfig')
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
objs = []
objs = objs + SConscript(os.path.join(cwd, rtconfig.CHIP_NAME, 'SConscript'))
ASFLAGS = ' -I' + cwd
Return('objs')
File diff suppressed because it is too large Load Diff
+116
View File
@@ -0,0 +1,116 @@
# HPMicro HPM6750EVK BSP(Board Support Package) Introduction
[中文页](README_zh.md) |
## Introduction
This document provide brief introduction of the BSP (board support package) for the HPM6750EVK development board.
The document consists of the following parts:
- HPM6750EVK Board Resources Introduction
- Quickly Getting Started
- Refreences
By reading the Quickly Get Started section developers can quickly get their hands on this BSP and run RT-Thread on the board. More advanced features will be introduced in the Advanced Features section to help developers take advantage of RT-Thread to drive more on-board resources.
## Board Resources Introduction
HPM6750EVK is a development board based on the RISC-V core launched by HPMicro, with rich on-board resources and on-chip resources for Display, Audio, motor control, etc.
![board](figures/board.png)
## Peripheral Condition
Each peripheral supporting condition for this BSP is as follows:
| **On-board Peripherals** | **Support** | **Note** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| Ethernet | √ | Dual Ethernet Ports |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| SDIO | √ | |
| RTC | √ | |
| PWM | √ | |
| On-Board Debugger | √ | ft2232 |
## Execution Instruction
### Quickly Getting Started
The BSP support being build via the 'scons' command, below is the steps of compiling the example via the 'scons' command
#### Parpare Environment
- Step 1: Prepare [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- Step 2: Prepare [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- Download the package and extract it into a specified directory, for example: `C:\DevTools\riscv32-gnu-toolchain`
- Step 3: Set environment variable `RTT_RISCV_TOOLCHAIN` to `<TOOLCHAIN_DIR>\bin`
- For example: `C:\DevTools\riscv32-gnu-toolchain\bin`
- Step 4: Prepare [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- Download and extract it to specified directory, for example: `C:\DevTools\openocd-hpmicro`
- Add `OpenOCD` environment variable `OPENOCD_HPMICRO` to `<OPENOCD_HPMICRO_DIR>\bin`
- For example: `C:\DevTools\openocd-hpmicro\bin`
#### Configure and Build project
Open RT-Thread ENV command-line, and change directory to this BSP directory, then users can:
- Configure the project via `menuconfig` in `RT-Thread ENV`
- Build the project using `scons -jN`, `N` equals to the number of CPU cores
- Clean the project using `scons -c`
#### Hardware Connection
- Switch BOOT pin to 2'b00
- Connect the `PWR_DEBUG` port to PC via TYPE-C cable
#### Dowload / Debug
- Users can download the project via the below command:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6750-single-core.cfg -f boards\debug_scripts\boards\hpm6750evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- Users can debug the project via the below command:
- Connect debugger via `OpenOCD`:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6750-single-core.cfg -f boards\debug_scripts\boards\hpm6750evk.cfg
```
- Start Debugger via `GDB`:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- In the `gdb shell`, type the following commands:
```console
load
c
```
### **Running Results**
Once the project is successfully downloaded, the system runs automatically. The LED on the board will flash periodically.
Connect the serial port of the board to the PC, communicate with it via a serial terminal tool(115200-8-1-N). Reset the board and the startup information of RT-Thread will be observed:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **References**
- [RT-Thread Documnent Center](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6750EVKMINI RT-Thread BSP Package](https://github.com/hpmicro/rtt-bsp-hpm6750evk)
+115
View File
@@ -0,0 +1,115 @@
# 先楫 HPM6750EVK BSP(板级支持包)说明
[English](README.md) |
## 简介
本文档为 HPM6750EVK 的 BSP (板级支持包) 说明。
本文包含如下部分:
- HPM6750EVK 板级资源介绍
- 快速上手指南
- 参考链接
通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。
## 板级资源介绍
HPM6750EVK 是由先楫半导体推出的一款基于RISCV内核的开发板,带有丰富的片上资源和板上资源,可用于显示、音频和电机控制等应用。
开发板外观如下图所示:
![board](figures/board.png)
## 板载外设
本 BSP 目前对外设的支持情况如下:
| **板载外设** | **支持情况** | **备注** |
| ------------------------ | ----------- | ------------------------------------- |
| USB | √ | |
| QSPI Flash | √ | |
| 以太网 | √ | 双以太网端口 |
| GPIO | √ | |
| SPI | √ | |
| I2C | √ | |
| SDIO | √ | |
| RTC | √ | |
| PWM | √ | |
| 板载调试器 | √ | ft2232 |
## 使用说明
### 快速开始
本BSP支持通过`scons`命令来完成编译,在开始之前,需要先准备好开发所需的环境。
#### 准备环境
- 步骤 1: 准备 [RT-Thread ENV](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)
- 步骤 2: 准备 [toolcahin](https://github.com/helloeagleyang/riscv32-gnu-toolchain-win/archive/2022.04.12.zip)
- 下载并解压到指定的目录,如: `C:\DevTools\riscv32-gnu-toolchain`
- 步骤 3: 设置环境变量: `RTT_RISCV_TOOLCHAIN` 为 `<TOOLCHAIN_DIR>\bin`, 如: `C:\DevTools\riscv32-gnu-toolchain\bin`
- 步骤 4: 准备 [OpenOCD](https://github.com/hpmicro/rtt-debugger-support-package/archive/v0.3.0.zip)
- 下载并解压到指定目录,如: `C:\DevTools\openocd-hpmicro`
- 将 `OPENOCD_HPMICRO`环境变量设置为 `<OPENOCD_HPMICRO_DIR>\bin`,如: `C:\DevTools\openocd-hpmicro\bin`
#### 配置和构建工程
通过 RT-Thread ENV 命令行切换目录到当前BSP所在目录后,用户可以:
- 通过 `menuconfig` 命令 配置RT-Thread BSP的功能
- 通过 `scons -jN` 命令完成构建, 其中`N` 最大值可以指定为CP拥有的物理内核数
- 通过 `scons -c` 命令清除构建
#### 硬件连接
- 将BOOT 引脚拨到2'b00
- 通过 TYPE-C线将板上的 `PWR_DEBUG` 连接到电脑
#### 下载 和 调试
- 通过如下命令完成下载:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6750-single-core.cfg -f boards\debug_scripts\boards\hpm6750evk.cfg -c "init; halt; flash write_image erase rtthread.elf; reset; shutdown"
```
- 通过如下命令实现调试:
- 通过 `OpenOCD` 来连接开发板:
```console
%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6750-single-core.cfg -f boards\debug_scripts\boards\hpm6750evk.cfg
```
- 通过 `GDB` 实现调试:
```console
%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf
```
- 在`GDB Shell`中使用如下命令来加载和运行:
```console
load
c
```
### **运行结果**
一旦成功下载,程序会自动运行并打印如下结果,板载LED灯会周期性闪烁。
配置好串口终端(串口配置为115200, 8-N-1),按复位键后,串口终端会打印如下日志:
```
\ | /
- RT - Thread Operating System
/ | \ 5.0.1 build Aug 16 2023 18:18:18
2006 - 2023 Copyright by RT-Thread team
```
## **参考链接**
- [RT-Thread 文档中心](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)
- [RT-Thread Env](https://github.com/RT-Thread/rtthread-manual-doc/blob/master/env/env.md)
- [HPM6750EVKMINI RT-Thread BSP 包](https://github.com/hpmicro/rtt-bsp-hpm6750evk)
+36 -2
View File
@@ -5,7 +5,6 @@ config SOC_HPM6000
select SOC_SERIES_HPM6000
select RT_USING_COMPONENTS_INIT
select RT_USING_USER_MAIN
select RT_USING_HW_ATOMIC
default y
menu "On-chip Peripheral Drivers"
@@ -247,6 +246,11 @@ menu "On-chip Peripheral Drivers"
bool "Enable LVGL"
default n
select PKG_USING_LVGL if BSP_USING_LVGL
select BSP_USING_PDMA if BSP_USING_LVGL
menuconfig BSP_USING_PDMA
bool "Enable PDMA Driver"
default n
menuconfig BSP_USING_GPTMR
bool "Enable GPTMR"
@@ -286,7 +290,7 @@ menu "On-chip Peripheral Drivers"
default y
endif
menuconfig BSP_USING_DRAM
menuconfig BSP_USING_FEMC
bool "Enable DRAM"
default y
menuconfig INIT_EXT_RAM_FOR_DATA
@@ -373,6 +377,36 @@ menu "On-chip Peripheral Drivers"
bool "Enable CAN3"
default n
endif
menuconfig BSP_USING_ADC
bool "Enable ADC"
default n
select RT_USING_ADC if BSP_USING_ADC
if BSP_USING_ADC
menuconfig BSP_USING_ADC12
bool "Enable ADC12"
default n
if BSP_USING_ADC12
config BSP_USING_ADC0
bool "Enable ADC0"
default n
config BSP_USING_ADC1
bool "Enable ADC1"
default n
config BSP_USING_ADC2
bool "Enable ADC2"
default n
endif
menuconfig BSP_USING_ADC16
bool "Enable ADC16"
default n
if BSP_USING_ADC16
config BSP_USING_ADC3
bool "Enable ADC3"
default n
endif
endif
endmenu
-1
View File
@@ -10,7 +10,6 @@ src = Split("""
eth_phy_port.c
fal_flash_port.c
hpm_sgtl5000.c
trap_gcc.S
""")
CPPPATH = [cwd]
File diff suppressed because it is too large Load Diff
+81 -16
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -13,6 +13,7 @@
#include "hpm_soc.h"
#include "hpm_soc_feature.h"
#include "pinmux.h"
#include "hpm_lcdc_drv.h"
#define BOARD_NAME "hpm6750evk"
#define BOARD_UF2_SIGNATURE (0x0A4D5048UL)
@@ -50,10 +51,10 @@
#define BOARD_APP_UART_CLK_NAME clock_uart0
#ifndef BOARD_CONSOLE_TYPE
#define BOARD_CONSOLE_TYPE console_type_uart
#define BOARD_CONSOLE_TYPE CONSOLE_TYPE_UART
#endif
#if BOARD_CONSOLE_TYPE == console_type_uart
#if BOARD_CONSOLE_TYPE == CONSOLE_TYPE_UART
#ifndef BOARD_CONSOLE_BASE
#if BOARD_RUNNING_CORE == HPM_CORE0
#define BOARD_CONSOLE_BASE HPM_UART0
@@ -74,8 +75,8 @@
/* sdram section */
#define BOARD_SDRAM_ADDRESS (0x40000000UL)
#define BOARD_SDRAM_SIZE (32*SIZE_1MB)
#define BOARD_SDRAM_CS DRAM_SDRAM_CS0
#define BOARD_SDRAM_PORT_SIZE DRAM_SDRAM_PORT_SIZE_32_BITS
#define BOARD_SDRAM_CS FEMC_SDRAM_CS0
#define BOARD_SDRAM_PORT_SIZE FEMC_SDRAM_PORT_SIZE_32_BITS
#define BOARD_SDRAM_REFRESH_COUNT (8192UL)
#define BOARD_SDRAM_REFRESH_IN_MS (64UL)
#define BOARD_SDRAM_DATA_WIDTH_IN_BYTE (4UL)
@@ -201,11 +202,58 @@
#define BOARD_APP_XPI_NOR_CFG_OPT_OPT1 (0x00001000U)
/* lcd section */
/*
* BOARD_PANEL_TIMING_PARA {HSPW, HBP, HFP, VSPW, VBP, VFP, HSSP, VSSP, DESP, PDSP, PCSP}
*
* HSPW: Horizontal Synchronization Pulse width
* HBP: Horizontal Back Porch
* HFP: Horizontal Front Porch
* VSPW: Vertical Synchronization Pulse width
* VBP: Vertical Back Porch
* VFP: Vertical Front Porch
* HSSP: Horizontal Synchronization Signal Polarity, 0: High Active, 1: Low Active
* VSSP: Vertical Synchronization Signal Polarity, 0: High Active, 1: Low Active
* DESP: Data Enable Signal Polarity, 0: High Active, 1: Low Active
* PDSP: Pixel Data Signal Polarity, 0: High Active, 1: Low Active
* PCSP: Pixel Clock Signal Polarity, 0: High Active, 1: Low Active
*/
#define BOARD_PANEL_TIMEING_PARA_HSPW_INDEX 0
#define BOARD_PANEL_TIMEING_PARA_HBP_INDEX 1
#define BOARD_PANEL_TIMEING_PARA_HFP_INDEX 2
#define BOARD_PANEL_TIMEING_PARA_VSPW_INDEX 3
#define BOARD_PANEL_TIMEING_PARA_VBP_INDEX 4
#define BOARD_PANEL_TIMEING_PARA_VFP_INDEX 5
#define BOARD_PANEL_TIMEING_PARA_HSSP_INDEX 6
#define BOARD_PANEL_TIMEING_PARA_VSSP_INDEX 7
#define BOARD_PANEL_TIMEING_PARA_DESP_INDEX 8
#define BOARD_PANEL_TIMEING_PARA_PDSP_INDEX 9
#define BOARD_PANEL_TIMEING_PARA_PCSP_INDEX 10
#if defined(PANEL_TM070RDH13)
#ifndef BOARD_LCD_WIDTH
#define BOARD_LCD_WIDTH (800)
#define BOARD_LCD_WIDTH 800
#endif
#ifndef BOARD_LCD_HEIGHT
#define BOARD_LCD_HEIGHT (480)
#define BOARD_LCD_HEIGHT 480
#endif
#ifndef BOARD_PANEL_TIMING_PARA
#define BOARD_PANEL_TIMING_PARA {10, 46, 50, 3, 23, 10, 0, 0, 0, 0, 0}
#endif
#else
#ifndef BOARD_LCD_WIDTH
#define BOARD_LCD_WIDTH 800
#endif
#ifndef BOARD_LCD_HEIGHT
#define BOARD_LCD_HEIGHT 480
#endif
#ifndef BOARD_PANEL_TIMING_PARA
#define BOARD_PANEL_TIMING_PARA {10, 46, 50, 3, 23, 10, 0, 0, 0, 0, 0}
#endif
#endif
/* pdma section */
@@ -222,19 +270,33 @@
#define BOARD_ENET0_RST_GPIO HPM_GPIO0
#define BOARD_ENET0_RST_GPIO_INDEX GPIO_DO_GPIOF
#define BOARD_ENET0_RST_GPIO_PIN (0U)
#define BOARD_ENET0_INF enet_inf_rgmii
#define BOARD_ENET0 HPM_ENET0
#define BOARD_ENET0_TX_DLY (0U)
#define BOARD_ENET0_RX_DLY (21U)
#define BOARD_ENET0_PTP_CLOCK (clock_ptp0)
#define BOARD_ENET0_INF (1U) /* 0: RMII, 1: RGMII */
#define BOARD_ENET0_INT_REF_CLK (0U)
#define BOARD_ENET0_PHY_RST_TIME (30)
#if BOARD_ENET0_INF
#define BOARD_ENET0_TX_DLY (0U)
#define BOARD_ENET0_RX_DLY (21U)
#endif
#if __USE_ENET_PTP
#define BOARD_ENET0_PTP_CLOCK (clock_ptp0)
#endif
#define BOARD_ENET1_RST_GPIO HPM_GPIO0
#define BOARD_ENET1_RST_GPIO_INDEX GPIO_DO_GPIOE
#define BOARD_ENET1_RST_GPIO_PIN (26U)
#define BOARD_ENET1_INF enet_inf_rmii
#define BOARD_ENET1 HPM_ENET1
#define BOARD_ENET1_INF (0U) /* 0: RMII, 1: RGMII */
#define BOARD_ENET1_INT_REF_CLK (1U)
#define BOARD_ENET1_PHY_RST_TIME (30)
#if BOARD_ENET1_INF
#define BOARD_ENET1_TX_DLY (0U)
#define BOARD_ENET1_RX_DLY (0U)
#endif
#if __USE_ENET_PTP
#define BOARD_ENET1_PTP_CLOCK (clock_ptp1)
#endif
/* ADC section */
#define BOARD_APP_ADC12_NAME "ADC0"
@@ -429,10 +491,10 @@ void board_init_console(void);
void board_init_uart(UART_Type *ptr);
void board_init_i2c(I2C_Type *ptr);
void board_init_lcd(void);
void board_panel_para_to_lcdc(lcdc_config_t *config);
void board_init_can(CAN_Type *ptr);
uint32_t board_init_dram_clock(void);
uint32_t board_init_femc_clock(void);
void board_init_sdram_pins(void);
void board_init_gpio_pins(void);
@@ -478,6 +540,7 @@ void board_init_sd_pins(SDXC_Type *ptr);
uint32_t board_sd_configure_clock(SDXC_Type *ptr, uint32_t freq);
void board_sd_switch_pins_to_1v8(SDXC_Type *ptr);
bool board_sd_detect_card(SDXC_Type *ptr);
void board_sd_power_switch(SDXC_Type *ptr, bool on_off);
void board_init_adc12_pins(void);
void board_init_adc16_pins(void);
@@ -485,8 +548,10 @@ void board_init_adc16_pins(void);
void board_init_usb_pins(void);
void board_usb_vbus_ctrl(uint8_t usb_index, uint8_t level);
uint8_t board_enet_get_dma_pbl(ENET_Type *ptr);
hpm_stat_t board_init_enet_pins(ENET_Type *ptr);
hpm_stat_t board_reset_enet_phy(ENET_Type *ptr);
hpm_stat_t board_init_enet_pins(ENET_Type *ptr);
hpm_stat_t board_init_enet_rmii_reference_clock(ENET_Type *ptr, bool internal);
hpm_stat_t board_init_enet_ptp_clock(ENET_Type *ptr);
@@ -1 +1,50 @@
riscv expose_csrs 262,774,1984-2005,2015-2017,2048,2057,2059,2060,2500-2505,2509,2511,2513-2516,2528,2531-2534
riscv expose_csrs 262=scounteren
riscv expose_csrs 800=mcountinhibit
riscv expose_csrs 1984=milmb
riscv expose_csrs 1985=mdlmb
riscv expose_csrs 1986=mecc_code
riscv expose_csrs 1987=mnvec
riscv expose_csrs 1988=mxstatus
riscv expose_csrs 1989=mpft_ctl
riscv expose_csrs 1990=mhsp_ctl
riscv expose_csrs 1991=msp_bound
riscv expose_csrs 1992=msp_base
riscv expose_csrs 1993=mdcause
riscv expose_csrs 1994=mcache_ctl
riscv expose_csrs 1995=mcctlbeginaddr
riscv expose_csrs 1996=mcctlcommand
riscv expose_csrs 1997=mcctldata
riscv expose_csrs 1998=mcounterwen
riscv expose_csrs 1999=mcounterinten
riscv expose_csrs 2000=mmisc_ctl
riscv expose_csrs 2001=mcountermask_m
riscv expose_csrs 2002=mcountermask_s
riscv expose_csrs 2003=mcountermask_u
riscv expose_csrs 2004=mcounterovf
riscv expose_csrs 2005=mslideleg
riscv expose_csrs 2015=mclk_ctl
riscv expose_csrs 2016=dexc2dbg
riscv expose_csrs 2017=ddcause
riscv expose_csrs 2048=uitb
riscv expose_csrs 2049=ucode
riscv expose_csrs 2057=udcause
riscv expose_csrs 2059=ucctlbeginaddr
riscv expose_csrs 2060=ucctlcommand
riscv expose_csrs 2500=slie
riscv expose_csrs 2501=slip
riscv expose_csrs 2505=sdcause
riscv expose_csrs 2509=scctldata
riscv expose_csrs 2511=scounterinten
riscv expose_csrs 2513=scountermask_m
riscv expose_csrs 2514=scountermask_s
riscv expose_csrs 2515=scountermask_u
riscv expose_csrs 2516=scounterovf
riscv expose_csrs 2528=scountinhibit
riscv expose_csrs 2531=shpmevent3
riscv expose_csrs 2532=shpmevent4
riscv expose_csrs 2533=shpmevent5
riscv expose_csrs 2534=shpmevent6
riscv expose_csrs 4032=micm_cfg
riscv expose_csrs 4033=mdcm_cfg
riscv expose_csrs 4034=mmsc_cfg
riscv expose_csrs 4035=mmsc_cfg2
@@ -1,5 +1,7 @@
# Copyright 2021 hpmicro
# SPDX-License-Identifier: BSD-3-Clause
#
set _CHIP hpm6750
set _CPUTAPID 0x1000563D
@@ -12,27 +14,48 @@ $_TARGET0 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-are
targets $_TARGET0
set _TARGET1 $_CHIP.cpu1
target create $_TARGET1 riscv -chain-position $_CHIP.cpu -coreid 1
proc dmi_write {reg value} {
$::_TARGET0 riscv dmi_write ${reg} ${value}
}
proc dmi_read {reg} {
set v [$::_TARGET0 riscv dmi_read ${reg}]
return ${v}
}
proc dmi_write_memory {addr value} {
dmi_write 0x39 ${addr}
dmi_write 0x3C ${value}
}
proc dmi_read_memory {addr} {
set sbcs [expr 0x100000 | [dmi_read 0x38]]
dmi_write 0x38 ${sbcs}
dmi_write 0x39 ${addr}
set value [dmi_read 0x3C]
return ${value}
}
proc release_core1 {} {
# set start point for core1
$::_TARGET0 riscv dmi_write 0x39 0xF4002C08
$::_TARGET0 riscv dmi_write 0x3C 0x20016284
dmi_write_memory 0xF4002C08 0x20016284
# set boot flag for core1
$::_TARGET0 riscv dmi_write 0x39 0xF4002C0C
$::_TARGET0 riscv dmi_write 0x3C 0xC1BEF1A9
dmi_write_memory 0xF4002C0C 0xC1BEF1A9
# release core1
$::_TARGET0 riscv dmi_write 0x39 0xF4002C00
$::_TARGET0 riscv dmi_write 0x3C 0x1000
dmi_write_memory 0xF4002C00 0x1000
}
$_TARGET1 configure -event reset-deassert-pre release_core1
$_TARGET1 configure -event examine-start release_core1
$_TARGET1 configure -event examine-end {
$::_TARGET1 arp_examine
$_TARGET0 configure -event examine-end {
release_core1
}
set _TARGET1 $_CHIP.cpu1
target create $_TARGET1 riscv -chain-position $_CHIP.cpu -coreid 1
$_TARGET1 configure -work-area-phys 0x00000000 -work-area-size 0x20000 -work-area-backup 0
$_TARGET1 configure -event reset-deassert-pre {
$::_TARGET1 arp_poll
release_core1
}
$_TARGET1 configure -work-area-phys 0x00000000 -work-area-size 0x04000 -work-area-backup 0
+8 -5
View File
@@ -101,14 +101,14 @@ static rt_phy_status phy_init(void *object, rt_uint32_t phy_addr, rt_uint32_t sr
return PHY_STATUS_OK;
}
static rt_ssize_t phy_read(void *bus, rt_uint32_t addr, rt_uint32_t reg, void *data, rt_uint32_t size)
static rt_size_t phy_read(void *bus, rt_uint32_t addr, rt_uint32_t reg, void *data, rt_uint32_t size)
{
*(uint16_t *)data = enet_read_phy(((struct rt_mdio_bus *)bus)->hw_obj, addr, reg);
return size;
}
static rt_ssize_t phy_write(void *bus, rt_uint32_t addr, rt_uint32_t reg, void *data, rt_uint32_t size)
static rt_size_t phy_write(void *bus, rt_uint32_t addr, rt_uint32_t reg, void *data, rt_uint32_t size)
{
enet_write_phy(((struct rt_mdio_bus *)bus)->hw_obj, addr, reg, *(uint16_t *)data);
@@ -170,13 +170,14 @@ static void phy_poll_status(void *parameter)
{
int ret;
phy_info_t phy_info;
rt_uint32_t status;
rt_bool_t status;
rt_device_t dev;
rt_phy_msg_t msg;
rt_uint32_t speed, duplex;
phy_device_t *phy_dev;
struct eth_device* eth_dev;
char const *ps[] = {"10Mbps", "100Mbps", "1000Mbps"};
enet_line_speed_t line_speed[] = {enet_line_speed_10mbps, enet_line_speed_100mbps, enet_line_speed_1000mbps};
eth_phy_monitor_handle_t *phy_monitor_handle = (eth_phy_monitor_handle_t *)parameter;
@@ -207,6 +208,8 @@ static void phy_poll_status(void *parameter)
{
LOG_I("PHY Speed: %s", ps[phy_dev->phy_info.phy_speed]);
LOG_I("PHY Duplex: %s\n", phy_dev->phy_info.phy_duplex & PHY_FULL_DUPLEX ? "full duplex" : "half duplex");
enet_set_line_speed(phy_monitor_handle->phy_handle[i]->instance, line_speed[phy_dev->phy_info.phy_speed]);
enet_set_duplex_mode(phy_monitor_handle->phy_handle[i]->instance, phy_dev->phy_info.phy_duplex);
}
}
}
@@ -272,7 +275,7 @@ static void phy_monitor_thread_entry(void *args)
int phy_device_register(void)
{
rt_err_t err = -RT_ERROR;
rt_err_t err = RT_ERROR;
rt_thread_t thread_phy_monitor;
/* Set ops for PHY */
@@ -308,7 +311,7 @@ int phy_device_register(void)
}
else
{
err = -RT_ERROR;
err = RT_ERROR;
}
return err;
@@ -156,6 +156,3 @@ typedef struct {
#endif
#endif
+3 -2
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 hpmicro
* Copyright (c) 2022-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -32,7 +32,8 @@ extern struct fal_flash_dev nor_flash0;
{ \
{FAL_PART_MAGIC_WORD, "app", NOR_FLASH_DEV_NAME, 0, 4*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 4*1024*1024, 3*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 7*1024*1024, 9*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 7*1024*1024, 8*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "flashdb", NOR_FLASH_DEV_NAME, 15*1024*1024, 1*1024*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* RT_USING_FAL */
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 hpmicro
* Copyright (c) 2022-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -20,18 +20,19 @@
#if defined(FLASH_XIP) && (FLASH_XIP == 1)
static rt_base_t s_interrupt_level;
#define FAL_ENTER_CRITICAL() do {\
rt_enter_critical();\
disable_irq_from_intc();\
fencei();\
}while(0)
s_interrupt_level = rt_hw_interrupt_disable();\
} while(0)
#define FAL_EXIT_CRITICAL() do {\
ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(BOARD_APP_XPI_NOR_XPI_BASE);\
fencei();\
rt_exit_critical();\
enable_irq_from_intc();\
}while(0)
rt_hw_interrupt_enable(s_interrupt_level);\
} while(0)
#define FAL_RAMFUNC __attribute__((section(".isr_vector")))
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
+48 -15
View File
@@ -1,10 +1,18 @@
/*
* Copyright (c) 2021 hpmicro
* Copyright (c) 2021-2023 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
* Note:
* PY and PZ IOs: if any SOC pin function needs to be routed to these IOs,
* besides of IOC, PIOC/BIOC needs to be configured SOC_GPIO_X_xx, so that
* expected SoC function can be enabled on these IOs.
*
*/
#include "board.h"
void init_uart_pins(UART_Type *ptr)
@@ -12,14 +20,16 @@ void init_uart_pins(UART_Type *ptr)
if (ptr == HPM_UART0) {
HPM_IOC->PAD[IOC_PAD_PY07].FUNC_CTL = IOC_PY07_FUNC_CTL_UART0_RXD;
HPM_IOC->PAD[IOC_PAD_PY06].FUNC_CTL = IOC_PY06_FUNC_CTL_UART0_TXD;
HPM_PIOC->PAD[IOC_PAD_PY07].FUNC_CTL = IOC_PY06_FUNC_CTL_SOC_PY_06;
HPM_PIOC->PAD[IOC_PAD_PY06].FUNC_CTL = IOC_PY07_FUNC_CTL_SOC_PY_07;
/* PY port IO needs to configure PIOC as well */
HPM_PIOC->PAD[IOC_PAD_PY07].FUNC_CTL = IOC_PY07_FUNC_CTL_SOC_PY_07;
HPM_PIOC->PAD[IOC_PAD_PY06].FUNC_CTL = IOC_PY06_FUNC_CTL_SOC_PY_06;
} else if (ptr == HPM_UART2) {
HPM_IOC->PAD[IOC_PAD_PE16].FUNC_CTL = IOC_PE16_FUNC_CTL_UART2_TXD;
HPM_IOC->PAD[IOC_PAD_PE21].FUNC_CTL = IOC_PE21_FUNC_CTL_UART2_RXD;
} else if (ptr == HPM_UART13) {
HPM_IOC->PAD[IOC_PAD_PZ08].FUNC_CTL = IOC_PZ08_FUNC_CTL_UART13_RXD;
HPM_IOC->PAD[IOC_PAD_PZ09].FUNC_CTL = IOC_PZ09_FUNC_CTL_UART13_TXD;
/* PZ port IO needs to configure BIOC as well */
HPM_BIOC->PAD[IOC_PAD_PZ08].FUNC_CTL = IOC_PZ08_FUNC_CTL_SOC_PZ_08;
HPM_BIOC->PAD[IOC_PAD_PZ09].FUNC_CTL = IOC_PZ09_FUNC_CTL_SOC_PZ_09;
}
@@ -83,11 +93,13 @@ void init_i2c_pins_as_gpio(I2C_Type *ptr)
if (ptr == HPM_I2C0) {
/* I2C0 */
HPM_IOC->PAD[IOC_PAD_PZ11].FUNC_CTL = IOC_PZ11_FUNC_CTL_GPIO_Z_11;
HPM_BIOC->PAD[IOC_PAD_PZ11].FUNC_CTL = 3;
HPM_IOC->PAD[IOC_PAD_PZ10].FUNC_CTL = IOC_PZ10_FUNC_CTL_GPIO_Z_10;
/* PZ port IO needs to configure BIOC as well */
HPM_BIOC->PAD[IOC_PAD_PZ11].FUNC_CTL = 3;
HPM_BIOC->PAD[IOC_PAD_PZ10].FUNC_CTL = 3;
} else {
while(1);
while (1) {
}
}
}
@@ -98,12 +110,14 @@ void init_i2c_pins(I2C_Type *ptr)
| IOC_PAD_FUNC_CTL_LOOP_BACK_MASK;
HPM_IOC->PAD[IOC_PAD_PZ10].FUNC_CTL = IOC_PB10_FUNC_CTL_I2C0_SDA
| IOC_PAD_FUNC_CTL_LOOP_BACK_MASK;
/* PZ port IO needs to configure BIOC as well */
HPM_BIOC->PAD[IOC_PAD_PZ11].FUNC_CTL = 3;
HPM_BIOC->PAD[IOC_PAD_PZ10].FUNC_CTL = 3;
HPM_IOC->PAD[IOC_PAD_PZ11].PAD_CTL = IOC_PAD_PAD_CTL_OD_MASK;
HPM_IOC->PAD[IOC_PAD_PZ10].PAD_CTL = IOC_PAD_PAD_CTL_OD_MASK;
} else {
while(1);
while (1) {
}
}
}
@@ -239,16 +253,18 @@ void init_i2s_pins(I2S_Type *ptr)
void init_dao_pins(void)
{
HPM_IOC->PAD[IOC_PAD_PY08].FUNC_CTL = IOC_PY08_FUNC_CTL_DAOR_P;
HPM_PIOC->PAD[IOC_PAD_PY08].FUNC_CTL = IOC_PY08_FUNC_CTL_SOC_PY_08;
HPM_IOC->PAD[IOC_PAD_PY09].FUNC_CTL = IOC_PY09_FUNC_CTL_DAOR_N;
/* PY port IO needs to configure PIOC */
HPM_PIOC->PAD[IOC_PAD_PY08].FUNC_CTL = IOC_PY08_FUNC_CTL_SOC_PY_08;
HPM_PIOC->PAD[IOC_PAD_PY09].FUNC_CTL = IOC_PY09_FUNC_CTL_SOC_PY_09;
}
void init_pdm_pins(void)
{
HPM_IOC->PAD[IOC_PAD_PY10].FUNC_CTL = IOC_PY10_FUNC_CTL_PDM0_CLK;
HPM_PIOC->PAD[IOC_PAD_PY10].FUNC_CTL = IOC_PY10_FUNC_CTL_SOC_PY_10;
HPM_IOC->PAD[IOC_PAD_PY11].FUNC_CTL = IOC_PY11_FUNC_CTL_PDM0_D_0;
/* PY port IO needs to configure PIOC */
HPM_PIOC->PAD[IOC_PAD_PY10].FUNC_CTL = IOC_PY10_FUNC_CTL_SOC_PY_10;
HPM_PIOC->PAD[IOC_PAD_PY11].FUNC_CTL = IOC_PY11_FUNC_CTL_SOC_PY_11;
}
@@ -260,10 +276,10 @@ void init_vad_pins(void)
void init_cam_pins(void)
{
#ifdef CAMREA_RESET_PWDN_CONFIGURABLE
HPM_IOC->PAD[IOC_PAD_PX08].FUNC_CTL = IOC_PX08_FUNC_CTL_GPIO_X_08;
HPM_IOC->PAD[IOC_PAD_PX09].FUNC_CTL = IOC_PX09_FUNC_CTL_GPIO_X_09;
#endif
/* configure rst pin function */
HPM_IOC->PAD[IOC_PAD_PY05].FUNC_CTL = IOC_PY05_FUNC_CTL_GPIO_Y_05;
/* PY port IO needs to configure PIOC */
HPM_PIOC->PAD[IOC_PAD_PY05].FUNC_CTL = IOC_PY05_FUNC_CTL_SOC_PY_05;
HPM_IOC->PAD[IOC_PAD_PA10].FUNC_CTL = IOC_PA10_FUNC_CTL_CAM0_XCLK;
HPM_IOC->PAD[IOC_PAD_PA11].FUNC_CTL = IOC_PA11_FUNC_CTL_CAM0_PIXCLK;
@@ -401,9 +417,9 @@ void init_can_pins(CAN_Type *ptr)
}
}
void init_sdxc_pins(SDXC_Type * ptr, bool use_1v8)
void init_sdxc_pins(SDXC_Type *ptr, bool use_1v8)
{
uint32_t cmd_func_ctl = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(17) | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1);;
uint32_t cmd_func_ctl = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(17) | IOC_PAD_FUNC_CTL_LOOP_BACK_SET(1);
uint32_t func_ctl = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(17);
uint32_t pad_ctl = IOC_PAD_PAD_CTL_MS_SET(use_1v8) | IOC_PAD_PAD_CTL_DS_SET(7) | IOC_PAD_PAD_CTL_PE_SET(1) |
IOC_PAD_PAD_CTL_PS_SET(1);
@@ -435,10 +451,27 @@ void init_sdxc_pins(SDXC_Type * ptr, bool use_1v8)
HPM_IOC->PAD[IOC_PAD_PD15].FUNC_CTL = IOC_PD15_FUNC_CTL_GPIO_D_15;
HPM_IOC->PAD[IOC_PAD_PD15].PAD_CTL = pad_ctl;
HPM_GPIO0->OE[GPIO_OE_GPIOD].CLEAR = 1UL << BOARD_APP_SDCARD_CDN_GPIO_PIN;
}
}
void init_sdxc_power_pin(SDXC_Type *ptr)
{
/* Not supported by current board */
}
void init_sdxc_vsel_pin(SDXC_Type *ptr)
{
/* Not suppored by current board */
}
void init_sdxc_card_detection_pin(SDXC_Type *ptr)
{
/* CDN */
HPM_IOC->PAD[IOC_PAD_PD15].FUNC_CTL = IOC_PD15_FUNC_CTL_GPIO_D_15;
HPM_IOC->PAD[IOC_PAD_PD15].PAD_CTL = IOC_PAD_PAD_CTL_DS_SET(7) | IOC_PAD_PAD_CTL_PE_SET(1) |
IOC_PAD_PAD_CTL_PS_SET(1);
HPM_GPIO0->OE[GPIO_OE_GPIOD].CLEAR = 1UL << BOARD_APP_SDCARD_CDN_GPIO_PIN;
}
void init_clk_obs_pins(void)
{
HPM_IOC->PAD[IOC_PAD_PB02].FUNC_CTL = IOC_PB02_FUNC_CTL_SYSCTL_CLK_OBS_0;

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