您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF592技术支持专区 -> bf592-edu 板子的pf8引脚无法读得输入
本帖共有745个阅读者
发表帖子 发表投票 回复主题
bf592-edu 板子的pf8引脚无法读得输入
Runner(论坛新手)
Runner
头衔:社区公民
帮派:无帮无派
帖数:29
金钱:332
积分:36
注册时间:2012/10/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
bf592-edu 板子的pf8引脚无法读得输入
我将pf8引脚连到了一个key上,但按下key的时候无法从pf8引脚获得输入。

pf9和pf10都没有问题。

请问这是什么原因?

我看了原理图,pf8连到了AD-EZICE的15引脚,并外接了一个LED,所以,我按KEY的时候,EZICE的LED会亮,这说明pf8引脚是低电压,但为何我在*pPORTFIO里读不到相应的数据呢?

pPORTF_FER,pPORTFIO_DIR,pPORTFIO_INEN等寄存器都设置正确。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/11/2 9:46:09
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如果你是用仿真器运行的代码,PF8可以正常工作,如果你是将代码写入SPIflash,由于PF8为SPISEL2脚,在flash启动时,需要通过这个脚来读取flash的数据,会与你的IO功能冲突,故无法使用。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/11/2 9:54:27
Runner(论坛新手)
Runner
头衔:社区公民
帮派:无帮无派
帖数:29
金钱:332
积分:36
注册时间:2012/10/9
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我是用510ice仿真器运行的代码。而且我的SW1开关也已经拨成了OFF。这样也会有影响吗?

pf8无法读取,无论我如何按key,我读到的pf8永远是高电平。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/11/2 10:45:44
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你把你的代码贴上来我看看


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/11/2 21:59:09
Runner(论坛新手)
Runner
头衔:社区公民
帮派:无帮无派
帖数:29
金钱:332
积分:36
注册时间:2012/10/9
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
key.c

// key Variables
unsigned int key_counter[4]={0,0,0,0};
unsigned int key_threshold= (KEY_THRESHOLD_MS * 1000) / TIMER0_INTP;
unsigned short key_value=0;

short Key_Pressed(unsigned short key)
{
if (key_value & key)
{
key_value &= ~key;
return 1;
}
else return 0;
}

unsigned char Get_Key_Index(unsigned short key)
{
unsigned char key_index=0;
switch (key)
{
case KEY0:
key_index=0;
break;

case KEY1:
key_index=1;
break;

case KEY2:
key_index=2;
break;
case KEY3:
key_index=3;
break;
}
return key_index;
}

short Key_Counter_Chk(unsigned char index)
{
if (key_counter[index]>=key_threshold)
{
key_counter[index]=0;
return 1;
}
else
{
key_counter[index]=0;
return 0;
}
}

void KEY_Proc(unsigned short key)
{
unsigned char index = Get_Key_Index(key);
if ((key & KEYIO)==0)
key_counter[index] += 1;
else
{
if (Key_Counter_Chk(index))
key_value |= key;
}
}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/11/2 23:31:51
Runner(论坛新手)
Runner
头衔:社区公民
帮派:无帮无派
帖数:29
金钱:332
积分:36
注册时间:2012/10/9
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
timer0.c

/*************************************************

Timer0 Service Routine

*************************************************/
EX_INTERRUPT_HANDLER(Timer0_ISR)
{

// KEY Routine Start
KEY_Proc(KEY0);
KEY_Proc(KEY1);
KEY_Proc(KEY2);
KEY_Proc(KEY3);
// KEY Routine End
}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/11/2 23:33:14
Runner(论坛新手)
Runner
头衔:社区公民
帮派:无帮无派
帖数:29
金钱:332
积分:36
注册时间:2012/10/9
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
在timer0的中断里,不停地呼叫KEY_Proc,进行软件滤波。

而在KEY_Proc的实现函数中,当key=KEY0,也就是PF8时,KEYIO永远不会给出相应位置的低电平。

其中KEYIO是一个宏,就是*pPORTFIO。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/11/2 23:37:21
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

不好意思,没看到这个帖子的回复。

你的代码中没有配置IO端口功能,通常这个文件位于CPU.C中,我给你改了一个PF8和PF9控制LED的代码,已测试过,你将PG0~PG7连接LED0~7   ,将PF8和PF9连接按键S1和S2。然后运行代码,按PF8和PF9键,看对LED的控制。


上传的附件
   2012119913468.rar [ 32.20 KB ]


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/11/9 9:13:22
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154321 Call, 1 Queries, Processed in 0.015625 second(s),