打印

第一个arm程序就失败了,请指点一下

[复制链接]
2037|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-10-13 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, TE, IO, ios, LED
一个流水灯,
void led_show()
{
  ulint temp;          //用来移位
  IODIR0 = 0x00000000; //设置输入
  temp = IOPIN0;       //把当前值读回来,避免用全局变量
  temp = temp << 1;     //移位
  
  if ( temp == 0x00000100 )//如果移动到一定长度
    temp = 0x00000001;
    
  IODIR0 = 0xffffffff; //再设置成输出
  IOSET0 = temp;       //设置1位
  IOCLR0 = ~temp;      //设置0位
}
这个函数前有一个
IODIR0 = 0xffffffff; //初始化中设置成输出
  IOSET0 =0x00000001;//设置1位
灯只闪了一下,
我第一次进led_show() temp读端口状态为全0,应该为0x00000001,为什么呢?请指点,谢谢.

相关帖子

沙发
huangqi412|  楼主 | 2007-10-13 18:00 | 只看该作者

请指点,,

IODIR0 = 0x00000000; //设置输入
  temp = IOPIN0;       //把当前值读回来,避免用全局变量
这里读回来的是全0,此时led是亮的,应该最低位1,为什么呢,请指点,谢谢

使用特权

评论回复
板凳
wangkj| | 2007-10-13 19:27 | 只看该作者

voliatle 变量,可能的原因。

使用特权

评论回复
地板
computer00| | 2007-10-13 19:43 | 只看该作者

IODIR0 = 0x00000000; //设置输入 这条删掉试试 ~~~~~~~~~~

使用特权

评论回复
5
hotpower| | 2007-10-13 20:17 | 只看该作者

在IO操作时不想全局就应该静态,不要随意改变IO的状态

在IO操作时不想全局就应该静态,不要随意改变IO的状态

不要养成这个坏习惯~~~
void led_show_init()
{
  IODIR0 = 0xffffffff; //输出
  IOCLR0 = 0xffffffff; //清零
  IOSET0 = 1; //置1(开始显示位0)
}

void led_show()
{
  static ulint temp = 1;          //用来移位
  IOCLR0 = temp; //清除当前位(关显示,实际只有1位)
  temp = temp << 1;     //移位(俺喜欢temp <<= 1)
  if ( temp == 0x00000100 )//如果移动到一定长度
    temp = 0x00000001;//重新循环
  IOSET0 = temp;       //设置1位(开显示,实际只有1位)
}


void led_show()
{
  static ulint temp = 0;          //用位来计数
  IOCLR0 = (1 << temp); //清除当前位(关显示,实际只有1位)
  temp = temp + 1;     //移位(俺喜欢temp ++;和temp += 1)
  if ( temp >= 2 )//如果移动到一定位数
  {
    temp = 0;//重新循环
  }
  IOSET0 = (1 << temp);       //设置1位(开显示,实际只有1位)
}

使用特权

评论回复
6
huangqi412|  楼主 | 2007-10-13 20:41 | 只看该作者

hotpower大叔都来了,谢谢,

用静态我还是知道,也试了,只用输出没问题,我主要是测试io的基本输入输出,特意用的,输入没搞定.
我发现好象lpc21xx怎么好难读io的,一不小心就成了0
如上面程序,我先置输出状态,输出一个1,但是切换成输入状态再读,发现会是0
还有 将一个io置输入,1个10k上拉到vcc,居然会读成0,如果减小到2k的话,读出来是1,
不知道io口内部结构什么样.

使用特权

评论回复
7
hotpower| | 2007-10-13 20:50 | 只看该作者

切换不要立即读,加NOP()

总之读PIN前面不要见到
  IODIR0 = 0xffffffff; //输出
  IOCLR0 = 0xffffffff; //清零
  IOSET0 = 1; //置1(开始显示位0)
等涉及操作硬件的指令.

否则应该加1~3个NOP().
在DSP中读IO很重要~~~

使用特权

评论回复
8
hotpower| | 2007-10-13 20:55 | 只看该作者

关于上拉电阻的选取问题

一般不涉及低功耗时,为了系统的稳定,阻值小了更好.
选4.7K居多.

"经典"一般取10K.

使用特权

评论回复
9
huangqi412|  楼主 | 2007-10-13 21:01 | 只看该作者

哦,倒是和51,avr有些不同啊,感觉麻烦一些,谢谢hotpower

使用特权

评论回复
10
hotpower| | 2007-10-13 21:05 | 只看该作者

哈哈~~~到底ARM要快多了,肯定有区别~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝