[MCU] 【RISC-V MCU CH32V103测评】外部中断控制波形输出

单片大白菜   2021-2-8 11:06 楼主

仔细看外部中断的手册资料。

 

  • void EXTI0_INT_INIT(void)
  • {
  •   GPIO_InitTypeDef  GPIO_InitStructure;
  •         EXTI_InitTypeDef EXTI_InitStructure;
  •         NVIC_InitTypeDef NVIC_InitStructure;
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •    /* GPIOA ----> EXTI_Line0 */
  •   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
  •   EXTI_InitStructure.EXTI_Line=EXTI_Line0;
  •   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  •   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  •   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  •   EXTI_Init(&EXTI_InitStructure);
  •         NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  •   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  •   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  •   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  •   NVIC_Init(&NVIC_InitStructure);
  • }
  •  

首先定义三个结构,

  •   GPIO_InitTypeDef  GPIO_InitStructure;//GPIO数据结构
  •   EXTI_InitTypeDef EXTI_InitStructure;//外部事件中断结构
  •   NVIC_InitTypeDef NVIC_InitStructure;//中断管理器结构

本实验初始化步骤

1、GPIO定义为输入模式

2、EXIT管理器的EXTI_Line0号中断探测器定义为下降沿触发,并打开该功能,且允许中断。将EXTI_Line0和GPIO_PinSource0链接。

    不着急,到这里还不能中断呢!这只是把线和中断探测器链接上(这里比较模糊的是GPIO_PinSource0这个参数,这是具体的一根引脚吗?

3、初始化中断优先级管理器NVIC,将中断源EXTI0_IRQn启动,主优先级设置为1,次优先级为2。

  好了这就可以启动中断了。接下来就是编写中断服务程序了

4、中断服务程序。这个需要在ch32v10x_it.c这个文件中编写,虽然不是必须在此,但是这里比较好管理。

  • void EXTI0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
  • /*******************************************************************************
  • * Function Name  : EXTI0_IRQHandler
  • * Description    : This function handles EXTI0 Handler.
  • * Input          : None
  • * Return         : None
  • *******************************************************************************/
  • void EXTI0_IRQHandler(void)
  • {
  •   if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
  •   {
  •     printf("Run at EXTI\r\n");
  •     EXTI_ClearITPendingBit(EXTI_Line0);     /* Clear Flag */
  •   }
  • }
  •  

image.png

然后连接信号发生模块,信号发生器采用的是SPI接口的ADI的芯片。

 

640.gif 640 (2).gif 640 (1).gif

 

 

 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复