查看: 3222|回复: 6

【PSoC3心得】GPIO输出函数注意事项

[复制链接]
  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-23 21:15:24 | 显示全部楼层 |阅读模式
    分享到:
      首先请允许我说:“老子信了你的邪!”
      注意控制情绪,不过每次出现各种蛋疼问题(但是一解决才发现是那么简单的细节问题),我还是希望可以释放下情绪。
      这是一个关于PSoC的GPIO的故事,故事的开始可以模拟串行时序说起。
      用软件模拟各种通信协议是每一个单片机初学者会做的事,这可以让我们对时序更加了解。比如,用软件模拟SPI时序。SPI有MSB传输和LSB传输,当我们要模拟MSB传输时,我们怎么做呢?用51时,我们会这样写MOSI = (txData & 0x80),然后再移位,等等。用PSoC时我们当然也可以这样做,因为IDE生成了API,于是我们可能会这样写MOSI_Write(txData & 0x80)。好像很合理吧!恩,我也觉得很合理,于是乎我被很合理地整了,于是乎我很合理地花半天时间来调试一个刚刚在另外一款单片机调试成功的代码,于是乎我很合理的在这里写检讨。
      为什么错呢?首先问一下txData & 0x80是多少呢?无非是0和1嘛!错,又错了,是0和0x80!对,因为我们一直想着要对IO口写0或1,于是我们连这个这么明显的问题都懒得思考,直接躺枪。对一个IO口写0x80是什么呢?IO口只能写0或1,写任意非0的数他怎么处理呢?那完全要看API函数怎么写了。我们来看下PSoC的GPIO写函数是如何实现的吧!
    1. void MOSI_Write(uint8 value)
    2. {
    3. uint8 staticBits = MOSI_DR & ~MOSI_MASK;
    4. MOSI_DR = staticBits | ((value << MOSI_SHIFT) & MOSI_MASK);
    5. }
    复制代码
    value << MOSI_SHIFT,先将value的最低位(注意:是最低位)移到IO口对应的地址偏移,再& MOSI_MASK。于是,其实value所有有效的数据其实只是其最低位,其他位根本无效,写0x80还是和写0是一样的。好吧,就是这么个细节问题,却可以让忽然间对自己的智商表示很怀疑,忽然间觉得1+1是不是等于1.
      好吧,老子信了你的邪!在最后给出改进方案吧:很简单,数据类型强制转换 MOSI_Write((bit)(value & 0x80))
      
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-8-23 22:09
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-8-23 22:49:22 | 显示全部楼层
    3和4的区别到底在哪??
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2013-8-4 18:50
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-8-23 23:39:16 | 显示全部楼层
    haojingyan
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-23 23:49:56 | 显示全部楼层
    小王子 发表于 2013-8-23 22:49
    3和4的区别到底在哪??

    这个...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-23 23:50:40 | 显示全部楼层
    zca123 发表于 2013-8-23 23:39
    haojingyan

    请使用合法汉语
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-11 11:26
  • 签到天数: 1982 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-8-30 12:00:16 | 显示全部楼层
    3和4区别应该是内核不同吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-30 17:50:57 | 显示全部楼层
    feiante 发表于 2013-8-30 12:00
    3和4区别应该是内核不同吧

    主要是这个啦
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 16:09 , Processed in 0.166277 second(s), 27 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.