共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |