共2条
1/1 1 跳转至页
EINT1 求求各位了,我已经迷惑了2个月了,关于EINT1
问
问题是EINT0使用正常(key3),可是EINT1使用不正常(key1),没有反映。是不是p0.14有什么问题。
程序如下:
test.c
#include "config.h"
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
#define KEY1 (1 << 14) /* P0.14为key1 */
#define KEY2 (1 << 16) /* P0.16为key3 */
#define BEE (1 << 7) /* P0.07为蜂鸣器 */
#define LED1CON (1 << 10) /* 指示灯1*/
#define LED2CON (1 << 13) /* 指示灯2*/
void TaskStart(void *data);
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1],2);
OSStart();
return 0;
}
void TaskStart(void *pdata)
{
uint8 *cp;
//uint8 cpp;
uint8 err;
pdata = pdata; /* 避免编译警告 */
TargetInit(); /* 目标板初始化 */
// IODIR &= ~KEY1; /* 设置KEY1为输入*/
// IODIR &= ~KEY2;
IOSET = BEE; /* 设置蜂鸣器为输出*/
IOSET =(LED1CON | IOSET);
IOSET =(LED2CON | IOSET);
IODIR = BEE;
IODIR =(LED1CON | IODIR);
IODIR =(LED2CON | IODIR);
//PINSEL0 = (PINSEL0 & 0x2fff3fff);
PINSEL0 = (PINSEL0 & 0x20000000);
PINSEL1 = 0x00000001;
EXTINT=0x07;
for (;;)
{
OSTaskSuspend(OS_PRIO_SELF);
//cp=(uint8 *)OSMboxPend(leehwaMbox,0,&err);
}
}
extern void EINT1_Exception(void)
{
uint32 j;
j = VICIRQStatus; // 读出VICIRQStatus的值
j = IOSET; // 读取当前LED2控制值
if( (j&LED1CON)==0 ) // 控制LED2输出
{ IOSET = LED1CON;
}
else
{ IOCLR = LED1CON;
}
while( (EXTINT&0x02)!=0 ) // 等待外部中断信号恢复为高电平
{ EXTINT = 0x02; // 清除EINT1中断标志
}
VICVectAddr = 0x00;
}
extern void EINT0_Exception(void)
{
uint32 i;
i = VICIRQStatus; // 读出VICIRQStatus的值
i = IOSET; // 读取当前LED1控制值
if( (i&LED2CON)==0 ) // 控制LED1输出
{ IOSET = LED2CON;
}
else
{ IOCLR = LED2CON;
}
while( (EXTINT&0x01)!=0 ) // 等待外部中断信号恢复为高电平
{ EXTINT = 0x01; // 清除EINT0中断标志
}
VICVectAddr = 0x00;
}
target.c 有:
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void EINT0_Handler(void);
extern void EINT1_Handler(void);
VICIntEnClr = 0xffffffff;
VICDefVectAddr = (uint32)IRQ_Handler;
VICIntSelect= 0x00000000;
VICVectAddr15 = (uint32)Timer0_Handler;
VICVectCntl15 = (0x20 | 0x04);
VICIntEnable = 1 << 4;
VICVectAddr7 = (uint32)EINT1_Handler;
/*VICVectCntl7 = (0x20 | 0x0F);*/
VICVectCntl7 = (0x2F);
VICIntEnable=1 << 15;
VICVectAddr6 = (uint32)EINT0_Handler;
/*VICVectCntl6 = (0x20 | 0x0E);*/
VICVectCntl6 = (0x2E);
VICIntEnable=1 << 14;
}
vectors.s 中添加
EINT1_Handler HANDLER EINT1_Exception
EINT0_Handler HANDLER EINT0_Exception 答 1: 要断开ISP 答 2: 我已经断开了,还是不行我已经断开了,还是不行 答 3: 最奇怪的是书中的例子可以用,就是IRQ的C语言的例子我只是移植到了us/soII下,就出了问题,不明白
程序如下:
test.c
#include "config.h"
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
#define KEY1 (1 << 14) /* P0.14为key1 */
#define KEY2 (1 << 16) /* P0.16为key3 */
#define BEE (1 << 7) /* P0.07为蜂鸣器 */
#define LED1CON (1 << 10) /* 指示灯1*/
#define LED2CON (1 << 13) /* 指示灯2*/
void TaskStart(void *data);
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1],2);
OSStart();
return 0;
}
void TaskStart(void *pdata)
{
uint8 *cp;
//uint8 cpp;
uint8 err;
pdata = pdata; /* 避免编译警告 */
TargetInit(); /* 目标板初始化 */
// IODIR &= ~KEY1; /* 设置KEY1为输入*/
// IODIR &= ~KEY2;
IOSET = BEE; /* 设置蜂鸣器为输出*/
IOSET =(LED1CON | IOSET);
IOSET =(LED2CON | IOSET);
IODIR = BEE;
IODIR =(LED1CON | IODIR);
IODIR =(LED2CON | IODIR);
//PINSEL0 = (PINSEL0 & 0x2fff3fff);
PINSEL0 = (PINSEL0 & 0x20000000);
PINSEL1 = 0x00000001;
EXTINT=0x07;
for (;;)
{
OSTaskSuspend(OS_PRIO_SELF);
//cp=(uint8 *)OSMboxPend(leehwaMbox,0,&err);
}
}
extern void EINT1_Exception(void)
{
uint32 j;
j = VICIRQStatus; // 读出VICIRQStatus的值
j = IOSET; // 读取当前LED2控制值
if( (j&LED1CON)==0 ) // 控制LED2输出
{ IOSET = LED1CON;
}
else
{ IOCLR = LED1CON;
}
while( (EXTINT&0x02)!=0 ) // 等待外部中断信号恢复为高电平
{ EXTINT = 0x02; // 清除EINT1中断标志
}
VICVectAddr = 0x00;
}
extern void EINT0_Exception(void)
{
uint32 i;
i = VICIRQStatus; // 读出VICIRQStatus的值
i = IOSET; // 读取当前LED1控制值
if( (i&LED2CON)==0 ) // 控制LED1输出
{ IOSET = LED2CON;
}
else
{ IOCLR = LED2CON;
}
while( (EXTINT&0x01)!=0 ) // 等待外部中断信号恢复为高电平
{ EXTINT = 0x01; // 清除EINT0中断标志
}
VICVectAddr = 0x00;
}
target.c 有:
void VICInit(void)
{
extern void IRQ_Handler(void);
extern void Timer0_Handler(void);
extern void EINT0_Handler(void);
extern void EINT1_Handler(void);
VICIntEnClr = 0xffffffff;
VICDefVectAddr = (uint32)IRQ_Handler;
VICIntSelect= 0x00000000;
VICVectAddr15 = (uint32)Timer0_Handler;
VICVectCntl15 = (0x20 | 0x04);
VICIntEnable = 1 << 4;
VICVectAddr7 = (uint32)EINT1_Handler;
/*VICVectCntl7 = (0x20 | 0x0F);*/
VICVectCntl7 = (0x2F);
VICIntEnable=1 << 15;
VICVectAddr6 = (uint32)EINT0_Handler;
/*VICVectCntl6 = (0x20 | 0x0E);*/
VICVectCntl6 = (0x2E);
VICIntEnable=1 << 14;
}
vectors.s 中添加
EINT1_Handler HANDLER EINT1_Exception
EINT0_Handler HANDLER EINT0_Exception 答 1: 要断开ISP 答 2: 我已经断开了,还是不行我已经断开了,还是不行 答 3: 最奇怪的是书中的例子可以用,就是IRQ的C语言的例子我只是移植到了us/soII下,就出了问题,不明白
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |