嵌入式20171207定稿版本1
目录;1、GPIO端口编程的应用举例;
LED_1~LED_4分别与GPM0~GPM3相连
通过GPB5~GPB8引脚的高低电平来控制发光二极管的亮与灭。
1、当这几个引脚输出高电平的时候发光二极管熄灭;
2、当这几个引脚输出低电平的时候发光二极管点亮。;
①对于所有寄存器及6410中断的#define定义,通常写s3c6410_system.h文件:
②C语言编程时直接使用#include s3c6410_system.h,文件即可。;3.在Main.c文件中实现C语言的Main函数,注意不是小写main;;//初始化外部按键key1对应引脚功能及中断key1对应中断初始化;
void KEY_Init(void)
{
GPION-CON = 2;//2=0b10,设置key1对应引脚功能处于外部中断
EINT0CON0 = 0x2;///6410开发板0组中断源中0~15号中断的触发方式;
EINT0PEND =1;//中断标志寄存器,告知CPU哪个中断发生;
EINT0MASK = ~(BIT0); //取消中断屏蔽
Set_IsrAddr(INT_EINT0,(u32)Isr_KeyInt); //设置中断矢量入口
Set_IntEnable(INT_EINT0,Enable); //使能中断
}
//主函数
void main(void)
{
LED_Init(); //初始化LED
KEY_Init(); //初始化按键外部key1中断
while(1)
{
}
}
;外部中断编程
除INT_EINT0-INT_EINT4以外,全部中断是由S3C6410内部的模块触发的。称为内部中断 ?
INT_EINT0-INT_EINT4是外部中断,是由CPU外的外设来触发的,它的触发哪一个中断取决外设联接哪一个GPIO中断脚。? ??
;弄清楚硬件连接,通过查看原理图,得到了这样的硬件连接
KEYINT1-GPN0-EINT_G0_0
KEYINT2-GPN1-EINT_G0_1
KEYINT3-GPN2-EINT_G0_2
KEYINT4-GPN3-EINT_G0_3
KEYINT5-GPN4-EINT_G0_4
KEYINT6-GPN5-EINT_G0_5;外部中断脚 S3C6410 分10组GPIO脚来充当外部中断脚 ?
第0组,共28脚.GPN0-GPN15 (16脚),GPL8-GPL14(7脚),GPM0-GPM4 (5脚) ?
第1组,由GPA0-GPA7,共8个中断脚 ?
第2组,由GPC0-GPC0,共8个中断脚
… ????
第8组,由GPP0-GPP14,共15个中断脚 ?
第9组,由GPQ0-GPQ8,共9个中断脚;
6410开发板127外部中断引脚。
属于外部中断组0的27个中断占用了VIC里的4个中断号,分别是外部中断0-3,外部中断4-11,外部中断12-19,外部中断20-27。外部中断组1-9只占用了1个中断号。
64个中断源号按硬件分组分成VIC0, VIC1两个组。
中断号为0-31是VIC0组 ;
中断号为32-63是VIC1组。;外部中断引脚与中断源号对应关系图如下;外部中断号 ?
???0组的第0脚到第3脚的设备将触INT_EINT0=0中断
第0组的第4-11脚将触发INT_EINT1=1中断 第0组的第12-19脚将触发INT_EINT2=32中断
第0组的第20-27脚将触发INT_EINT3=33中断
第1组-第9组所有设备只触发INT_EINT4=53中断;为了节约中断,不可能为每个外部管脚都分配一个中断号,所以就会把某几个外部中断给合并成一个中断号。
例如,对于外部中断0-3,就合并成了一个中断号,INT_EINT0。
当这4个中断有任意一个产生中断时,INT_EINT0会挂起,CPU就会知道产生了外部中断0-3中断,然后去执行中断处理,
在中断服务程序中,为了知道具体是哪一个中断,还需要去查询寄存器以知道是哪一个中断产生。;我们可以看到,每一个组都是多个中断脚共享一个中断号的。其中第0组比较常用。占用了3个中断号。;不同的IO脚上多个设备产生同一个中断,软件如何知道是哪一个脚?
由External Interrupt Pending Register 来判断,第0组由EINT0PEND来判断。
;EINT控制寄存器,中断屏蔽寄存器,中断挂载寄存器:
EINT0CON0(配置外部中断0~15的触发方式)
中断屏蔽寄存器EIN0MASK,可读可写,写1屏蔽中断,写0使能中断。此时,我们首先肯定要使能按键中断口;
中断挂载寄存器EINT0PEND(0~27位的值代表外部中断引脚0~
原创力文档

文档评论(0)