RISCV_BSP_MOUNRIVER使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 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使用参考