在三天前学习按键驱动的时候,按键通过轮循的方式,一直在等待被按下,这时候系统不能够完成其它的操作,这明显是不科学的,可以使用外部中断解决这个问题。
在Tiny4412中中断分为三种 分别是软件通用中断(SGI),私有设备中断(PPI),共享设备中断(SPI)。
一共有160个中断号,中断表在Tiny4412手册的745页。前篇写的看门狗中断属于PPI,今天的实验所使用的是SPI。也可以称为外部中断。
前几天的按键驱动篇章我们已经找到按键KEY1对应的寄存器为GPX3_2。查看GPX3CON[2]的描述可知,将其置为0xf,为外部中断模式
对应的中断描述在EXT_INT43[2]中。
有关于EXT_INT43[2]的寄存器: EXT_INT43_CON[2] 选择中断触发方式、

中断开关:EXT_INT43_MASK[2]:

中断状态:EXT_INT43_PEND[2],特别注意的是,要清中断,将值赋值为1.

通过下图可知中断源是26,通过表格查找到中断号为64:


具体代码如下所示:
1 #include "regs.h" 2 3 int (*printf)(char *, ...) = 0xc3e114d8; 4 5 void init_ttb(unsigned long *ttb); 6 void enable_mmu(void); 7 void memcpy(unsigned char *dest, unsigned char *source, int len); 8 void do_irq(); 9 10 int main() 11 { 12 13 enable_mmu(); 14 *(unsigned long *)0x67000000 = do_irq; 15 unsigned long source = 0; 16 __asm__ __volatile__( 17 "ldr %0, =vector_start\n" 18 : "=r" (source) 19 ); 20 memcpy(0, source, 0x1000); 21 22 //step 1: set cpsr i bit 23 __asm__ __volatile__( 24 "mrs r0, cpsr\n" 25 "bic r0, r0, #0x80\n" 26 "msr cpsr, r0\n" 27 ::: "r0" 28 ); 29 30 //step 2: enable gic 31 ICCICR_CPU0 = 1;//终端总开关 32 ICCPMR_CPU0 = 0xff;//设置最低优先级 33 ICDDCR = 1; 34 35 //中断源为64 36 ICDIPR16_CPU0 &= ~0xff ;//设置本中断优先级 37 ICDIPTR16_CPU0 &= 0xff ;// 选择指定的cpu0进行终端处理 38 ICDIPTR16_CPU0 |= 1; // 选择指定的cpu0进行终端处理 39 ICDISER2_CPU0 = 1;//设置本中断开启 40 41 //step 3: set gpio 42 GPX3CON |= (0xf << 8);//使用外部中断模式 43 //step 4: set xeint26 44 EXT_INT43CON &= ~(0x7 << 8); 45 EXT_INT43CON |= ( 2 << 8);//设置中断方式 46 EXT_INT43MASK &= ~(1 << 2);//开中断 47 //step 5 48 printf("welcom back\n"); 49 } 50 51 void do_irq() 52 { 53 printf("key 1 ~~~ \n"); 54 /*清中断*/ 55 EXT_INT43PEND |= (0x1 << 2); 56 } 57 58 __asm__( 59 "vector_start:\n" 60 "b reset\n" 61 "b undef\n" 62 "b swi\n" 63 "b pre_abt\n" 64 "b data_abt\n" 65 ".word 0x0\n" 66 "b irq \n" 67 "b fiq\n" 68 "\n" 69 "reset:\n" 70 "undef:\n" 71 "mov sp, #0x66000000\n" 72 "stmfd sp!, {r0-r12, lr}\n" 73 "\n" 74 "mov r0, #0x67000000\n" 75 "ldr r1, [r0]\n" 76 "blx r1\n" 77 "\n" 78

本文介绍Tiny4412平台上的外部中断配置与实现过程,包括使用外部中断来响应按键操作,并结合看门狗中断实现LED灯的控制。
最低0.47元/天 解锁文章
8142

被折叠的 条评论
为什么被折叠?



