目录
前言
up主的联系方式:
微信公众号:嵌入式up
大家好!大家点点关注,大家的关注才是我持续更新的动力!
一、什么是外部中断?
1.外部中断:单片机实时地处理外部事件的一种内部机制。
LS1B0200 处理器的中断可以分为软中断(软中断 0 和软中断 1)、外设中断(INT0,INT1, INT2 和 INT3 四个中断控制总线)、Mips 性能中断和 Mips 计数中断四类。INT0,INT1,INT2 和 INT3 四个中断控制总线连接到 CPU,其中 INT0 和 INT1 负责内部 64 个中断源,INT2 和 INT3 负责外部 61 个 GPIO 中断源。没有中断优先级,中断控制器结构如图 所示。
所有中断寄存器的位域排列顺序相同,一个中断源对应其中一位,LS1B0200 处理器的 中断控制器内外中断源位域排列顺序如表 5-1 所示。注意:没有 GPIO31 引脚,所以没有 GPIO31 中断源
龙芯中断控制器详细资料下载链接:
二、外部中断程序开发步骤
1.步骤
1.安装项目向导,新建项目工程
2.在建好的工程里的main.c文件中添加ls1b_gpio.h并调用gpio_enable函数初始化GPIO
3.调用ls1x_disable_gpio_interrupt()函数使能GPIO
4.调用ls1x_install_gpio_isr()函数配置中断
5.建立中断回调函数
6.调用ls1x_disable_gpio_interrupt()函数使能中断
2.函数介绍
GPIO中断API函数介绍:
附按键图:
3.外部中断代码
#include <stdio.h>
#include "ls1b.h"
#include "mips.h"
//-------------------------------------------------------------------------------------------------
// BSP
//-------------------------------------------------------------------------------------------------
#include "bsp.h"
#include "ls1b_gpio.h"
#include "stdbool.h"
//-------------------------------------------------------------------------------------------------
// 主程序
//-------------------------------------------------------------------------------------------------
bool falg = false;
void gpio_interrput_isr(int vector, void *param)
{
falg = !falg;
if(falg) gpio_write(55, 0);
else pio_write(55, 1);
}
int main(void)
{
printk("\r\nmain() function.\r\n");
gpio_enable(55,DIR_OUT);
ls1x_disable_gpio_interrupt(0);
ls1x_install_gpio_isr(0,INT_TRIG_EDGE_UP,gpio_interrput_isr,NULL);//上升沿触发 gpio 中断
ls1x_enable_gpio_interrupt(0);
/*
* 裸机主循环
*/
for (;;)
{
}
return 0;
}
/*
* @@ End
*/
总结
源码链接:(1条消息) 龙芯1B:中断使用例程-嵌入式文档类资源-CSDN文库
中断文档链接:(2条消息) 龙芯1B中断控制器详细资料-嵌入式文档类资源-CSDN文库
(2条消息) 龙芯1B:中断详细说明-嵌入式文档类资源-CSDN文库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73685.html