正文

ARM中的IOPIN控制IO输出用IOPIN的惨痛教训2008-10-21 10:26:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/niao0311/38996.html

分享到:

PHILIPS不建议采用IOPIN控制IO,主张用IOSET或IOCLR.感觉确实不方便,特别是在IO翻转时,肯定用Px->IOPIN ^= (1 << IOx)比if (Px->IOSET & (1 << IOx)) Px->IOCLR = (1 << IOx);else Px->IOSET = (1 << IOx);方便和快捷.一般不会出现问题情况...(软件仿真都不会出现问题!!!)但通过这2天的产品开发,发现用其IO翻转时,会清除其他IO...例:(前天出现没在意,认为不可能连续2行这样的语句)Px->IOPIN ^= (1 << IOx1);Px->IOPIN ^= (1 << IOx2);发现IOx1得不到翻转.Px->IOPIN ^= (1 << IOx2);Px->IOPIN ^= (1 << IOx1);发现IOx2得不到翻转.注意: 2个IO一高一低翻转无事!!!改为:if (Px->IOSET & (1 << IOx1)) Px->IOCLR = (1 << IOx1);else Px->IOSET = (1 << IOx1);_delay_loop_(1);//1uSif (Px->IOSET & (1 << IOx2)) Px->IOCLR = (1 << IOx2);else Px->IOSET = (1 << IOx2);IOx1,IOx2都可翻转.今天又出现了://    WDPORT->IOPIN ^= (1 << WDI);//不敢用!!!应该换成下列2行    if (WDPORT->IOSET & (1 << WDI)) WDPORT->IOCLR = (1 << WDI);     else WDPORT->IOSET = (1 << WDI);发现用IOPIN翻转P0.31被莫名其妙地清零!!!想自己还是菜鸟,还是请教老鸟,但老鸟加了上拉电阻...当时虽知道P0.31可作为只出的IO使用,通过现象怀疑是开漏输出(晕菜)...加上拉及小电容都未果!!!检查了所有操作P0.31的地方,只有初始化一处!!!后来就想可能与前天IOPIN翻转IO有关,改成IOSET或IOCLR后,立即见效!!!哈哈,程序开始稳定地运行了...看来违法乱纪的事情还是少做为妙...

阅读(6045) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册