Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
358612c8
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
358612c8
编写于
7月 20, 2017
作者:
勤
勤为本
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
支持GPIO中断(外部中断)
上级
d1bb7c61
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
119 addition
and
7 deletion
+119
-7
bsp/ls1cdev/libraries/ls1c_gpio.c
bsp/ls1cdev/libraries/ls1c_gpio.c
+59
-0
bsp/ls1cdev/libraries/ls1c_gpio.h
bsp/ls1cdev/libraries/ls1c_gpio.h
+20
-0
bsp/ls1cdev/libraries/ls1c_regs.h
bsp/ls1cdev/libraries/ls1c_regs.h
+35
-7
libcpu/mips/loongson_1c/ls1c.h
libcpu/mips/loongson_1c/ls1c.h
+5
-0
未找到文件。
bsp/ls1cdev/libraries/ls1c_gpio.c
浏览文件 @
358612c8
...
...
@@ -204,4 +204,63 @@ unsigned int gpio_get(unsigned int gpio)
}
/**
* 设置中断类型
* @gpio gpio引脚
* @type 触发中断的条件。高电平触发、低电平触发、上升沿触发 or 下降沿触发
*/
void
gpio_set_irq_type
(
unsigned
int
gpio
,
gpio_irq_type_t
type
)
{
volatile
unsigned
int
*
int_pol
;
// 中断极性选择寄存器
volatile
unsigned
int
*
int_edge
;
// 中断边沿选择寄存器
unsigned
int
port
=
GPIO_GET_PORT
(
gpio
);
unsigned
int
pin
=
GPIO_GET_PIN
(
gpio
);
// 获取寄存器地址
switch
(
port
)
{
case
0
:
// GPIO[31:0]
int_pol
=
(
volatile
unsigned
int
*
)
LS1C_INT2_POL
;
int_edge
=
(
volatile
unsigned
int
*
)
LS1C_INT2_EDGE
;
break
;
case
1
:
// GPIO[63:32]
int_pol
=
(
volatile
unsigned
int
*
)
LS1C_INT3_POL
;
int_edge
=
(
volatile
unsigned
int
*
)
LS1C_INT3_EDGE
;
break
;
case
2
:
// GPIO[95:64]
int_pol
=
(
volatile
unsigned
int
*
)
LS1C_INT4_POL
;
int_edge
=
(
volatile
unsigned
int
*
)
LS1C_INT4_EDGE
;
break
;
}
// 设置中断类型
switch
(
type
)
{
case
IRQ_TYPE_EDGE_RISING
:
*
int_pol
|=
(
1
<<
pin
);
*
int_edge
|=
(
1
<<
pin
);
break
;
case
IRQ_TYPE_EDGE_FALLING
:
*
int_pol
&=
~
(
1
<<
pin
);
*
int_edge
|=
(
1
<<
pin
);
break
;
case
IRQ_TYPE_LEVEL_HIGH
:
*
int_pol
|=
(
1
<<
pin
);
*
int_edge
&=
~
(
1
<<
pin
);
break
;
case
IRQ_TYPE_LEVEL_LOW
:
*
int_pol
&=
~
(
1
<<
pin
);
*
int_edge
&=
~
(
1
<<
pin
);
break
;
}
return
;
}
bsp/ls1cdev/libraries/ls1c_gpio.h
浏览文件 @
358612c8
...
...
@@ -29,6 +29,19 @@ typedef enum{
}
gpio_level_t
;
typedef
enum
{
// 上升沿触发
IRQ_TYPE_EDGE_RISING
=
0x00000001
,
// 下降沿触发
IRQ_TYPE_EDGE_FALLING
=
0x00000002
,
IRQ_TYPE_EDGE_BOTH
=
(
IRQ_TYPE_EDGE_FALLING
|
IRQ_TYPE_EDGE_RISING
),
// 高电平触发
IRQ_TYPE_LEVEL_HIGH
=
0x00000004
,
// 低电平触发
IRQ_TYPE_LEVEL_LOW
=
0x00000008
,
IRQ_TYPE_LEVEL_MASK
=
(
IRQ_TYPE_LEVEL_LOW
|
IRQ_TYPE_LEVEL_HIGH
),
}
gpio_irq_type_t
;
/*
...
...
@@ -73,6 +86,13 @@ unsigned int gpio_get(unsigned int gpio);
/**
* 设置中断类型
* @gpio gpio引脚
* @type 触发中断的条件。高电平触发、低电平触发、上升沿触发 or 下降沿触发
*/
void
gpio_set_irq_type
(
unsigned
int
gpio
,
gpio_irq_type_t
type
);
#endif
...
...
bsp/ls1cdev/libraries/ls1c_regs.h
浏览文件 @
358612c8
...
...
@@ -74,13 +74,41 @@
// 中断配置寄存器
#define LS1C_INT0_SR (0xbfd01040)
#define LS1C_INT0_EN (0xbfd01044)
#define LS1C_INT0_SET (0xbfd01048)
#define LS1C_INT0_CLR (0xbfd0104c)
#define LS1C_INT0_POL (0xbfd01050)
#define LS1C_INT0_EDGE (0xbfd01054)
#define LS1c_INT1_SR (0xbfd01058)
#define LS1C_INT1_EN (0xbfd0105c)
#define LS1C_INT1_SET (0xbfd01060)
#define LS1C_INT1_CLR (0xbfd01064)
#define LS1C_INT1_POL (0xbfd01068)
#define LS1C_INT1_EDGE (0xbfd0106c)
#define LS1C_INT2_SR (0xbfd01070)
#define LS1C_INT2_EN (0xbfd01074)
#define LS1C_INT2_SET (0xbfd01078)
#define LS1C_INT2_CLR (0xbfd0107c)
#define LS1C_INT2_POL (0xbfd01080)
#define LS1C_INT2_EDGE (0xbfd01084)
#define LS1C_INT3_SR (0xbfd01088)
#define LS1C_INT3_EN (0xbfd0108c)
#define LS1C_INT3_SET (0xbfd01090)
#define LS1C_INT3_CLR (0xbfd01094)
#define LS1C_INT3_POL (0xbfd01098)
#define LS1C_INT3_EDGE (0xbfd0109c)
#define LS1C_INT4_SR (0xbfd010a0)
#define LS1C_INT4_EN (0xbfd010a4)
#define LS1C_INT4_SET (0xbfd010a8)
#define LS1C_INT4_CLR (0xbfd010ac)
#define LS1C_INT4_POL (0xbfd010b0)
#define LS1C_INT4_EDGE (0xbfd010b4)
...
...
libcpu/mips/loongson_1c/ls1c.h
浏览文件 @
358612c8
...
...
@@ -77,6 +77,11 @@
#define LS1C_NR_IRQS (32*5)
// GPIO编号和中断号之间的互相转换
#define LS1C_GPIO_TO_IRQ(GPIOn) (LS1C_GPIO_FIRST_IRQ + (GPIOn))
#define LS1C_IRQ_TO_GPIO(IRQn) ((IRQn) - LS1C_GPIO_FIRST_IRQ)
struct
ls1c_intc_regs
{
volatile
unsigned
int
int_isr
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录