共2条
1/1 1 跳转至页
eint,while eint中断为啥要用一个while循环?
问
// 这是我的
void e_int (void) __irq
{
EXTINT =0x1;
VICVectAddr = 0;
}
//这是周立功的例子
void e_int (void) __irq
{
while((EXTINT &0x1)!=0)
{
EXTINT =0x1;
}
VICVectAddr = 0;
}
这里的循环是一个演示的例子还是有什么特别的用途呢?我是用边沿触发。发现中断会导致莫明奇妙死机(我没有开看门狗).感觉好像死机和中断有关
答 1: 我用的是2132我看到2100系列有eint中断的问题,2132有没有啊? 答 2: 我有对eint的关中断操作。我是通过pinsel来关中断的。是不是用这种方法关中断的时候,必须要先关总中断,然后改pinsel,然后开总中断,才会不死机? 答 3: INT1为电平触发肯定要while防止再中断边沿触发就不需要了.
void EINT0IRQ (void) __irq {//IRQ中断函数EINT0IRQ被挂接在VICVectCntl0
if (VICIRQStatus & (1 << VICIntSel_EINT0)) {
IOPIN1 ^= (1 << P1_16); //取反P1.16
}
VICSoftIntClr = (1 << VICIntSel_EINT0);
EXTINT = (1 << EINT0); //清除INT0中断标志
VICVectAddr = 0;
}
void EINT1IRQ (void) __irq {//IRQ中断函数EINT1IRQ被挂接在VICVectCntl1
if (VICIRQStatus & (1 << VICIntSel_EINT1)) {
IOSET1 = (1 << P1_17); //P1.17=1
while(EXTINT & (1 << EINT1)) {
EXTINT = (1 << EINT1); //清除INT1中断标志
}
IOCLR1 = (1 << P1_17); //P1.17=0
VICSoftIntClr = (1 << VICIntSel_EINT1);
}
VICVectAddr = 0;
}
void main (void) {
//.......................................................
EXTMODE |= (1 << EXTMODE0) //设置INT0为边沿触发
| (1 << EXTMODE2) //设置INT2为边沿触发
| (1 << EXTMODE3);//设置INT3为边沿触发
EXTMODE &= ~(1 << EXTMODE1);//设置INT1为电平触发
//.......................................................
} 答 4: 等待while循环是为了等待外部中断请求信号的消失,然后清除EXINT相应位,最后通知cpu中断结束 答 5: 只所以提问,主要是我挂上eint中断容易死机我在eint里面要关掉中断,然后在timer中断里面打开,我是采用改变pinsel的方式来实现中断的开关。
是不是开关中断的时候要关掉cpsr(好像有帖子这么说过)。 答 6: hotpower,我又要和你争论了! 外部中断时,p1.16为输入脚,它的电平是由外部控制的,所以不能在中断服务程序里给它取反,即使取反也没用,比如说,外部将它拉低,即使你内部给它置高,它还是低。
哈哈,我又和hotpower争论了,说错了大家别拍砖.... 答 7: 先拷贝下来,有些眼晕,等我清醒清醒说实话,我真是ARM菜鸟,因为我至今没在ARM芯片上编过一个实战程序,虽然马上就要成为现实了.
我承认自己很菜,但我很努力,至少感发表一些菜鸟的邪论,...至少我做到了.
软仿真和实际运行肯定有很大的出入,不对之处也请各位批判... 答 8: 软件仿真图例全速运行后点击P0.16引发INT1中断(此时P1.16为一种状态),程序停留在断点处.
单步执行,P1.16翻转
再全速运行后点击P0.16两次引发INT1中断(此时P1.16为一种状态),程序停留在断点处.
单步执行,P1.16翻转
我很菜,不知硬件运行时到底翻转否,不明白,望大家帮我硬件仿真一下...
谢谢!!!
看来我是该买块开发板了,省得自己没底气...我晕~~ 答 9: hotpower 你真的没有用过ARM??你的学习精神值得我佩服!
外部中断一般用于程序对外部事件的响应,程序不用将p1.16翻转,没有这个必要,比如说p1.16被外部设备接地了,你的程序无论如何都不可能将它置高的,你的中断处理程序只需要对外部事件进行处理,不需要将p1.16翻转.
我虽然用过ARM,但没有用过ARM的外部中断,(不过我用过很多单片机),说的不一定对,仅供参考,谁让我们是老乡呢,呵呵
答 10: 晕~~~窝里斗的老陕,我拿它看是否进入过中断!!!晕~~~穷人买不起,还不让"看"进中断的"场景"???
晕...确实没用过ARM!!!!!!!!!!!!!!!!!!
本来应该在电子大楼金龙那里买上,可是拉不进菜地里施肥.
他的技术员也无奈...还说这"门太小"(旧机子)...
所以...至今仍是ARM菜鸟...难道不对吗???还不承认我是ARM菜鸟吗???
晕~~~ 答 11: hotpower2我还发现你发表的中断干扰防御程序的其它问题,不过,你提出中断防御的思想是很好的. 答 12: 哈哈,哈哈,和你开个玩笑,不要当真,因为看到老乡,倍感亲切,所以和你开个玩笑,哈哈,咋老陕不应该这么小气吧,哈哈 答 13: 哈哈,我本来就是以"乐"为生的这坛子里好象我还像"打不死的吴青华"吧...
来到这里就是学习和交流的,没什么非要争个你高我低的...
我们都是以手艺混饭吃的,说好听的是"技术",难听点的是卖脑浆!!!
说不好听的,有时真感到不如买豆浆和油条的!!! 答 14: 不要太悲观只要你搞某项技术搞精,会过的很好. 答 15: hotpower:你为何又钻研上AVR了你为何又钻研上AVR了?? 答 16: 看在MCU中用C++好玩 答 17: MCU中用c++意义不是很大语言只不过是一种工具,MCU程序不大,C++意义不大.
答 18: 省心就好... 答 19: 我原来搞AVR我5年前搞AVR,因为找不到C,是用汇编,呵呵,惨....
void e_int (void) __irq
{
EXTINT =0x1;
VICVectAddr = 0;
}
//这是周立功的例子
void e_int (void) __irq
{
while((EXTINT &0x1)!=0)
{
EXTINT =0x1;
}
VICVectAddr = 0;
}
这里的循环是一个演示的例子还是有什么特别的用途呢?我是用边沿触发。发现中断会导致莫明奇妙死机(我没有开看门狗).感觉好像死机和中断有关
答 1: 我用的是2132我看到2100系列有eint中断的问题,2132有没有啊? 答 2: 我有对eint的关中断操作。我是通过pinsel来关中断的。是不是用这种方法关中断的时候,必须要先关总中断,然后改pinsel,然后开总中断,才会不死机? 答 3: INT1为电平触发肯定要while防止再中断边沿触发就不需要了.
void EINT0IRQ (void) __irq {//IRQ中断函数EINT0IRQ被挂接在VICVectCntl0
if (VICIRQStatus & (1 << VICIntSel_EINT0)) {
IOPIN1 ^= (1 << P1_16); //取反P1.16
}
VICSoftIntClr = (1 << VICIntSel_EINT0);
EXTINT = (1 << EINT0); //清除INT0中断标志
VICVectAddr = 0;
}
void EINT1IRQ (void) __irq {//IRQ中断函数EINT1IRQ被挂接在VICVectCntl1
if (VICIRQStatus & (1 << VICIntSel_EINT1)) {
IOSET1 = (1 << P1_17); //P1.17=1
while(EXTINT & (1 << EINT1)) {
EXTINT = (1 << EINT1); //清除INT1中断标志
}
IOCLR1 = (1 << P1_17); //P1.17=0
VICSoftIntClr = (1 << VICIntSel_EINT1);
}
VICVectAddr = 0;
}
void main (void) {
//.......................................................
EXTMODE |= (1 << EXTMODE0) //设置INT0为边沿触发
| (1 << EXTMODE2) //设置INT2为边沿触发
| (1 << EXTMODE3);//设置INT3为边沿触发
EXTMODE &= ~(1 << EXTMODE1);//设置INT1为电平触发
//.......................................................
} 答 4: 等待while循环是为了等待外部中断请求信号的消失,然后清除EXINT相应位,最后通知cpu中断结束 答 5: 只所以提问,主要是我挂上eint中断容易死机我在eint里面要关掉中断,然后在timer中断里面打开,我是采用改变pinsel的方式来实现中断的开关。
是不是开关中断的时候要关掉cpsr(好像有帖子这么说过)。 答 6: hotpower,我又要和你争论了! 外部中断时,p1.16为输入脚,它的电平是由外部控制的,所以不能在中断服务程序里给它取反,即使取反也没用,比如说,外部将它拉低,即使你内部给它置高,它还是低。
哈哈,我又和hotpower争论了,说错了大家别拍砖.... 答 7: 先拷贝下来,有些眼晕,等我清醒清醒说实话,我真是ARM菜鸟,因为我至今没在ARM芯片上编过一个实战程序,虽然马上就要成为现实了.
我承认自己很菜,但我很努力,至少感发表一些菜鸟的邪论,...至少我做到了.
软仿真和实际运行肯定有很大的出入,不对之处也请各位批判... 答 8: 软件仿真图例全速运行后点击P0.16引发INT1中断(此时P1.16为一种状态),程序停留在断点处.
单步执行,P1.16翻转
再全速运行后点击P0.16两次引发INT1中断(此时P1.16为一种状态),程序停留在断点处.
单步执行,P1.16翻转
我很菜,不知硬件运行时到底翻转否,不明白,望大家帮我硬件仿真一下...
谢谢!!!
看来我是该买块开发板了,省得自己没底气...我晕~~ 答 9: hotpower 你真的没有用过ARM??你的学习精神值得我佩服!
外部中断一般用于程序对外部事件的响应,程序不用将p1.16翻转,没有这个必要,比如说p1.16被外部设备接地了,你的程序无论如何都不可能将它置高的,你的中断处理程序只需要对外部事件进行处理,不需要将p1.16翻转.
我虽然用过ARM,但没有用过ARM的外部中断,(不过我用过很多单片机),说的不一定对,仅供参考,谁让我们是老乡呢,呵呵
答 10: 晕~~~窝里斗的老陕,我拿它看是否进入过中断!!!晕~~~穷人买不起,还不让"看"进中断的"场景"???
晕...确实没用过ARM!!!!!!!!!!!!!!!!!!
本来应该在电子大楼金龙那里买上,可是拉不进菜地里施肥.
他的技术员也无奈...还说这"门太小"(旧机子)...
所以...至今仍是ARM菜鸟...难道不对吗???还不承认我是ARM菜鸟吗???
晕~~~ 答 11: hotpower2我还发现你发表的中断干扰防御程序的其它问题,不过,你提出中断防御的思想是很好的. 答 12: 哈哈,哈哈,和你开个玩笑,不要当真,因为看到老乡,倍感亲切,所以和你开个玩笑,哈哈,咋老陕不应该这么小气吧,哈哈 答 13: 哈哈,我本来就是以"乐"为生的这坛子里好象我还像"打不死的吴青华"吧...
来到这里就是学习和交流的,没什么非要争个你高我低的...
我们都是以手艺混饭吃的,说好听的是"技术",难听点的是卖脑浆!!!
说不好听的,有时真感到不如买豆浆和油条的!!! 答 14: 不要太悲观只要你搞某项技术搞精,会过的很好. 答 15: hotpower:你为何又钻研上AVR了你为何又钻研上AVR了?? 答 16: 看在MCU中用C++好玩 答 17: MCU中用c++意义不是很大语言只不过是一种工具,MCU程序不大,C++意义不大.
答 18: 省心就好... 答 19: 我原来搞AVR我5年前搞AVR,因为找不到C,是用汇编,呵呵,惨....
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |