RISC-V_DG32VF103-EXTI 外部中断

EXTI 通过按键实现。

中断服务函数在 RISCV - env_Eclipse - start.S 中,

key.c

#include "key.h"
#include "gd32vf103.h"
#include "gd32vf103_libopt.h"


// ************************************************************************************************************** //
//KEY按键初始化
void KEY_Init()
{
	rcu_periph_clock_enable(KEY0_CLK); //开启GPIOA时钟
	gpio_init(KEY0_PORT, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, KEY0_PIN); //下拉输入,50MHz
}
// ************************************************************************************************************** //
//KEY扫描
uint8_t KEY_Scan()
{
	static uint8_t Flag = 1;

	if(Flag == 1 && (KEY0 == 1 || KEY1 == 1) ) //上下拉的按键需要有不同的判断 =1 或 =0
	{
		Flag = 0;
		delay_1ms(5);
		     if(KEY0 == 1) {return 1;}
		else if(KEY1 == 1) {return 2;}
	}
	else if(KEY0 == 0 && KEY1 == 0) {Flag = 1;}

	return 0;
}
// ************************************************************************************************************** //
//KEY EXTI初始化
void EXTI_Init()
{
	rcu_periph_clock_enable(KEY0_CLK); //开启GPIOA时钟
	rcu_periph_clock_enable(RCU_AF);   //开启复用时钟

	gpio_init(KEY0_PORT, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, KEY0_PIN); //下拉输入,50MHz
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0); //连接按键中断线到按键引脚  PA0
	exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_RISING); //配置按键外部中断线
	eclic_irq_enable(EXTI0_IRQn, 1, 1); //使能外部按键中断线

	exti_interrupt_flag_clear(EXTI_0);
}
// ************************************************************************************************************** //
//EXTI0 中断服务函数
void EXTI0_IRQHandler(void)
{
	if (exti_interrupt_flag_get(EXTI_0) != RESET)
	{
		exti_interrupt_flag_clear(EXTI_0);
		LED0_T;
	}
}

key.h

#ifndef  __KEY_H__
#define  __KEY_H__
#include "gd32vf103.h"
#include "systick.h"
#include "led.h"



// ************************************************************************************************************** //
#define  KEY0_CLK   RCU_GPIOA
#define  KEY0_PORT  GPIOA
#define  KEY0_PIN   GPIO_PIN_0
#define  KEY0       gpio_input_bit_get(KEY0_PORT,KEY0_PIN)

#define  KEY1_CLK   RCU_GPIOA  //若有两个以上按键,更改引脚使用
#define  KEY1_PORT  GPIOA
#define  KEY1_PIN   GPIO_PIN_0
#define  KEY1       gpio_input_bit_get(KEY1_PORT,KEY1_PIN)

// ************************************************************************************************************** //
void KEY_Init(void);
uint8_t KEY_Scan(void);
void EXTI_Init(void);
void EXTI0_IRQHandler(void);


#endif

main.c

#include "gd32vf103.h"
#include "gd32vf103c_start.h"
#include "systick.h"
#include "led.h"
#include "key.h"


// ************************************************************************************************************* //
//主函数
int main(void)
{
	uint8_t key = 0;

	eclic_global_interrupt_enable();
	eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);

	LED_Init(); //LED灯初始化
	//KEY_Init(); //KEY按键初始化
	EXTI_Init(); //按键中断配置
    while(1); //等待
}

个人见解,感谢阅读。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rt-thread是一个轻量级的实时操作系统,并且它可以被移植到不同的处理器架构上,包括RISC-V。移植rt-thread到RISC-V处理器需要进行一些步骤。 首先,需要根据RISC-V处理器的体系结构和指令集特性,进行rt-thread的适配和修改。这可能涉及到整理处理器的文件和寄存器初始化的代码,以匹配RISC-V的特性。 其次,需要编写RISC-V处理器对应的启动代码,这些代码的目的是初始化处理器并设置一些必需的环境变量,例如堆栈指针和中断向量表。 接下来,需要实现RISC-V处理器的硬件抽象层(HAL),包括时钟管理、中断管理、内存管理和设备驱动等。这些代码将负责处理处理器底层的硬件操作和通信。 然后,根据目标RISC-V处理器的内存映射和外设配置,进行rt-thread的内核配置和编译。这包括选择所需的组件、功能和驱动器,并进行相应的配置。 最后,在RISC-V处理器上运行rt-thread,并进行测试和调试。这可能包括验证系统的稳定性、性能和功能。如果有必要,还可以进行性能优化和问题修复。 通过以上步骤,就可以成功地将rt-thread移植到RISC-V处理器上,并实现在该处理器上运行实时操作系统的功能。这样可以为RISC-V处理器提供更多的应用和开发选择。 ### 回答2: rt-thread是一个开源的实时操作系统,支持多种硬件平台。而RISC-V是一种基于开源指令集架构的处理器架构。要将rt-thread移植到RISC-V平台,需要进行以下步骤: 1. 首先,需要了解RISC-V处理器的初步知识,包括其指令集、寄存器、内存架构等等。这样才能更好地理解RISC-V的工作方式和特性。 2. 接下来,需要根据RISC-V处理器的特点,对rt-thread进行修改和适配。这包括对内核的调度器、中断处理、任务管理等进行适配,以使其能够在RISC-V平台上正常工作。 3. 在适配过程中,需要根据RISC-V的指令集架构,对rt-thread的汇编代码进行修改。这涉及到对寄存器、堆栈、内存访问等方面的调整,以确保rt-thread能够在RISC-V上正确运行。 4. 还需要根据RISC-V平台的硬件特性,对rt-thread的设备驱动进行适配。这包括对串口、GPIO、定时器等外设的驱动程序进行修改,以使其能够与RISC-V平台上的硬件相匹配。 5. 最后,进行一系列的测试和验证,确保rt-thread在RISC-V平台上的正常运行。这包括对实时性、稳定性、性能等方面进行测试,以验证移植的正确性和可靠性。 综上所述,rt-thread移植到RISC-V平台需要对rt-thread进行修改和适配,同时还需要对汇编代码和设备驱动程序进行调整。最终需要进行测试和验证,以确保rt-thread在RISC-V平台上的正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值