共2条
1/1 1 跳转至页
LPC2200,GPIO LPC2200的GPIO口问题?

问
最近调试程序老出现一个不确定的问题,发现GPIO P0口的一个问题,我调试液晶显示,USB传输,怎么P0.17,0.18.0.20.0.23,0.24,0.25口的输入输出会出现时而可以输出,时而有不可以,我单独调试这段程序也会,而P2口的GPIO口设置一样但是不会出现这种情况; 该段程序如下:
for (;;)
{
OSSemPend(Con_Sem, 0, &err); //等待TaskWrite的命令
{
I2cInit(200000);
Init_I2CInt();
for(i=0;i<16;i++)duandian_buff[i]=0xdd;
Write_CAT1025(CAT1025,50,8,duandian_buff);
Read_CAT1025(CAT1025,50,8,cont);
DsInit();
PINSEL1=(PINSEL1&0xf3ffffff);//设置0.29为GPIO
PINSEL1=(PINSEL1&0xfffffff3)|0x04;//设置P0。17为捕获
IO0DIR=LEDCON;
/*#define LEDCON 0X239E0000;
0010 0011 1001 1110 0000 0000 0000 0000
设置P0.18.,0.19,0.20,0.23,0.24,0.25口输出并控制相应的
LED,输出低电平时LED亮
#define LEDCON1 0X007F0000; // 0111 1011
设置P2口的几位LED*/
IO2DIR=LEDCON1;
IO2SET=LEDCON1;
IO0DIR=LEDCON;
IO0SET=LEDCON;//灭P0口LED
for(i=0;i<8;i++)
{ if(rbuff[i]==i)
{
IO0CLR|=DISP_TAB[i]; //该段程序有时控制LED
delayns(50);} //有时候不会控制,当然满足
else; //if语句的条件下;DISP_TAB[i]
} //中的数据也没有问题
for(i=0;i<=5;i++)
{ if(rbuff[i+7]==(i+7))
{
IO2CLR=0;
IO2CLR|=DISP_TAB1[i]; //这段程序控制P2口的LED不
delayns(50); //出现上面的问题
}
}
for(i=0;i<8;i++)
{
dat_buff[0]=i; //这段程序控制P0口的LED也不会
IO0DIR=LEDCON; //出现问题
IO0SET=LEDCON;
IO0CLR=DISP_TAB[i];
delayns(200);
}
T1TCR&=0x00;
for(i=0;i<16;i++)duandian_buff[i]=0x11;
Write_CAT1025(CAT1025,50,8,duandian_buff);
}
如果把有问题段改写成
IO2DIR=LEDCON1;
IO2SET=LEDCON1;
for(i=0;i<8;i++)
{ if(rbuff[i]==i)
{
IO0DIR=LEDCON;
IO0SET=LEDCON;//灭P0口LED
IO0CLR|=DISP_TAB[i];
delayns(50);}
else;
}
P0口的GPIO 没有问题(满足if语句时每个LED都会亮一下),但是想让这几个LED逐个亮起,直到全部亮就实现不了
请问各位这个问题怎么解决!!!!我看了勘误表,也没有这个勘误信息啊!!!
答 1: 保护没?io其他的管脚保护没,例如ioset2|=0x10000000;
不保护可能出现这个问题 答 2: 已经试过我两种方法都试过,还是出现这种不可随心控制的局面,都有点怀疑lpc2200了
for (;;)
{
OSSemPend(Con_Sem, 0, &err); //等待TaskWrite的命令
{
I2cInit(200000);
Init_I2CInt();
for(i=0;i<16;i++)duandian_buff[i]=0xdd;
Write_CAT1025(CAT1025,50,8,duandian_buff);
Read_CAT1025(CAT1025,50,8,cont);
DsInit();
PINSEL1=(PINSEL1&0xf3ffffff);//设置0.29为GPIO
PINSEL1=(PINSEL1&0xfffffff3)|0x04;//设置P0。17为捕获
IO0DIR=LEDCON;
/*#define LEDCON 0X239E0000;
0010 0011 1001 1110 0000 0000 0000 0000
设置P0.18.,0.19,0.20,0.23,0.24,0.25口输出并控制相应的
LED,输出低电平时LED亮
#define LEDCON1 0X007F0000; // 0111 1011
设置P2口的几位LED*/
IO2DIR=LEDCON1;
IO2SET=LEDCON1;
IO0DIR=LEDCON;
IO0SET=LEDCON;//灭P0口LED
for(i=0;i<8;i++)
{ if(rbuff[i]==i)
{
IO0CLR|=DISP_TAB[i]; //该段程序有时控制LED
delayns(50);} //有时候不会控制,当然满足
else; //if语句的条件下;DISP_TAB[i]
} //中的数据也没有问题
for(i=0;i<=5;i++)
{ if(rbuff[i+7]==(i+7))
{
IO2CLR=0;
IO2CLR|=DISP_TAB1[i]; //这段程序控制P2口的LED不
delayns(50); //出现上面的问题
}
}
for(i=0;i<8;i++)
{
dat_buff[0]=i; //这段程序控制P0口的LED也不会
IO0DIR=LEDCON; //出现问题
IO0SET=LEDCON;
IO0CLR=DISP_TAB[i];
delayns(200);
}
T1TCR&=0x00;
for(i=0;i<16;i++)duandian_buff[i]=0x11;
Write_CAT1025(CAT1025,50,8,duandian_buff);
}
如果把有问题段改写成
IO2DIR=LEDCON1;
IO2SET=LEDCON1;
for(i=0;i<8;i++)
{ if(rbuff[i]==i)
{
IO0DIR=LEDCON;
IO0SET=LEDCON;//灭P0口LED
IO0CLR|=DISP_TAB[i];
delayns(50);}
else;
}
P0口的GPIO 没有问题(满足if语句时每个LED都会亮一下),但是想让这几个LED逐个亮起,直到全部亮就实现不了
请问各位这个问题怎么解决!!!!我看了勘误表,也没有这个勘误信息啊!!!
答 1: 保护没?io其他的管脚保护没,例如ioset2|=0x10000000;
不保护可能出现这个问题 答 2: 已经试过我两种方法都试过,还是出现这种不可随心控制的局面,都有点怀疑lpc2200了
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |