共2条
1/1 1 跳转至页
EINT EINT的问题,帮帮忙呀,先谢了

问
想实现的功能是,通过按下key1,key2中断EINT0,EINT1,
使led1和led2点亮。
修改的程序如下:
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void UART0_Handler(void);
extern void EINT0_Handler(void);
extern void EINT1_Handler(void);
VICIntEnClr = 0xffffffff;
VICDefVectAddr = (uint32)IRQ_Handler;
VICIntSelect=0x00000000;
VICVectAddr14 = (uint32)UART0_Handler;/*向量地址*/
VICVectCntl14 = (0x20 | 0x06);/*优先级*/
VICIntEnable = 1 << 6;/*中断使能*/
VICVectAddr15 = (uint32)Timer0_Handler;
VICVectCntl15 = (0x20 | 0x04);
VICIntEnable = 1 << 4;
VICVectAddr13 = (uint32)EINT0_Handler;
VICVectCntl13=(0x20|0x0E);
VICIntEnable=1<<14;
VICVectAddr12 = (uint32)EINT1_Handler;
VICVectCntl12=(0x20|0x0F);
VICIntEnable=1<<15;
}
EINT0和EINT1的中断程序为:
void EINT0_Exception(void)
{
uint32 i;
uint8 cp1;
OS_ENTER_CRITICAL();
i=VICIRQStatus;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
cp1=0x05;
OSMboxPost(EintMbox,&cp1);
}
void EINT1_Exception(void)
{
uint32 i;
uint8 cp2;
OS_ENTER_CRITICAL();
i=VICIRQStatus;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
cp2=0x06;
OSMboxPost(EintMbox,&cp2);
}
uint8 EintGet(void)
{
uint8 err;
uint8 *ok;
ok=(uint8 *)OSMboxPend(EintMbox,0,&err);
return *ok;
}
vectors.s中添加:
;通用串行口0中断
UART0_Handler HANDLER UART0_Exception
EINT1_Handler HANDLER EINT1_Exception
EINT0_Handler HANDLER EINT0_Exception
主程序中添加:
cp1=EintGet();
可是永远得不到值。另外调试中断有没有经验呀,太不好调了。 答 1: 中断服务函数中要向VICVectAddr寄存器写入0。在熟悉中断之前,建议先使用附带的示例了解中断的发生和处理过程。 答 2: 在RTOS中如何用外部中断呢?我这段代码有没问题?
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void I2c_Handler(void);
VICIntEnClr = 0xffffffff;
PINSEL1 = (PINSEL1 & 0xfffffff0) | 0x01;
VICVectAddr10 = (uint32)IRQ_Handler;
VICVectCntl10 = (0x20 | 14);
EXTINT = 0x01;
VICIntEnable = 1<<14;
...
}
void IRQ_Exception(void)
{
uint8 i = CLOSE;
OS_ENTER_CRITICAL();
if (i == OPEN)
i = CLOSE;
else i = OPEN;
OSMboxPost(KeyMbox1,(void *)i);
EXTINT = 0x01;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
} 答 3: 为什么周公书上没有RTOS下的外部中断例程啊?书上只有中间件中用到中断.周工给个外部中断的例子吧,试了很久都不行啊. 答 4: EINT0和EINT1的中断程序中有VICVectAddr = 0EINT0和EINT1的中断程序中有VICVectAddr = 0啊?
不明白阿
答 5: 怎么不理我啊?怎么不理我啊? 答 6: 我的ucos下的外部中断也不能运行.请周公和各位帮忙指导一下啊。上面程式有问题吗?为什么不能运行啊?特别在Fpclk=Fcclk=44mhz时。
使led1和led2点亮。
修改的程序如下:
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void UART0_Handler(void);
extern void EINT0_Handler(void);
extern void EINT1_Handler(void);
VICIntEnClr = 0xffffffff;
VICDefVectAddr = (uint32)IRQ_Handler;
VICIntSelect=0x00000000;
VICVectAddr14 = (uint32)UART0_Handler;/*向量地址*/
VICVectCntl14 = (0x20 | 0x06);/*优先级*/
VICIntEnable = 1 << 6;/*中断使能*/
VICVectAddr15 = (uint32)Timer0_Handler;
VICVectCntl15 = (0x20 | 0x04);
VICIntEnable = 1 << 4;
VICVectAddr13 = (uint32)EINT0_Handler;
VICVectCntl13=(0x20|0x0E);
VICIntEnable=1<<14;
VICVectAddr12 = (uint32)EINT1_Handler;
VICVectCntl12=(0x20|0x0F);
VICIntEnable=1<<15;
}
EINT0和EINT1的中断程序为:
void EINT0_Exception(void)
{
uint32 i;
uint8 cp1;
OS_ENTER_CRITICAL();
i=VICIRQStatus;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
cp1=0x05;
OSMboxPost(EintMbox,&cp1);
}
void EINT1_Exception(void)
{
uint32 i;
uint8 cp2;
OS_ENTER_CRITICAL();
i=VICIRQStatus;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
cp2=0x06;
OSMboxPost(EintMbox,&cp2);
}
uint8 EintGet(void)
{
uint8 err;
uint8 *ok;
ok=(uint8 *)OSMboxPend(EintMbox,0,&err);
return *ok;
}
vectors.s中添加:
;通用串行口0中断
UART0_Handler HANDLER UART0_Exception
EINT1_Handler HANDLER EINT1_Exception
EINT0_Handler HANDLER EINT0_Exception
主程序中添加:
cp1=EintGet();
可是永远得不到值。另外调试中断有没有经验呀,太不好调了。 答 1: 中断服务函数中要向VICVectAddr寄存器写入0。在熟悉中断之前,建议先使用附带的示例了解中断的发生和处理过程。 答 2: 在RTOS中如何用外部中断呢?我这段代码有没问题?
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void I2c_Handler(void);
VICIntEnClr = 0xffffffff;
PINSEL1 = (PINSEL1 & 0xfffffff0) | 0x01;
VICVectAddr10 = (uint32)IRQ_Handler;
VICVectCntl10 = (0x20 | 14);
EXTINT = 0x01;
VICIntEnable = 1<<14;
...
}
void IRQ_Exception(void)
{
uint8 i = CLOSE;
OS_ENTER_CRITICAL();
if (i == OPEN)
i = CLOSE;
else i = OPEN;
OSMboxPost(KeyMbox1,(void *)i);
EXTINT = 0x01;
VICVectAddr = 0;
OS_EXIT_CRITICAL();
} 答 3: 为什么周公书上没有RTOS下的外部中断例程啊?书上只有中间件中用到中断.周工给个外部中断的例子吧,试了很久都不行啊. 答 4: EINT0和EINT1的中断程序中有VICVectAddr = 0EINT0和EINT1的中断程序中有VICVectAddr = 0啊?
不明白阿
答 5: 怎么不理我啊?怎么不理我啊? 答 6: 我的ucos下的外部中断也不能运行.请周公和各位帮忙指导一下啊。上面程式有问题吗?为什么不能运行啊?特别在Fpclk=Fcclk=44mhz时。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 |