查看: 154|回复: 3

[原创] 【Fireduino】Fireduino直接操作寄存器,为改屏做准备

[复制链接]

134

主题

2

好友

5017

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 1090 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 发帖机器勋章 在线之王勋章 论坛骨干勋章

    发表于 2016-12-16 17:48:50 |显示全部楼层
       上次为Fireduino扩展了个屏幕,使用的还是Arduino定义好的IO口。每个单独的Pin操作没有问题, 但是如果是并行输出数据的话,每次对一个口赋值,这样一个Byte数据要执行8次,一下子就把速度拉下来了。为了提高效率,只有直接对Port而不是Pin操作,才能最快速的一次输出数据,下面就在进一步的改造前做个试验,验证操作的方法和正确性。
        以前没有接触过Arduino,所以可能有些很普通的东西对我来说都是新鲜的,如有错误欢迎指正。

    1.png

        在大概看了看Fireduino的SDK库的Include文件后,锁定目标,就是这个ard_gpio.h,看名字就知道是它,所以就从这里看起。

    2.png

        打开这个文件,可以看到未提供源代码的库可以加载这个文件来引用。前面几个函数是对Pin的操作,这个不需要,重要的是后面几个。
      根据函数名称猜测一下,
      ard的几个函数就不用说了,跟Arduino的接口一样,
      _get_port是根据Pin的编号获取Port的名称,
      _get_mask就是获得这个Pin的位置,
      _get_dr应该是数据寄存器,就是输出高低电平的,
      _get_ind这个不知道,应该和中断有关,姑且不用
      _get_ddr那就是方向寄存器了,应该没问题。
    下面就写代码验证。

    3.png

        Fireduino有两个用户可以操作的LED,分别对应Arduino的3和13口,随便找一个举例。代码很简单,在编写过程中发现Fireduino SDK已经将这几个函数映射成为Arduino的标准函数,所以两种方法都可以。也就是
      digitalPinToPor = _get_port
      digitalPinToBitMask = _get_mask
      pinMode = ard_pin_mode
      portOutputRegister = _get_dr
        可以成功编译,并且能够打开关闭对应的灯。跟猜测的差不多,那么基本的IO口寄存器就可以这样来使用了。

        需要注意的一点是Port和Bit这两个类型,普通的Arduino中可以定义为unsigned char,而在Fireduino中必须为unsigned int,因为RKNanoD的引脚要多一些,一旦定义为unsigned char,在使用高端口的时候就会溢出,操作就不正确了,切记!

    回复

    使用道具 举报

    56

    主题

    1

    好友

    2064

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    昨天 12:46
  • 签到天数: 631 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 2016-12-16 18:16:10 |显示全部楼层
    Arduino的寄存器还真不会,谢谢分享
    回复

    使用道具 举报

    无效楼层,该帖已经被删除

    5

    主题

    1

    好友

    978

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 100 天

    [LV.6]常住居民II

    发表于 2016-12-17 09:17:22 |显示全部楼层
    谢谢分享               
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-3-25 10:08 , Processed in 0.175304 second(s), 14 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部