RISCV_BSP_MOUNRIVER使用参考
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 05/06/2023 |
1. 概述¶
RISCV开发环境基于MounRiver Studio,请参考RISCV开发环境使用指南安装开发环境和SDK模板
2. GPIO使用¶
2.1. 配置¶
Sysdecs配置:
使用gpio可通过sysdecs配置gpio padmux,如下将PAD_SAR_ADC_16-19配置成gpio mode
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_SAR_ADC_16 PINMUX_FOR_GPIO_MODE MDRV_PUSE_NA,
PAD_SAR_ADC_17 PINMUX_FOR_GPIO_MODE MDRV_PUSE_NA,
PAD_SAR_ADC_18 PINMUX_FOR_GPIO_MODE MDRV_PUSE_NA,
PAD_SAR_ADC_19 PINMUX_FOR_GPIO_MODE MDRV_PUSE_NA;
[status_u8] 1;
2.2. 测试demo使用¶
1)打开gpio测试demo宏定义:__VER_GPIO__

2)测试demo路径
sc/driver/sysdriver/gpio/drv/pub/drv_gpio.h
sc/driver/sysdriver/gpio/drv/src/gpio_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
pin脚名称与对应的gpioNum在sc/driver/sysdriver/gpio/hal/pioneer5/pub/gpio.h中可查看
gpio output [gpioNum] [level] //设置gpio输出高低电平 [gpioNum]:gpio号,0-185 [level]:输出电平,0:低电平;1:高电平 gpio input/get [gpioNum] //设置gpio输入,打印电平 [gpioNum]:gpio号,0-185 gpio toggle [gpioNum] //反转gpio电平 [gpioNum]:gpio号,0-185 gpio state [gpioNum] //获取单个gpio输入输出状态 [gpioNum]:gpio号,0-185 gpio list [num_of_pins] //获取一定数量gpio输入输出状态 [num_of_pins]:gpio数量,0-185 gpio isr [gpioNum] [edge] //使能gpio中断 [gpioNum]:gpio号,0-185 [edge]:gpio中断类型,0:下降沿;1:上升沿;2:双边沿;3:低电平;4:高电平; gpio isrfree [gpioNum] //关闭gpio中断 [gpioNum]:gpio号,0-185
2.3. GPIO开发¶
参考RISCV_GPIO使用参考
3. ADC使用¶
3.1. 配置¶
Sysdecs配置:
使用adc需要通过sysdecs配置打开pwm_out节点和配置padmux,如下配置PAD_SAR_ADC_1-9为adc mode1:
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<pwm_out>
[reg_u32] 0x2203600, 0x2200E00;
[interrupts_u8] INT_FIQ_ADC_FIQ;
[clkfrequency_u32] 12000000;
[camclk_u16] CAMCLK_pwm_adc;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_SAR_ADC_1 PINMUX_FOR_ADC1_MODE_1 MDRV_PUSE_PWMADC1,
PAD_SAR_ADC_2 PINMUX_FOR_ADC2_MODE_1 MDRV_PUSE_PWMADC2,
PAD_SAR_ADC_3 PINMUX_FOR_ADC3_MODE_1 MDRV_PUSE_PWMADC3,
PAD_SAR_ADC_4 PINMUX_FOR_ADC4_MODE_1 MDRV_PUSE_PWMADC4,
PAD_SAR_ADC_5 PINMUX_FOR_ADC5_MODE_1 MDRV_PUSE_PWMADC5,
PAD_SAR_ADC_6 PINMUX_FOR_ADC6_MODE_1 MDRV_PUSE_PWMADC6,
PAD_SAR_ADC_7 PINMUX_FOR_ADC7_MODE_1 MDRV_PUSE_PWMADC7,
PAD_SAR_ADC_8 PINMUX_FOR_ADC8_MODE_1 MDRV_PUSE_PWMADC8,
PAD_SAR_ADC_9 PINMUX_FOR_ADC9_MODE_1 MDRV_PUSE_PWMADC9;
[status_u8] 1;
3.2. 测试demo使用¶
1)adc测试demo默认打开,不用配置宏
2)测试demo路径
sc/driver/sysdriver/pwm/drv/pub/drv_pwm_out.h
sc/driver/sysdriver/pwm/drv/src/drv_pwm_out_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
pwm_adc [ch_sel] [trimode] [trimethod] [conmode_sel] [enable] //使能adc采样 [ch_sel]:采样通道, 0:Inject Channel采样;1:Regular Channel采样 [trimode]:采样触发模式, 0-11:PWM_PN触发;12:SW触发;13:外部触发;14:freerun; [trimethod]:trigger method, 0:conversion(采样一个channel);1:sequence(采样一整个序列) [conmode_sel]:采样模式, 0:Single mode;1:Continuous mode [enable]:是否使能, 0:停止;1:使能 pwm_adc [adc_channel_id] //获取adc采样值 adc_channel_id:adc采样通道, 0-22
3.3. ADC开发¶
参考RISCV_ADC使用参考
4. PWM out/in使用¶
4.1. 配置¶
Sysdecs配置:
使用pwm需要通过sysdecs配置打开对应pwmX节点, 配置padmux, 如下配置为pwm out7-19为mode1
使用pwm out需要通过sysdecs配置打开pwm out节点, 配置padmux, 如下配置为pwm out0-3为3组互补波形
使用pwm in需要通过sysdecs配置打开对应pwm_in节点, 配置padmux, 如下配置pwm in0-1为mode3, pwm in3-5 为mode2
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<pwm7>
[reg_u32_u16] 0x2203200 0x37;
[group_u32] 0;
[camclk_u16] CAMCLK_pwm;
[clk_level_u8] 0;
[interrupts_u32] INT_IRQ_PWM;
[status_u8] 1;
…
<pwm19>
[reg_u32_u16] 0x2203280 0x37;
[group_u32] 0;
[camclk_u16] CAMCLK_pwm;
[clk_level_u8] 0;
[interrupts_u32] INT_IRQ_PWM;
[status_u8] 1;
<pwm_out>
[reg_u32] 0x2203600, 0x2200E00;
[interrupts_u8] INT_FIQ_ADC_FIQ;
[clkfrequency_u32] 12000000;
[camclk_u16] CAMCLK_pwm_adc;
[status_u8] 1;
<pwm_in>
[reg_u32] 0x2201A00;
[interrupts_u8] INT_IRQ_PWM_CAPTURE;
[clkfrequency_u32] 12000000;
[camclk_u16] CAMCLK_pwm_capture;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_PWM_OUT0 PINMUX_FOR_PWM0_PN_1 MDRV_PUSE_PWMOUT0_P,
PAD_PWM_OUT1 PINMUX_FOR_PWM0_PN_1 MDRV_PUSE_PWMOUT0_N,
PAD_PWM_OUT2 PINMUX_FOR_PWM1_PN_1 MDRV_PUSE_PWMOUT1_P,
PAD_PWM_OUT3 PINMUX_FOR_PWM1_PN_1 MDRV_PUSE_PWMOUT1_N,
PAD_PWM_OUT4 PINMUX_FOR_PWM2_PN_1 MDRV_PUSE_PWMOUT2_P,
PAD_PWM_OUT5 PINMUX_FOR_PWM2_PN_1 MDRV_PUSE_PWMOUT2_N,
PAD_PWM_OUT7 PINMUX_FOR_PWM_OUT7_MODE_1 MDRV_PUSE_PWM7,
PAD_PWM_OUT8 PINMUX_FOR_PWM_OUT8_MODE_1 MDRV_PUSE_PWM8,
PAD_PWM_OUT9 PINMUX_FOR_PWM_OUT9_MODE_1 MDRV_PUSE_PWM9,
PAD_PWM_OUT10 PINMUX_FOR_PWM_OUT10_MODE_1 MDRV_PUSE_PWM10,
PAD_PWM_OUT11 PINMUX_FOR_PWM_OUT11_MODE_1 MDRV_PUSE_PWM11,
PAD_SAR_ADC_0 PINMUX_FOR_PWM_OUT12_MODE_1 MDRV_PUSE_PWM12,
PAD_RGMII0_RXD1 PINMUX_FOR_PWM_OUT13_MODE_3 MDRV_PUSE_PWM13,
PAD_RGMII0_RXD2 PINMUX_FOR_PWM_OUT14_MODE_3 MDRV_PUSE_PWM14,
PAD_RGMII0_RXD3 PINMUX_FOR_PWM_OUT15_MODE_3 MDRV_PUSE_PWM15,
PAD_RGMII0_TXCLK PINMUX_FOR_PWM_OUT16_MODE_3 MDRV_PUSE_PWM16,
PAD_RGMII0_TXCTL PINMUX_FOR_PWM_OUT17_MODE_3 MDRV_PUSE_PWM17,
PAD_RGMII0_TXD0 PINMUX_FOR_PWM_OUT18_MODE_3 MDRV_PUSE_PWM18,
PAD_RGMII0_TXD1 PINMUX_FOR_PWM_OUT19_MODE_3 MDRV_PUSE_PWM19,
PAD_I2C5_SCL PINMUX_FOR_PWM_IN0_MODE_3 MDRV_PUSE_PWM0,
PAD_I2C5_SDA PINMUX_FOR_PWM_IN1_MODE_3 MDRV_PUSE_PWM1,
PAD_OUTN_TX1_CH_3 PINMUX_FOR_PWM_IN3_MODE_2 MDRV_PUSE_PWM3,
PAD_RGMII0_RXCLK PINMUX_FOR_PWM_IN4_MODE_2 MDRV_PUSE_PWM4,
PAD_RGMII0_RXCTL PINMUX_FOR_PWM_IN5_MODE_2 MDRV_PUSE_PWM5;
[status_u8] 1;
4.2. 测试demo使用¶
1)pwm out/in测试demo默认打开,不用配置宏
2)测试demo路径
pwm:
sc/driver/sysdriver/pwm/drv/pub/drv_pwm.h
sc/driver/sysdriver/pwm/drv/pub/drv_pwm_out.h
sc/driver/sysdriver/pwm/drv/src/drv_pwm_test.c
pwm out:
sc/driver/sysdriver/pwm/drv/pub/drv_pwm.h
sc/driver/sysdriver/pwm/drv/pub/drv_pwm_out.h
sc/driver/sysdriver/pwm/drv/src/drv_pwm_out_test.c
pwm in:
sc/driver/sysdriver/pwm/drv/pub/drv_pwm.h
sc/driver/sysdriver/pwm/drv/pub/drv_pwm_in.h
sc/driver/sysdriver/pwm/drv/src/drv_pwm_in_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
pwm: pwm channel [channel_id] [period] [shift] [duty] [polarity] //设置pwm输出参数 [channel_id]:pwm通道, 0-19 [period]:pwm周期, 普通精度时单位Hz,高精度时单位ns [shift]:pwm移位, 普通精度时单位%,高精度时单位ns [duty]:pwm占空比, 普通精度时单位%,高精度时单位ns [polarity]:pwm波形极性 pwm channel [channel_id] [enable] //使能pwm输出 [channel_id]: pwm通道, 0-19 [enable]: 是否使能, 0:停止;1:使能 pwm_out: pwm_out [PWMIndex] [pddt_len] [nddt_len] [p_en] [n_en] //配置pwm互补波形死区参数 [PWMIndex]:pwm out通道 [pddt_len]:p极死区长度, 单位ns [nddt_len]:n极死区长度, 单位ns [p_en]:使能p极死区波形,0:停止;1:使能 [n_en]:使能n极死区波形,0:停止;1:使能 pwm_out [PWMIndex] [mo_sel] [Idle sta] //配置pwm互补波形刹车功能 [PWMIndex]:pwm out通道 [mo_sel]:pwm out刹车触发方式, 0:only sw触发;1:sw&hw触发 [Idle sta]:p和n级刹车后电平状态, 0:低电平;1:高电平 pwm_out [PWMIndex] [out_en] //使能pwm互补波形 [PWMIndex]:pwm out通道 [out_en]:是否使能, 0:停止;1:使能 pwm_in: pwm_in [pwm_id] [Capture Enable] [Reset Mode] [det_mode] [timer_div] [pul_div] [edge_sel] //设置pwm in参数 [pwm_id]: pwm in通道, 0-7 [Capture Enable]:使能pwm in捕获, 0:停止;1:使能 [Reset Mode]:使能reset功能, 0:停止;1:使能 [det_mode]:使能detect功能, 0:停止;1:使能 [timer_div]:时钟除频数, 除频数越小误差越小 [pul_div]:第2^k个脉冲后开始捕获边沿, 0-3 [edge_sel]:捕获的边沿类型, 0:下边沿;1:上边沿;2:双边沿 pwm_in [pwm_id] //获取pwm输入信息 [pwm_id]: pwm in通道, 0-7
4.3. PWM开发¶
参考RISCV_PWM使用参考和RISCV_PWMOUT&PWMIN使用参考
5. I2C使用¶
5.1. 配置¶
Sysdecs配置:
使用i2c需要通过sysdecs配置打开对应i2cmX节点, 配置padmux, 如下配置为i2c4为mode2:
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<i2cm4>
[reg_u32_u16] 0x2223000 0x200;
[interrupts_u8] INT_IRQ_MIIC_0;
[pushen_u8] 1;
[padmux_u8] 0;
[dma_u8] 0;
[camclk_u16] CAMCLK_miic4;
[oencnt_u8] 0;
[speed_u32] 200000;
[thd_u16] 0;
[tsu_u16] 0;
[start_u16] 0;
[stop_u16] 0;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_PWM_OUT11 PINMUX_FOR_I2C4_MODE_2 MDRV_PUSE_I2C4_SCL,
PAD_PWM_OUT10 PINMUX_FOR_I2C4_MODE_2 MDRV_PUSE_I2C4_SDA;
[status_u8] 1;
5.2. 测试demo使用¶
1)打开i2c测试demo宏定义__VER_I2C__

2)测试demo路径
sc/driver/sysdriver/i2c/drv/pub/drv_iic.h
sc/driver/sysdriver/i2c/drv/src/drv_iic_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
i2c [r/w] [port] [slave] [format] <data...> //i2c读写 [r/w]:读或写 [port]:i2c通道 [slave]:从地址 [format]:i2c数据格式 <data...>:i2c数据
5.3. I2C开发¶
参考RISCV_I2C使用参考
6. IR使用¶
6.1. 配置¶
Sysdecs配置:
使用ir需要通过sysdecs配置打开对应irX节点, 配置padmux, 如下配置为ir0为mode1:
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<ir0>
[reg_u32_u16] 0x2007A00 0x200;
[mode_u32] 1;
[camclk_u32] CAMCLK_ir;
[interrupts_u32_u32] INT_FIQ_IR INT_FIQ_IR_RC;
[header_code_u32_u32] 0x00 0xFF;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_PM_IR_RX PINMUX_FOR_IR_IN_MODE_1 MDRV_PUSE_IR;
[status_u8] 1;
6.2. 测试demo使用¶
1)打开ir测试demo宏定义__VER_IR__

2)测试demo路径
sc/driver/sysdriver/ir/drv/pub/drv_ir.h
sc/driver/sysdriver/ir/drv/src/drv_ir_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
ir [ir_channel] //使能ir并等待获取ir键值 [ir_channel]:ir通道
6.3. IR开发¶
参考RISCV_IR使用参考
7. MSPI使用¶
7.1. 配置¶
Sysdecs配置:
使用mspi需要通过sysdecs配置打开mspiX节点,配置padmux,如下配置为mspi1为mode1:
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<mspi1>
[reg_u32_u16] 0x2222200 0x200;
[interrupts_u8] INT_IRQ_MSPI_1;
[camclk_u16] CAMCLK_mspi1;
[dma_u8] 0;
[cs_num_u8] 2;
[cs_ext_u32] PAD_UNKNOWN;
[pad_mux_u16] 0;
[4to3_mode_u8] 0;
[clk_out_mode_u32] 0;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_SAR_ADC_4 PINMUX_FOR_SPI1_MODE_1 MDRV_PUSE_SPI1_CZ,
PAD_SAR_ADC_5 PINMUX_FOR_SPI1_MODE_1 MDRV_PUSE_SPI1_CK,
PAD_SAR_ADC_6 PINMUX_FOR_SPI1_MODE_1 MDRV_PUSE_SPI1_DI,
PAD_SAR_ADC_7 PINMUX_FOR_SPI1_MODE_1 MDRV_PUSE_SPI1_DO;
[status_u8] 1;
7.2. 测试demo使用¶
1)打开mspi测试demo宏定义__VER_MSPI__

2)测试demo路径
sc/driver/sysdriver/mspi/drv/pub/drv_mspi.h
sc/driver/sysdriver/mspi/drv/src/drv_mspi_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
spi [r/e/w] [port] [cs] [speed] //spi读/写/擦除 [r/e/w]:读/写/擦除 [port]:mspi通道 [cs]:片选 [speed]:通讯速率
7.3. SPI开发¶
参考RISCV_SPI使用参考
8. UART使用¶
8.1. 配置¶
Sysdecs配置:
使用uart需要通过sysdecs配置打开uartX节点, 配置padmux, 如下配置为uart1为mode1:
sc\driver\sysdriver\sysdesc\hal\pioneer5\pub\pioneer5-default.sys:
<uart1>
[reg_u32] 0x2221200, 0x2221C00;
[interrupts_u32] INT_IRQ_FUART_1, INT_IRQ_UARTDMA_1;
[camclk_u16] CAMCLK_fuart1;
[dma_u8] 1;
[status_u8] 1;
<padmux>
[schematic_u32_u32_u32]
PAD_PM_GPIO0 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_RX,
PAD_PM_GPIO1 PINMUX_FOR_PM_UART1_MODE_1 MDRV_PUSE_PM_UART_TX,
PAD_UART_RX1 PINMUX_FOR_UART1_MODE_1 MDRV_PUSE_UART1_RX,
PAD_UART_TX1 PINMUX_FOR_UART1_MODE_1 MDRV_PUSE_UART1_TX;
[status_u8] 1;
8.2. 测试demo使用¶
1)uart测试demo默认打开,不用配置宏
2)测试demo路径
sc/driver/sysdriver/uart/drv/pub/drv_uart.h
sc/driver/sysdriver/uart/drv/src/drv_uart_test.c
3)测试指令
按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:
uart [uartID] [rtscts] //uart读写 [uartID]:uart通道, 1:uart1;2:uart2;3:uart3;4:uart4;5:fuart [rtscts]:流控使能, 仅fuart时设置
8.3. UART开发¶
参考RISCV_UART使用参考