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使用参考