k210 高速gpio与中断【转】



  • k210 高速gpio与中断
    高速gpio拥有更快的反转能力,并且一共有32个io,足够我们使用。

    K210外部中断
    可以将任意的外部中断分配到cpu中。

    代码

    include “fpioa.h”
    include “gpiohs.h”
    include “sysctl.h”
    include
    include
    int irq_flag= 1;
    / clang-format off /
    
    define PIN_LED 12
    define PIN_KEY 14
    / clang-format on /
    
    void irq_gpiohs2(void gp) {
    irq_flag= gpiohs_get_pin(2); / 进入中断后读取KEY值 */
    
    printf("IRQ The PIN is %d\n", irq_flag);
    
    if (irq_flag) /* 设置LED状态 */
        gpiohs_set_pin(3, GPIO_PV_LOW);
    else
        gpiohs_set_pin(3, GPIO_PV_HIGH);
    }
    
    int main(void) {
    plic_init(); / 初始化中断 /
    sysctl_enable_irq(); / 使能系统中断 /
    
    fpioa_set_function(PIN_LED, FUNC_GPIOHS3); /* LED映射高速GPIO3 */
    gpiohs_set_drive_mode(3, GPIO_DM_OUTPUT);  /* 设置GPIOHS3 输出 */
    gpio_pin_value_t value= GPIO_PV_HIGH;      /* 初始化GPIO状态 */
    gpiohs_set_pin(3, value);                  /* GPIO状态设置 */
    
    fpioa_set_function(PIN_KEY, FUNC_GPIOHS2); /* KEY映射GPIOHS2 */
    gpiohs_set_drive_mode(2, GPIO_DM_INPUT);   /* 设置GPIOHS2 输入 */
    gpiohs_set_pin_edge(2, GPIO_PE_BOTH);      /* 设置双沿触发 */
    gpiohs_set_irq(2, 1, irq_gpiohs2); /* 设置回调函数,优先级1 */
    
    while (1) {
        sleep(1);
        if (irq_flag) { gpiohs_set_pin(3, value= !value); }
        int val= gpiohs_get_pin(2); /* 正常状态读取KEY值 */
        printf("The PIN is %d\n", val);
    }
    return 0;
    }
    
    

Log in to reply
 

10
Online

985
Users

583
Topics

2.3k
Posts