收到开发板你有一个多星期了,由于年底了突然忙了起来,不过还是抽空学习Riscv 。
对于这个全新的 MCU,还是很惊喜的,他的开发环境 和传统的Keil不一样,传统mcu产商会
提供一堆历程,而先辑半导体提供的是一个sdk,再通过Cmake工具生成具体的历程。
1. 安装编译器:
推荐使用segger的 Embedded Studio, 此编译器不叫破解,需要发邮件申请一个license就可以使用了。
SEGGER EmbeddedStudio的激活码申请方式: SEGGER Embedded Studio License Activation
填入你的姓名、邮箱、MAC地址等信息,就可以收到激活码了:
或下面的链接。

2。 安装好驱动:默认USB 插上电脑后,能显示2个串口,这是不对的,调试器还没识别,需要安装驱动。
驱动在 SDK的tools 目录下:
C:\RisV\HPM6750EVKMINI\gitee\tools
安装好如图所示:
76455018ed4f4fddbc9565c0ad945ac9.jpg

3. 接下来可以常识sdk中的历程:
image.png
这里先选择一个sample,再生成Project。

最后,用Embedded Studio打开,就可以编译和仿真了。


代码如下:
1. 按键中断初始化:
void test_gpio_input_interrupt(void)
  • {
  •     gpio_interrupt_trigger_t trigger;
  •     printf("input interrupt\n");
  • #ifdef BOARD_LED_GPIO_CTRL
  •     printf("user led will be switched on off based on user switch\n");
  •     gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX,
  •                            BOARD_LED_GPIO_PIN);
  • #endif
  •     gpio_set_pin_input(BOARD_APP_GPIO_CTRL, BOARD_APP_GPIO_INDEX,
  •                            BOARD_APP_GPIO_PIN);
  •     trigger = gpio_interrupt_trigger_edge_falling;
  •     gpio_config_pin_interrupt(BOARD_APP_GPIO_CTRL, BOARD_APP_GPIO_INDEX,
  •                            BOARD_APP_GPIO_PIN, trigger);
  •     gpio_enable_pin_interrupt(BOARD_APP_GPIO_CTRL, BOARD_APP_GPIO_INDEX,
  •                            BOARD_APP_GPIO_PIN);
  •     intc_m_enable_irq_with_priority(BOARD_APP_GPIO_IRQ, 1);
  •     while(1) {
  •         __asm("wfi");
  •     }
  • }
  • 复制代码

    LED 初始化:
    void test_gpio_toggle_output(void)
  • {
  •     printf("toggling led %u times in total\n", GPIO_TOGGLE_COUNT);
  •     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);
  •     for (uint32_t i = 0; i < GPIO_TOGGLE_COUNT; i++) {
  •         gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX,
  •                             BOARD_LED_GPIO_PIN);
  •         board_delay_ms(500);
  •         gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX,
  •                             BOARD_LED_GPIO_PIN);
  •         board_delay_ms(500);
  •         printf("toggling led %u/%u times\n", i + 1, GPIO_TOGGLE_COUNT);
  •     }
  • }
  • 复制代码
    编写GPIO中断服务函数:
    void isr_gpio(void)
  • {
  •     gpio_clear_pin_interrupt_flag(BOARD_APP_GPIO_CTRL, BOARD_APP_GPIO_INDEX,
  •                         BOARD_APP_GPIO_PIN);
  • #ifdef BOARD_LED_GPIO_CTRL
  •     gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX,
  •                           BOARD_LED_GPIO_PIN);
  •     printf("toggle led pin output\n");
  • #else
  •     printf("user key pressed\n");
  • #endif
  • }
  • 复制代码


    点击全速运行:
    image.png
    按住F10 可以单步运行。
    实验结果:
    按下User按键后,LED会闪烁一次。