搜索
bottom↓
回复: 0
打印 上一主题 下一主题

《DNK210使用指南 -CanMV版 V1.0》第十一章 FPIOA管理器实验

[复制链接]

出0入234汤圆

跳转到指定楼层
1
发表于 2024-9-7 11:23:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

1)实验平台:正点原子DNK210开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729



第十一章 FPIOA管理器实验


       本章实验将介绍如何使用CanMV内置的FPIOA管理器脚本来管理芯片内部功能和引脚的映射关系。通过本章的学习,读者将学习到CanMV内置的FPIOA管理器脚本的使用。
       本章分为如下几个小节:
       11.1 FPIOA和FPIOA管理器脚本介绍
       11.2 硬件设计
       11.3 程序设计
       11.4 运行验证

       11.1 FPIOA和FPIOA管理器脚本介绍
       FPIOA(Field Programmable Input and Output Array,现场可编程IO阵列)是Kendryte K210芯片内部的模块,FPIOA最主要的功能是允许用户将Kendryte K210芯片内部的255个功能映射到芯片外围的48个自由IO上,因为Kendryte K210芯片内部外设的功能与Kendryte K210引出的外部引脚是彼此独立的,这样的好处是IO引脚可以再不同时刻扮演不同的角色,极大地方便了软硬件的开发。
       FPIOA管理器脚本是CanMV提供的内置脚本,FPIOA管理器脚本能够帮助开发者将引脚与具体的硬件功能进行绑定或解绑,以及了解GPIO和GPIOHS的使用情况。FPIOA管理器脚本中提供了fm类,fm类中又提供了register()、unregister()和get_gpio_used()方法,下面分别介绍这几个方法的使用。
       register()方法用于将指定的内部功能注册到指定的引脚上,即将引脚与具体的硬件功能进行绑定,register()方法如下所示:
  1. fm.register(pin, function, force=True)
复制代码
       通过register()方法,可以很方便的为引脚分配相应的功能。
       pin是指定的引脚编号,Kendryte K210一共有48个自由IO,对应的引脚编号为0~47。
       function指的是具体的硬件功能,如fm.fpioa.GPIOHS0、fm.fpioa.I2C0_SDA等,更详细的硬件功能列表请见表11.1.1。
       force是“强制分配”的使能位,若该参数为“False”则无法对已分配硬件功能的引脚再次分配硬件功能,若该参数为“True”,则不论指定的引脚是都已经被分配硬件功能,都能再次为该引脚分配硬件功能。

表11.1.1 Kendryte K210 FPIOA硬件功能表

       egister()方法的使用示例如下所示:
  1. from board import board_info
  2. from fpioa_manager import fm

  3. fm.register(board_info.KEY0, fm.fpioa.GPIOHS0, force=True)
复制代码
       unregister()方法用于注销指定注册了内部功能的引脚,即将引脚与具体的硬件功能进行解绑,unregister()方法如下所示:
  1. fm.unregister(pin)
复制代码
       通过unregister()方法,可以很方便地释放引脚上分配的硬件功能,pin是指定的引脚编号。
       unregister()方法的使用示例如下所示:
  1. from board import board_info
  2. from fpioa_manager import fm

  3. fm.unregister(board_info.KEY0)
复制代码
       get_gpio_used()方法用于获取所有GPIO的使用情况,get_gpio_used()方法如下所示:
  1. fm.get_gpio_used()
复制代码
       通过get_gpio_used()方法可以很方便地获取GPIO和GPIOHS的引脚分配情况,None表示该硬件功能未被使用。
       get_gpio_used()方法是使用示例如下所示:
  1. >>> from fpioa_manager import fm
  2. >>> for item in fm.get_gpio_used():
  3. >>>     print(item)
  4. >>>
  5. ('fm.fpioa.GPIOHS0', None)
  6. ('fm.fpioa.GPIOHS1', None)
  7. ('fm.fpioa.GPIOHS2', None)
  8. ('fm.fpioa.GPIOHS3', None)
  9. ('fm.fpioa.GPIOHS4', None)
  10. ('fm.fpioa.GPIOHS5', None)
  11. ('fm.fpioa.GPIOHS6', None)
  12. ('fm.fpioa.GPIOHS7', None)
  13. ('fm.fpioa.GPIOHS8', None)
  14. ('fm.fpioa.GPIOHS9', None)
  15. ('fm.fpioa.GPIOHS10', None)
  16. ('fm.fpioa.GPIOHS11', None)
  17. ('fm.fpioa.GPIOHS12', None)
  18. ('fm.fpioa.GPIOHS13', None)
  19. ('fm.fpioa.GPIOHS14', None)
  20. ('fm.fpioa.GPIOHS15', None)
  21. ('fm.fpioa.GPIOHS16', None)
  22. ('fm.fpioa.GPIOHS17', None)
  23. ('fm.fpioa.GPIOHS18', None)
  24. ('fm.fpioa.GPIOHS19', None)
  25. ('fm.fpioa.GPIOHS20', None)
  26. ('fm.fpioa.GPIOHS21', None)
  27. ('fm.fpioa.GPIOHS22', None)
  28. ('fm.fpioa.GPIOHS23', None)
  29. ('fm.fpioa.GPIOHS24', None)
  30. ('fm.fpioa.GPIOHS25', None)
  31. ('fm.fpioa.GPIOHS26', None)
  32. ('fm.fpioa.GPIOHS27', None)
  33. ('fm.fpioa.GPIOHS28', None)
  34. ('fm.fpioa.GPIOHS29', 29)
  35. ('fm.fpioa.GPIOHS30', 37)
  36. ('fm.fpioa.GPIOHS31', 38)
  37. ('fm.fpioa.GPIO0', None)
  38. ('fm.fpioa.GPIO1', None)
  39. ('fm.fpioa.GPIO2', None)
  40. ('fm.fpioa.GPIO3', None)
  41. ('fm.fpioa.GPIO4', None)
  42. ('fm.fpioa.GPIO5', None)
  43. ('fm.fpioa.GPIO6', None)
  44. ('fm.fpioa.GPIO7', None)
复制代码

       11.2 硬件设计

       11.2.1 例程功能
       1. 使用register()方法为IO0引脚注册GPIOHS0功能,然后使用get_gpio_used()方法验证
       2. 使用unregister()方法注销IO0注册的硬件功能,然后使用get_gpio_used()方法验证

       11.2.2 硬件资源
       本章实验内容,主要讲解print()函数的使用,无需关注硬件资源。

       11.2.3 原理图
       本章实验内容,主要讲解print()函数的使用,无需关注原理图。

       11.3 程序设计

       11.3.1 FPIOA管理器脚本
       有关FPIOA管理器脚本的介绍,请见第11.1小节《FPIOA和FPIOA管理器脚本介绍》。

       11.3.2 程序流程图


图11.3.2.1 FPIOA管理器实验流程图

       11.3.3 main.py代码
       main.py中的脚本代码如下所示:
  1. from fpioa_manager import fm

  2. # 为IO0注册GPIOHS0功能
  3. fm.register(0, fm.fpioa.GPIOHS0)
  4. print(fm.get_gpio_used()[0])

  5. # 注销IO0注册的硬件功能
  6. fm.unregister(0)
  7. print(fm.get_gpio_used()[0])
复制代码
       可以看到,首先通过fm.register()方法为IO0注册了GPIOHS0的功能,因此接下来将获取到GPIOHS0的IO分配情况将会是IO0。
       接着使用fm.unregister()方法注销了IO0注册的硬件功能,因此接下来将获取到GPIOHS0的IO分配情况将会是None。

       11.4 运行验证
       将DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,可以看到“串行终端”窗口中输出了一系列信息,如下图所示:

图11.4.1 “串行终端”窗口打印输出

       可以看到,“串行终端”串口中先后分别显示了GPIOHS0的IO分配情况为IO0和None,这与理论推断的结果一致。

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-17 18:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表