共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在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |