RISCV_BSP_MOUNRIVER使用参考


1. 概述

RISCV开发环境基于MounRiver Studio,请参考RISCV开发环境使用指南安装开发环境和SDK模板

2. GPIO使用

2.1. 配置

Sysdecs配置:

使用gpio可通过sysdecs配置gpio padmux,如下将PAD_PWM_OUT00-01配置成gpio mode

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<padmux>
    [schematic_u32_u32_u32]
        PAD_UART0_RX PINMUX_FOR_PM_FUART_MODE_3 MDRV_PUSE_PM_UART_RX,
        PAD_UART0_TX PINMUX_FOR_PM_FUART_MODE_3 MDRV_PUSE_PM_UART_TX,
        PAD_PWM_OUT00 PINMUX_FOR_GPIO_MODE MDRV_PUSE_NA,
        PAD_PWM_OUT01 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/pcupid/pub/gpio.h中可查看

gpio output [gpioNum] [level] //设置gpio输出高低电平
[gpioNum]:gpio号,0-142
[level]:输出电平,0:低电平;1:高电平

gpio input/get [gpioNum] //设置gpio输入,打印电平
[gpioNum]:gpio号,0-142

gpio toggle [gpioNum] //反转gpio电平
[gpioNum]:gpio号,0-142

gpio state [gpioNum] //获取单个gpio输入输出状态
[gpioNum]:gpio号,0-142

gpio list [num_of_pins] //获取一定数量gpio输入输出状态
[num_of_pins]:gpio数量,0-142

gpio isr [gpioNum] [edge] //使能gpio中断
[gpioNum]:gpio号,0-142
[edge]:gpio中断类型,0:下降沿;1:上升沿;2:双边沿;3:低电平;4:高电平;

gpio isrfree [gpioNum] //关闭gpio中断
[gpioNum]:gpio号,0-142

2.3. GPIO开发

参考RISCV_GPIO使用参考

3. ADC使用

3.1. ADCLP(10bit)

3.1.1.Sysdecs配置

使用adclp需要通过sysdecs配置打开adclp节点(无需配置padmux),以adclp0举例,将status_u8改为1

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<adclp0>
    [reg_u32] 0x2002800;
    [interrupts_u32] INT_PM_IRQ_SAR_KP;
    [camclk_u16] CAMCLK_sar;
    [interrupts_en_u8] 1;
    [ref_vol_u32] 1800;
    [upper_bound_u16] 0x3FF;
    [lower_bound_u16] 0;
    [status_u8] 1;

3.1.2. 测试demo使用

1)打开adclp测试demo宏定义:__VER_ADCLP__

2)测试demo路径

sc/driver/sysdriver/saradc/drv/pub/drv_adclp.h

sc/driver/sysdriver/saradc/drv/src/drv_adclp_test.c

3)测试指令

按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:

adclp init [channel] //初始化指定的adclp通道
[channel] :采样通道, 可选0~4

adclp single [channel] //获取指定通道的采样结果
[channel] :采样通道, 可选0~4

adclp scan //获取全部通道的采样结果

3.2. ADCMP(12bit)

3.2.1.Sysdecs配置

使用adcmp需要通过sysdecs配置打开adcmp节点以及配置padmux,以adcmp0举例,将status_u8改为1

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<adcmp0>
    [reg_u32] 0x200AC00, 0x200AE00, 0x2003C00, 0x2204600;
    [interrupts_u32] INT_PM_FIQ_ADCMP;
    [camclk_u16] CAMCLK_pm_pwm_adc;
    [dma_en_u8] 0;
    [dma_count_u32] 50;
    [clk_level_u8] 0;
    [ref_vol_u32] 1800;
    [regular_ch_u8] 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11;
    [inject_ch_u8] 12, 13, 14, 15, 16, 17, 18, 19, 20, 21;
    [external_res_u32] 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    [upper_bound_u16] 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
                    0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF;
    [lower_bound_u16] 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        PAD_SAR_ADC0_00  PINMUX_FOR_PMADC0_MODE_1 MDRV_PUSE_PWMADC0,
        PAD_SAR_ADC0_01 PINMUX_FOR_PMADC1_MODE_1 MDRV_PUSE_PWMADC1,
        PAD_SAR_ADC0_02 PINMUX_FOR_PMADC2_MODE_1 MDRV_PUSE_PWMADC2,
        PAD_SAR_ADC0_03  PINMUX_FOR_PMADC3_MODE_1 MDRV_PUSE_PWMADC3,
        PAD_SAR_ADC0_04 PINMUX_FOR_PMADC4_MODE_1 MDRV_PUSE_PWMADC4,
        PAD_SAR_ADC0_05  PINMUX_FOR_PMADC5_MODE_1 MDRV_PUSE_PWMADC5,
        PAD_SAR_ADC0_06  PINMUX_FOR_PMADC6_MODE_1 MDRV_PUSE_PWMADC6,
        PAD_SAR_ADC0_07  PINMUX_FOR_PMADC7_MODE_1 MDRV_PUSE_PWMADC7,
        PAD_SAR_ADC0_08 PINMUX_FOR_PMADC8_MODE_1 MDRV_PUSE_PWMADC8,
        PAD_SAR_ADC0_09  PINMUX_FOR_PMADC9_MODE_1 MDRV_PUSE_PWMADC9,
        PAD_SAR_ADC0_10 PINMUX_FOR_PMADC10_MODE_1 MDRV_PUSE_PWMADC10,
        PAD_SAR_ADC0_11  PINMUX_FOR_PMADC11_MODE_1 MDRV_PUSE_PWMADC11,
        PAD_SAR_ADC0_12 PINMUX_FOR_PMADC12_MODE_1 MDRV_PUSE_PWMADC12,
        PAD_SAR_ADC0_13  PINMUX_FOR_PMADC13_MODE_1 MDRV_PUSE_PWMADC13,
        PAD_SAR_ADC0_14  PINMUX_FOR_PMADC14_MODE_1 MDRV_PUSE_PWMADC14,
        PAD_PM_GPIO0   PINMUX_FOR_PMADC15_MODE_1 MDRV_PUSE_PWMADC15,
        PAD_PM_GPIO1     PINMUX_FOR_PMADC16_MODE_1 MDRV_PUSE_PWMADC16,
        PAD_PM_GPIO2     PINMUX_FOR_PMADC17_MODE_1 MDRV_PUSE_PWMADC17,
        PAD_PM_GPIO3     PINMUX_FOR_PMADC18_MODE_1 MDRV_PUSE_PWMADC18,
        PAD_PM_GPIO6      PINMUX_FOR_PMADC19_MODE_1 MDRV_PUSE_PWMADC19,
        PAD_PM_ADC00_IN PINMUX_FOR_PMADC20_MODE_1 MDRV_PUSE_PWMADC20,
        PAD_PM_GPIO7     PINMUX_FOR_PMADC21_MODE_1 MDRV_PUSE_PWMADC21,
        PAD_PM_PWM0_OUT    PINMUX_FOR_PM_ADC_INT_MODE_2 MDRV_PUSE_PMPWMADC_INT;
    [status_u8] 1;

3.2.2. 测试demo使用

1)打开adclp测试demo宏定义:__VER_ADCMP__

2)测试demo路径

sc/driver/sysdriver/saradc/drv/pub/drv_adcmp.h

sc/driver/sysdriver/saradc/drv/src/drv_adcmp_test.c

3)测试指令

按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:

adcmp single [group] [channel] [regular mode] [inject mode] //使能adcmp采样
[group]:指定group,可选0~1
[channel]:指定通道,group=0时channel可选0~22,group=1时channel可选0~1
[regular mode]:指定regular通道序列的采样模式,0-11:PWM_PN触发,12:SW触发,13:外部触发,14:freerun
[inject mode]:指定inject通道序列的采样模式,0-11:PWM_PN触发,12:SW触发,13:外部触发

adcmp scan [group] [regular mode] [inject mode]//获取对应group全部通道的采样结果
[group]:指定group,可选0~1
[regular mode]:指定regular通道序列的采样模式,0-11:PWM_PN触发,12:SW触发,13:外部触发,14:freerun
[inject mode]:指定inject通道序列的采样模式,0-11:PWM_PN触发,12:SW触发,13:外部触发

3.3. ADC开发

参考RISCV_ADCLP/RISCV_ADCMP使用参考

4. PWM使用

4.1.Sysdecs配置

使用pwm功能需要通过sysdecs配置打开对应pwmX节点, 并配置pwm相关padmux,以pwm0举例

使用dead time功能需要通过sysdecs配置打开pwm12~17节点, 并配置deadtime相关padmux,以pwm12举例

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<pwm0>
    [reg_u32_u16] 0x2203200 0x40;
    [interrupts_u32] INT_IRQ_PWM_GROUP0;
    [camclk_u16] CAMCLK_pwm;
    [group_u32] 0;
    [spwm_group_u32] 0xFFFF;
    [clk_level_u8] 0;
    [status_u8] 1;

......

<pwm12>
    [reg_u32_u16] 0x2205600 0x40;
    [interrupts_u32] INT_IRQ_PWM_GROUP3;
    [camclk_u16] CAMCLK_pwm;
    [group_u32] 3;
    [spwm_group_u32] 0xFFFF;
    [clk_level_u8] 0;
    [ddt_reg_u32] 0x2203600;
    [idle_status_u8] 0, 0;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        //pwm padmux
        PAD_GPIOC_00   PINMUX_FOR_PWM0_MODE_1    MDRV_PUSE_PWM0,
        PAD_GPIOC_01   PINMUX_FOR_PWM1_MODE_1    MDRV_PUSE_PWM1,
        PAD_GPIOC_02   PINMUX_FOR_PWM2_MODE_1    MDRV_PUSE_PWM2,
        PAD_GPIOC_03   PINMUX_FOR_PWM3_MODE_1    MDRV_PUSE_PWM3,
        PAD_GPIOC_04   PINMUX_FOR_PWM4_MODE_1    MDRV_PUSE_PWM4,
        PAD_GPIOC_05   PINMUX_FOR_PWM5_MODE_1    MDRV_PUSE_PWM5,
        PAD_GPIOC_06   PINMUX_FOR_PWM6_MODE_1    MDRV_PUSE_PWM6,
        PAD_GPIOC_07   PINMUX_FOR_PWM7_MODE_1    MDRV_PUSE_PWM7,
        PAD_GPIOC_08   PINMUX_FOR_PWM8_MODE_1    MDRV_PUSE_PWM8,
        PAD_OUTP_CH0   PINMUX_FOR_PWM9_MODE_1    MDRV_PUSE_PWM9,
        PAD_GPIOA_00   PINMUX_FOR_PWM10_MODE_2   MDRV_PUSE_PWM10,
        PAD_GPIOA_01   PINMUX_FOR_PWM11_MODE_2   MDRV_PUSE_PWM11,
        PAD_GPIOA_02   PINMUX_FOR_PWM12_MODE_2   MDRV_PUSE_PWM12,
        PAD_GPIOA_03   PINMUX_FOR_PWM13_MODE_2   MDRV_PUSE_PWM13,
        PAD_GPIOA_04   PINMUX_FOR_PWM14_MODE_2   MDRV_PUSE_PWM14,
        PAD_GPIOA_05   PINMUX_FOR_PWM15_MODE_2   MDRV_PUSE_PWM15,
        PAD_GPIOA_06   PINMUX_FOR_PWM16_MODE_2   MDRV_PUSE_PWM16,
        PAD_GPIOA_07   PINMUX_FOR_PWM17_MODE_2   MDRV_PUSE_PWM17,
        PAD_PM_I2C_SDA PINMUX_FOR_PM_PWM0_MODE_2 MDRV_PUSE_PWM18,
        PAD_PM_I2C_SCL PINMUX_FOR_PM_PWM1_MODE_2 MDRV_PUSE_PWM19,

        //dead time padmux
        PAD_GPIOE_17 PINMUX_FOR_PWM_COMP0_MODE_1 MDRV_PUSE_PWMOUT0_P,
        PAD_GPIOE_18 PINMUX_FOR_PWM_COMP0_MODE_1 MDRV_PUSE_PWMOUT0_N,
        PAD_GPIOE_23 PINMUX_FOR_PWM_COMP1_MODE_1 MDRV_PUSE_PWMOUT1_P,
        PAD_GPIOE_24 PINMUX_FOR_PWM_COMP1_MODE_1 MDRV_PUSE_PWMOUT1_N,
        PAD_GPIOA_00 PINMUX_FOR_PWM_COMP2_MODE_1 MDRV_PUSE_PWMOUT2_P,
        PAD_GPIOA_01 PINMUX_FOR_PWM_COMP2_MODE_1 MDRV_PUSE_PWMOUT2_N,
        PAD_GPIOA_08 PINMUX_FOR_PWM_COMP3_MODE_2 MDRV_PUSE_PWMOUT3_P,
        PAD_GPIOA_09 PINMUX_FOR_PWM_COMP3_MODE_2 MDRV_PUSE_PWMOUT3_N,
        PAD_EMMC_RST PINMUX_FOR_PWM_COMP4_MODE_1 MDRV_PUSE_PWMOUT4_P,
        PAD_EMMC_CLK PINMUX_FOR_PWM_COMP4_MODE_1 MDRV_PUSE_PWMOUT4_N,
        PAD_EMMC_D0  PINMUX_FOR_PWM_COMP5_MODE_1 MDRV_PUSE_PWMOUT5_P,
        PAD_EMMC_D5  PINMUX_FOR_PWM_COMP5_MODE_1 MDRV_PUSE_PWMOUT5_N;
    [status_u8] 1;

4.2. 测试demo使用

1)打开pwm测试demo宏定义:__VER_PWM__

2)测试demo路径

sc/driver/sysdriver/pwm/drv/pub/drv_pwm.h

sc/driver/sysdriver/pwm/drv/src/drv_pwm_test.c

3)测试指令

按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:

//pwm channel配置
pwm <channel> [channel_id] [period] [shift] [duty] [polarity] // 设定pwm指定通道的周期、占空比和极性
[channel_id]:指定pwm通道,可选0~19
[period]:设置pwm周期,高精度模式下以ns为单位,低精度模式下以hz为单位
[shift]:设置pwm相位偏移,高精度模式下以ns为单位,低精度模式下以hz为单位
[duty]:设置pwm占空比,实际占空比=duty-shift,高精度模式下以ns为单位,低精度模式下以hz为单位
[polarity]:设定pwm极性,0:normal,1:invert

pwm <channel> [channel_id] [enable] //使能pwm
[channel_id]:指定pwm通道,可选0~19
[enable]:1:enable,0:disable

//pwm group配置
pwm <group> [group_id] [period] [shift] [duty] [polarity] // 设定group内所有pwm通道的周期、占空比和极性
[group_id]:指定group,可选0~3
[period]:设置group内所有pwm通道的周期,高精度模式下以ns为单位,低精度模式下以hz为单位
[shift]:设置group内所有pwm通道的相位偏移,高精度模式下以ns为单位,低精度模式下以hz为单位
[duty]:设置group内所有pwm通道的占空比,实际占空比=duty-shift,高精度模式下以ns为单位,低精度模式下以hz为单位
[polarity]:设定group内所有pwm通道的极性,0:normal,1:invert

pwm <update> [group_id] //将group的配置更新到寄存器中
[group_id]:指定group,可选0~3

pwm <group> [group_id] [enable] //使能group内所有pwm
[group_id]:指定group,可选0~3
[enable]:1:enable,0:disable

//pwm group的stop、round功能
pwm <stop> [group_id] [stop_en] //急停功能
[group_id]:指定group,可选0~3
[enable]:1:enable,波形停止;0:disable,波形恢复

pwm <round> [group_id] [round_num] //指定输出pwm的脉冲数
[group_id]:指定group,可选0~3
[round_num]:脉冲数量

//dead time
pwm <ddt> [channel_id] [p_ddt] [n_ddt] //设定死区时间
[channel_id]:指定pwm通道,可选12~17
[p_ddt]:设置pwm通道分出正向波形的死区时间,以ns为单位
[n_ddt]:设置pwm通道分出反向波形的死区时间,以ns为单位

pwm <ddt> [channel_id] [enable]
[channel_id]:指定pwm通道,可选12~17
[enable]:1:enable,0:disable

4.3. PWM开发

参考RISCV_PWM使用参考

5. I2C使用

5.1.Sysdecs配置

使用i2c需要通过sysdecs配置打开对应i2cX节点, 并配置padmux, 如下配置为i2c0举例:

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pocupid-default.sys:

<i2c0>
    [reg_u32_u16] 0x2222800 0x200;
    [interrupts_u8] INT_IRQ_MIIC;
    [camclk_u16] CAMCLK_miic0;
    [dma_u8] 1;
    [output_mode_u8] 2;
    [speed_u32] 200000;
    [t_hd_sto_u16] 0;
    [t_su_sta_u16] 0;
    [t_hd_sta_u16] 0;
    [t_su_sto_u16] 0;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        PAD_GPIOE_00 PINMUX_FOR_I2C0_MODE_1 MDRV_PUSE_I2C0_SCL,
        PAD_GPIOE_01 PINMUX_FOR_I2C0_MODE_1 MDRV_PUSE_I2C0_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...> <speed> //i2c读写
[r/w]:读或写
[port]:i2c通道
[slave]:从地址
[format]:i2c数据格式
<data...>:i2c数据
<speed>:i2c读写速度

5.3. I2C开发

参考RISCV_I2C使用参考

6. IR使用

6.1. Sysdecs配置

使用ir需要通过sysdecs配置打开对应irX节点, 并配置padmux, 以ir0为例:

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<ir0>
    [reg_u32_u16] 0x22CE200 0x200;
    [interrupts_u32_u32] INT_FIQ_IR_1 0xFFFF;
    [camclk_u32] CAMCLK_ir_nonpm0;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        PAD_GPIOC_00 PINMUX_FOR_IR0_IN_MODE_1 MDRV_PUSE_IR,
        PAD_GPIOC_01 PINMUX_FOR_IR1_IN_MODE_1 MDRV_PUSE_IR1,
        PAD_GPIOC_02 PINMUX_FOR_IR2_IN_MODE_1 MDRV_PUSE_IR2,
        PAD_GPIOC_03 PINMUX_FOR_IR3_IN_MODE_1 MDRV_PUSE_IR3,
        PAD_PM_GPIO2 PINMUX_FOR_PM_IR_IN_MODE_1 MDRV_PUSE_IR4;
    [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 [group] [decode_mode] [customer code(16bit)]//使能IR接收信号并解码
[group]:指定group,可选0~4
[decode_mode]:解码模式,1:full,2:raw,3:rc5
[customer code(16bit)]:自定义16bit解码

6.3. IR开发

参考RISCV_IR使用参考

7. MSPI使用

7.1. 配置

Sysdecs配置:

使用mspi需要通过sysdecs配置打开mspiX节点,配置padmux,以mspi0 mode1为例:

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<mspi0>
    [reg_u32_u16] 0x2222000 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_GPIOE_14   PINMUX_FOR_MSPI0_MODE_1    MDRV_PUSE_SPI0_CK,
        PAD_GPIOE_15   PINMUX_FOR_MSPI0_MODE_1    MDRV_PUSE_SPI0_CZ,
        PAD_GPIOE_16   PINMUX_FOR_MSPI0_MODE_1    MDRV_PUSE_SPI0_DI,
        PAD_GPIOE_17   PINMUX_FOR_MSPI0_MODE_1    MDRV_PUSE_SPI0_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, 以fuart mode2为例:

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<fuart>
    [reg_u32] 0x2220400, 0x2220600;
    [interrupts_u32] INT_IRQ_FUART,
                    INT_IRQ_UART_MERGE,
                    INT_IRQ_UART_MERGE;
    [camclk_u16] CAMCLK_fuart;
    [pad_u16] 2;
    [sctpen_u8] 0;
    [dma_u8] 0;
    [digmux_u8] 1;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        PAD_GPIOC_02    PINMUX_FOR_FUART_MODE_2    MDRV_PUSE_FUART_RX,
        PAD_GPIOC_03    PINMUX_FOR_FUART_MODE_2    MDRV_PUSE_FUART_TX,
        PAD_GPIOC_04    PINMUX_FOR_FUART_MODE_2    MDRV_PUSE_FUART_CTS,
        PAD_GPIOC_05    PINMUX_FOR_FUART_MODE_2    MDRV_PUSE_FUART_RTS;
    [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] //uart读写
[uartID]:uart通道, uart0~uart8加上fuart和pm_uart

8.3. UART开发

参考RISCV_UART使用参考

9. Capture使用

9.1.Sysdecs配置

使用capture功能需要通过sysdecs配置打开对应captureX节点, 并配置capture相关padmux,以capture0举例

sc\driver\sysdriver\sysdesc\hal\pcupid\pub\pcupid-default.sys:

<capture0>
    [reg_u32] 0x22CE000;
    [interrupts_u32] INT_IRQ_CAPTURE;
    [camclk_u16] CAMCLK_pwm_capture;
    [channel_u8] 0, 1;
    [pulse_cal_mode_u8] 0;
    [pulse_cal_chan_u8] 0;
    [deglitch_u32] 0;
    [status_u8] 1;

<padmux>
    [schematic_u32_u32_u32]
        PAD_OUTP_CH0   PINMUX_FOR_PWMIN0_MODE_1 MDRV_PUSE_PWMIN0,
        PAD_OUTN_CH0   PINMUX_FOR_PWMIN1_MODE_1 MDRV_PUSE_PWMIN1,
        PAD_OUTP_CH1   PINMUX_FOR_PWMIN2_MODE_1 MDRV_PUSE_PWMIN2,
        PAD_OUTN_CH1   PINMUX_FOR_PWMIN3_MODE_1 MDRV_PUSE_PWMIN3,
        PAD_OUTP_CH2   PINMUX_FOR_PWMIN4_MODE_1 MDRV_PUSE_PWMIN4,
        PAD_OUTN_CH2   PINMUX_FOR_PWMIN5_MODE_1 MDRV_PUSE_PWMIN5,
        PAD_OUTP_CH3   PINMUX_FOR_PWMIN6_MODE_1 MDRV_PUSE_PWMIN6,
        PAD_OUTN_CH3   PINMUX_FOR_PWMIN7_MODE_1 MDRV_PUSE_PWMIN7,
        PAD_GPIOE_10   PINMUX_FOR_PWMIN8_MODE_3 MDRV_PUSE_PWMIN8,
        PAD_GPIOD_00   PINMUX_FOR_PWMIN9_MODE_2 MDRV_PUSE_PWMIN9,
        PAD_GPIOE_14   PINMUX_FOR_PWMIN10_MODE_3 MDRV_PUSE_PWMIN10,
        PAD_GPIOE_16   PINMUX_FOR_PWMIN11_MODE_3 MDRV_PUSE_PWMIN11;
    [status_u8] 1;

9.2. 测试demo使用

1)打开pwm测试demo宏定义:__VER_CAPTURE__

2)测试demo路径

sc/driver/sysdriver/capture/drv/pub/drv_capture.h

sc/driver/sysdriver/capture/drv/src/drv_capture_test.c

3)测试指令

按如上配置后编译烧入riscv固件, 连接riscv串口可使用如下命令行进行测试:

 capture <config> [group] [channel] [edge] [enable] //设定capture指定group和channel的边沿捕获方式并使能
[group] 指定capture的group,可选0~7
[channel]:指定capture通道,group0可选0~1,group1可选2~3,group2可选4~5,group3可选6~7,group4可选8,group5可选9,group6可选10,group7可选11

capture <period> [group] [channel] //捕获pwm周期的频率和占空比
[group] 指定capture的group,可选0~7
[channel]:指定capture通道,group0可选0~1,group1可选2~3,group2可选4~5,group3可选6~7,group4可选8,group5可选9,group6可选10,group7可选11

capture <pulse> [group] [channel] //捕获脉冲数量
[group] 指定capture的group,可选0~7
[channel]:指定capture通道,group0可选0~1,group1可选2~3,group2可选4~5,group3可选6~7,group4可选8,group5可选9,group6可选10,group7可选11

9.3. Capture开发

参考RISCV_Capture使用参考