共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |