6005|3

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

复旦微FM33LC046N评测+外部中断 [复制链接]

 

一、概述

    1、FM33LC0XX 的 4 组 GPIO(A~D)最多可以产生 16 个 EXTI 中断,每组 GPIO 分别可以产生 4 个EXTI 中断标志

    2、EXTI还可以配置输入信号的有效边沿,支持上升沿、下降沿、上升下降沿触发中断,或者禁止EXTI中断触发,由EXTI_EDS寄存器配置。

二、外部中断引脚配置

三、EXTI信号输入示意图

四、软件操作步骤 

如需在 Sleep/DeepSleep 模式下启动 EXTI 中断唤醒功能,推荐按照如下步骤进行操作:

    1、关闭所有 EXTI 使能
    2、配置 SYSCLKSEL 寄存器(0x0x4000020C)的 EXTICKSEL 位为 1,选择 LSCLK 进行 EXTI采样
    3、根据需要打开或关闭 EXTI 数字滤波使能
    4、配置相应 GPIO 为输入
    5、配置 EXTI_SEL 寄存器选择对应的 IO
    6、置位 OPCCON1.EXTICKE,打开 EXTI 工作时钟使能
    7、等待至少 4 个 LSCLK 周期
    8、配置 EXTI_EDS 触发边沿选择,使能所需的 EXTI 中断


正常进入 Sleep 模式芯片上电后默认关闭所有 EXTI,同时默认的引脚中断采样时钟是系统时钟 APBCLK。如果用户使用系统时钟产生 EXTI,推荐流程如下:
    1、打开数字滤波使能(如果需要)
    2、配置 GPIO 为输入
    3、置位 OPCCON1.EXTICKE,打开 EXTI 工作时钟使能
    4、等待至少 4 个 APBCLK 周期
    5、配置 EXTI_EDS 触发边沿选择,使能所需的 EXTI 中断如果希望使用低速的 LSCLK 来产生 EXTI,推荐流程如下:
    6、将 EXTI 采样时钟配置为 LSCLK
    7、打开数字滤波使能(如果需要)
    8、配置 GPIO 为输入
    9、置位 OPCCON1.EXTICKE,打开 EXTI 采样时钟使能
    10、等待至少 4 个 LSCLK 时钟周期
    11、配置 EXTI_EDS 触发边沿,使能所需的 EXTI 中断

 

程序:

1、GPIO初始化及配置EXTI相关寄存器

void GPIO_interrupt_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};    
    //用到的GPIO引脚    设为输入 
    GPIO_InitStruct.pin        = FL_GPIO_PIN_6;
    GPIO_InitStruct.mode       = FL_GPIO_MODE_INPUT;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull       = DISABLE;
    GPIO_InitStruct.remapPin   = DISABLE;	
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

	  //引脚边沿触发选择
    FL_RCC_EnableEXTIOnSleep();//休眠使能外部中断采样
    FL_RCC_EnableGroup1OperationClock(FL_RCC_GROUP1_OPCLK_EXTI);//EXTI工作时钟使能    
    FL_GPIO_SetTriggerEdge(GPIO,FL_GPIO_EXTI_LINE_9,FL_GPIO_EXTI_TRIGGER_EDGE_DISABLE);//关闭边沿触发
    //每条LINE 只能选一个引脚 
    FL_GPIO_SetExtiLine9(GPIO,FL_GPIO_EXTI_LINE_9_PC6);//中断引脚选择
    FL_GPIO_EnableDigitalFilter(GPIO, FL_GPIO_EXTI_LINE_9);//EXTI数字滤波功能
    FL_GPIO_SetTriggerEdge(GPIO,FL_GPIO_EXTI_LINE_9,FL_GPIO_EXTI_TRIGGER_EDGE_RISING);//边沿选择    
    FL_GPIO_ClearFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9);	//清除中断标志
    
    /*NVIC中断配置*/
    NVIC_DisableIRQ(GPIO_IRQn);
    NVIC_SetPriority(GPIO_IRQn,1);//中断优先级配置
    NVIC_EnableIRQ(GPIO_IRQn);
}

2、中断服务函数

void GPIO_IRQHandler()
{  
    if(FL_GPIO_IsActiveFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9))
    {
        FL_GPIO_ClearFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9);		
		printf("触发 PC6 EXTI9 外部中断");
    }
}

 

 

 

 

 

 

 

 

 

最新回复

写份很详细,感谢分享   详情 回复 发表于 2021-3-14 21:55

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

EXTI_EDS 触发边沿选择的推荐流程是什么,介绍一下

 
 
 

回复

1942

帖子

2

TA的资源

版主

板凳
 

感谢分享!期待后续测评!

 
 
 

回复

1411

帖子

3

TA的资源

版主

4
 

写份很详细,感谢分享

个人签名

没有什么不可以,我就是我,不一样的烟火! 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表