|
| 采购元器件好去处--维库电子市场网推荐 |
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请教关于外部中断边沿触发的问题 |
| 来源:21ic 作者:paul_cao 栏目:ARM技术 |
| 请教关于外部中断边沿触发的问题 我用外部中断做计数器,用的是LPC2210,为什么用电平触发可以,但用下降沿触发不可以,请帮忙看看,谢谢了! 程序如下: #define IN_EINT3 #include "config.h" static OS_EVENT *EINT3Sem; static uint16 Pulse_Number; uint8 EINT3Init(void) { PINSEL1 = (PINSEL1 & 0xfffffcff) | 0x00000300; /* 选择管脚为EINT3 */ //EXTMODE = EXTMODE|0x08; /*EINT3中断使用边沿触发 */ //EXTPOLAR = EXTPOLAR&0x07; /*EINT3中断使用下边沿触发 */ EXTINT = 0x08; T1TC = 0; //定时器1设置为0 T1PR = 0; //定时器1不分频 EINT3Sem = OSSemCreate(0); if (EINT3Sem != NULL) { return TRUE; } else { return FALSE; } } uint32 EINT3_Getfreq(uint16 Data) { uint32 time; uint8 err; Pulse_Number = Data; T1TCR = 0x03; //复位定时器1 VICIntEnable = 1<<17; //使能EINT3中断 OSSemPend(EINT3Sem,0,&err); //等待闸门时间结束 VICIntEnClr = 1<<17; //禁能EINT3中断 time = T1TC; //读取定时器1 return time; } void EINT3_Exception(void) { OS_ENTER_CRITICAL(); T1TCR = 0x01; //启动定时器1 if(Pulse_Number==0) { T1TCR = 0x00; //定时器1停止计数 OSSemPost(EINT3Sem); VICIntEnClr = 1<<17; //禁能EINT3中断 } Pulse_Number--; while((EXTINT&0x08)!=0) EXTINT = 0x08; //清除INT3中断标志位 VICVectAddr = 0; // 通知中断控制器中断结束 OS_EXIT_CRITICAL(); } |
| 1楼: | >>参与讨论 |
| 作者: pubstar 于 2004-12-13 22:40:00 发布:
看一下勘误表吧,EXTMODE能引起系统挂起,上菲利普网站看看 |
|
| 2楼: | >>参与讨论 |
| 作者: paul_cao 于 2004-12-14 10:51:00 发布:
谢谢pubstar 我看了一下勘误表,但我的VPBDIV = 0,应该不是这个问题;今天再调试了一下,发现了一个问题,去掉OS_ENTER_CRITICAL();和OS_EXIT_CRITICAL();后就可以了,不过计数精度和理论值差一个数量级 |
|
|
|
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |