共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| Gravity:中英文语音合成模块V2.0及其串口控制被打赏¥24元 | |
| 全彩色度变化图的绘制被打赏¥27元 | |
| 【FreeRtos】FreeRtos任务栈的生长方向管理方式被打赏¥20元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LVGL添加输入设备:EC11旋转编码器被打赏¥39元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LVGL被打赏¥33元 | |
| 空气质量检测器设计与实现被打赏¥24元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LWIP进行UDP、TCP、HTTP、MQTT功能联合测试被打赏¥41元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LWIP被打赏¥36元 | |
| RTOS怎么选?让我来给你答案!被打赏¥15元 | |
| 【S32K3XX】Flash驱动使用被打赏¥26元 | |
我要赚赏金
