|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请教关于PC104的外部中断 IRQ9/10/11的获得!! |
作者:vodoo 栏目:嵌入式系统 |
这里我们用到了PC104的外部中断 IRQ9/10/11,希望通过外部发送一个脉冲引起IRQ中断响应! 相应的中断程序如下: void irqIntOpen() //开中断 { int TEMP; oldvect = getvect(0x71); //保存原中断向量 setvect(0x71,intSerProgram); //装入中断服务程序入口地址 TEMP = inportb(0x21) & 0xFB;//打开主片IRQ2 outportb(0x21, TEMP); TEMP = inportb(0xA1) & 0xF7;//打开从片IRQ11 outportb(0xA1, TEMP); } void interrupt intSerProgram() //中断服务程序 { readData(); //中断服务程序代码 outportb(0xA0,0x20); //向从片ICR送EOI命令 outportb(0x20,0x20); //向主片ICR送EOI命令 irqIntClose(); } void irqIntClose() //关中断 { int TEMP; setvect(0x71, oldvect); //恢复原中断向量 TEMP = inportb(0x21) | ~(0xFB);//关主片IRQ2 outportb(0x21, TEMP); TEMP = inportb(0xA1) | ~(0xF7);//关从片IRQ11 outportb(0xA1, TEMP); } 初始化8259的代码如下: void init8259(void) { outportb(0x20,0x11); //设置为边沿触发方式 outportb(0xa0,0x11); ...... } 主程序 void main(void) { init8259();//初始化8259 init();//常规初始化 irqIntOpen();//中断开放 while(1) //等待中断 { ; } } 调试的时候,一执行到"outportb(0x20,0x11)"语句,就出现“divide overflow” 请高手指点一下! |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |