单片机/MCUwilliam hill官网
直播中

jf_85110202

未满1年用户 71经验值
擅长:嵌入式技术 开发板 仪表仪器 单片机
私信 关注
[资料]

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

第十一章 FPIOA管理器实验
本章实验将介绍如何使用CanMV内置的FPIOA管理器脚本来管理芯片内部功能和引脚的映射关系。通过本章的学习,读者将学习到CanMV内置的FPIOA管理器脚本的使用。
本章分为如下几个小节:
11.1 FPIOAFPIOA管理器脚本介绍
11.2 硬件设计
11.3 程序设计
11.4 运行验证
11.1 FPIOAFPIOA管理器脚本介绍
FPIOAField Programmable Input and Output Array,现场可编程IO阵列)是Kendryte K210芯片内部的模块,FPIOA最主要的功能是允许用户将Kendryte K210芯片内部的255个功能映射到芯片外围的48个自由IO上,因为Kendryte K210芯片内部外设的功能与Kendryte K210引出的外部引脚是彼此独立的,这样的好处是IO引脚可以再不同时刻扮演不同的角色,极大地方便了软硬件的开发。
FPIOA管理器脚本是CanMV提供的内置脚本,FPIOA管理器脚本能够帮助开发者将引脚与具体的硬件功能进行绑定或解绑,以及了解GPIOGPIOHS的使用情况。FPIOA管理器脚本中提供了fm类,fm类中又提供了register()unregister()get_gpio_used()方法,下面分别介绍这几个方法的使用。
register()方法用于将指定的内部功能注册到指定的引脚上,即将引脚与具体的硬件功能进行绑定,register()方法如下所示:
fm.register(pin, function, force=True)
通过register()方法,可以很方便的为引脚分配相应的功能。
pin是指定的引脚编号,Kendryte K210一共有48个自由IO,对应的引脚编号为0~47
function指的是具体的硬件功能,如fm.fpioa.GPIOHS0fm.fpioa.I2C0_SDA等,更详细的硬件功能列表请见表11.1.1
force“强制分配”的使能位,若该参数为“False”则无法对已分配硬件功能的引脚再次分配硬件功能,若该参数为“True”,则不论指定的引脚是都已经被分配硬件功能,都能再次为该引脚分配硬件功能。
硬件功能
描述
硬件功能
描述
JTAG_TCLK
JTAG Test Clock
I2S1_IN_D1
I2S1 Serial Data Input 1
JTAG_TDI
JTAG Test Data In
I2S1_IN_D2
I2S1 Serial Data Input 2
JTAG_TMS
JTAG Test Mode Select
I2S1_IN_D3
I2S1 Serial Data Input 3
JTAG_TDO
JTAG Test Data Out
I2S1_OUT_D0
I2S1 Serial Data Output 0
SPI0_D0
SPI0 Data 0
I2S1_OUT_D1
I2S1 Serial Data Output 1
SPI0_D1
SPI0 Data 1
I2S1_OUT_D2
I2S1 Serial Data Output 2
SPI0_D2
SPI0 Data 2
I2S1_OUT_D3
I2S1 Serial Data Output 3
SPI0_D3
SPI0 Data 3
I2S2_MCLK
I2S2 Master Clock
SPI0_D4
SPI0 Data 4
I2S2_SCLK
I2S2 Serial Clock(BCLK)
SPI0_D5
SPI0 Data 5
I2S2_WS
I2S2 Word Select(LRCLK)
SPI0_D6
SPI0 Data 6
I2S2_IN_D0
I2S2 Serial Data Input 0
SPI0_D7
SPI0 Data 7
I2S2_IN_D1
I2S2 Serial Data Input 1
SPI0_SS0
SPI0 Chip Select 0
I2S2_IN_D2
I2S2 Serial Data Input 2
SPI0_SS1
SPI0 Chip Select 1
I2S2_IN_D3
I2S2 Serial Data Input 3
SPI0_SS2
SPI0 Chip Select 2
I2S2_OUT_D0
I2S2 Serial Data Output 0
SPI0_SS3
SPI0 Chip Select 3
I2S2_OUT_D1
I2S2 Serial Data Output 1
SPI0_ARB
SPI0 Arbitration
I2S2_OUT_D2
I2S2 Serial Data Output 2
SPI0_SCLK
SPI0 Serial Clock
I2S2_OUT_D3
I2S2 Serial Data Output 3
UARTHS_RX
UART High speed Receiver
RESV0
Reserved function
UARTHS_TX
UART High speed Transmitter
RESV1
Reserved function
RESV6
Reserved function
RESV2
Reserved function
RESV7
Reserved function
RESV3
Reserved function
CLK_SPI1
Clock SPI1
RESV4
Reserved function
CLK_I2C1
Clock I2C1
RESV5
Reserved function
GPIOHS0
GPIO High speed 0
I2C0_SCLK
I2C0 Serial Clock
GPIOHS1
GPIO High speed 1
I2C0_SDA
I2C0 Serial Data
GPIOHS2
GPIO High speed 2
I2C1_SCLK
I2C1 Serial Clock
GPIOHS3
GPIO High speed 3
I2C1_SDA
I2C1 Serial Data
GPIOHS4
GPIO High speed 4
I2C2_SCLK
I2C2 Serial Clock
GPIOHS5
GPIO High speed 5
I2C2_SDA
I2C2 Serial Data
GPIOHS6
GPIO High speed 6
CMOS_XCLK
DVP System Clock
GPIOHS7
GPIO High speed 7
CMOS_RST
DVP System Reset
GPIOHS8
GPIO High speed 8
CMOS_PWDN
DVP Power Down Mode
GPIOHS9
GPIO High speed 9
CMOS_VSYNC
DVP Vertical Sync
GPIOHS10
GPIO High speed 10
CMOS_HREF
DVP Horizontal Reference output
GPIOHS11
GPIO High speed 11
CMOS_PCLK
Pixel Clock
GPIOHS12
GPIO High speed 12
CMOS_D0
Data Bit 0
GPIOHS13
GPIO High speed 13
CMOS_D1
Data Bit 1
GPIOHS14
GPIO High speed 14
CMOS_D2
Data Bit 2
GPIOHS15
GPIO High speed 15
CMOS_D3
Data Bit 3
GPIOHS16
GPIO High speed 16
CMOS_D4
Data Bit 4
GPIOHS17
GPIO High speed 17
CMOS_D5
Data Bit 5
GPIOHS18
GPIO High speed 18
CMOS_D6
Data Bit 6
GPIOHS19
GPIO High speed 19
CMOS_D7
Data Bit 7
GPIOHS20
GPIO High speed 20
SCCB_SCLK
SCCB Serial Clock
GPIOHS21
GPIO High speed 21
SCCB_SDA
SCCB Serial Data
GPIOHS22
GPIO High speed 22
UART1_CTS
UART1 Clear To Send
GPIOHS23
GPIO High speed 23
UART1_DSR
UART1 Data Set Ready
GPIOHS24
GPIO High speed 24
UART1_DCD
UART1 Data Carrier Detect
GPIOHS25
GPIO High speed 25
UART1_RI
UART1 Ring Indicator
GPIOHS26
GPIO High speed 26
UART1_SIR_IN
UART1 Serial Infrared Input
GPIOHS27
GPIO High speed 27
UART1_DTR
UART1 Data Terminal Ready
GPIOHS28
GPIO High speed 28
UART1_RTS
UART1 Request To Send
GPIOHS29
GPIO High speed 29
UART1_OUT2
UART1 User-designated Output 2
GPIOHS30
GPIO High speed 30
UART1_OUT1
UART1 User-designated Output 1
GPIOHS31
GPIO High speed 31
UART1_SIR_OUT
UART1 Serial Infrared Output
GPIO0
GPIO pin 0
UART1_BAUD
UART1 Transmit Clock Output
GPIO1
GPIO pin 1
UART1_RE
UART1 Receiver Output Enable
GPIO2
GPIO pin 2
UART1_DE
UART1 Driver Output Enable
GPIO3
GPIO pin 3
UART1_RS485_EN
UART1 RS485 Enable
GPIO4
GPIO pin 4
UART2_CTS
UART2 Clear To Send
GPIO5
GPIO pin 5
UART2_DSR
UART2 Data Set Ready
GPIO6
GPIO pin 6
UART2_DCD
UART2 Data Carrier Detect
GPIO7
GPIO pin 7
UART2_RI
UART2 Ring Indicator
UART1_RX
UART1 Receiver
UART2_SIR_IN
UART2 Serial Infrared Input
UART1_TX
UART1 Transmitter
UART2_DTR
UART2 Data Terminal Ready
UART2_RX
UART2 Receiver
UART2_RTS
UART2 Request To Send
UART2_TX
UART2 Transmitter
UART2_OUT2
UART2 User-designated Output 2
UART3_RX
UART3 Receiver
UART2_OUT1
UART2 User-designated Output 1
UART3_TX
UART3 Transmitter
UART2_SIR_OUT
UART2 Serial Infrared Output
SPI1_D0
SPI1 Data 0
UART2_BAUD
UART2 Transmit Clock Output
SPI1_D1
SPI1 Data 1
UART2_RE
UART2 Receiver Output Enable
SPI1_D2
SPI1 Data 2
UART2_DE
UART2 Driver Output Enable
SPI1_D3
SPI1 Data 3
UART2_RS485_EN
UART2 RS485 Enable
SPI1_D4
SPI1 Data 4
UART3_CTS
UART3 Clear To Send
SPI1_D5
SPI1 Data 5
UART3_DSR
UART3 Data Set Ready
SPI1_D6
SPI1 Data 6
UART3_DCD
UART3 Data Carrier Detect
SPI1_D7
SPI1 Data 7
UART3_RI
UART3 Ring Indicator
SPI1_SS0
SPI1 Chip Select 0
UART3_SIR_IN
UART3 Serial Infrared Input
SPI1_SS1
SPI1 Chip Select 1
UART3_DTR
UART3 Data Terminal Ready
SPI1_SS2
SPI1 Chip Select 2
UART3_RTS
UART3 Request To Send
SPI1_SS3
SPI1 Chip Select 3
UART3_OUT2
UART3 User-designated Output 2
SPI1_ARB
SPI1 Arbitration
UART3_OUT1
UART3 User-designated Output 1
SPI1_SCLK
SPI1 Serial Clock
UART3_SIR_OUT
UART3 Serial Infrared Output
SPI_SLAVE_D0
SPI Slave Data 0
UART3_BAUD
UART3 Transmit Clock Output
SPI_SLAVE_SS
SPI Slave Select
UART3_RE
UART3 Receiver Output Enable
SPI_SLAVE_SCLK
SPI Slave Serial Clock
UART3_DE
UART3 Driver Output Enable
I2S0_MCLK
I2S0 Master Clock
UART3_RS485_EN
UART3 RS485 Enable
I2S0_SCLK
I2S0 Serial Clock(BCLK)
TIMER0_TOGGLE1
TIMER0 Toggle Output 1
I2S0_WS
I2S0 Word Select(LRCLK)
TIMER0_TOGGLE2
TIMER0 Toggle Output 2
I2S0_IN_D0
I2S0 Serial Data Input 0
TIMER0_TOGGLE3
TIMER0 Toggle Output 3
I2S0_IN_D1
I2S0 Serial Data Input 1
TIMER0_TOGGLE4
TIMER0 Toggle Output 4
I2S0_IN_D2
I2S0 Serial Data Input 2
TIMER1_TOGGLE1
TIMER1 Toggle Output 1
I2S0_IN_D3
I2S0 Serial Data Input 3
TIMER1_TOGGLE2
TIMER1 Toggle Output 2
I2S0_OUT_D0
I2S0 Serial Data Output 0
TIMER1_TOGGLE3
TIMER1 Toggle Output 3
I2S0_OUT_D1
I2S0 Serial Data Output 1
TIMER1_TOGGLE4
TIMER1 Toggle Output 4
I2S0_OUT_D2
I2S0 Serial Data Output 2
TIMER2_TOGGLE1
TIMER2 Toggle Output 1
I2S0_OUT_D3
I2S0 Serial Data Output 3
TIMER2_TOGGLE2
TIMER2 Toggle Output 2
I2S1_MCLK
I2S1 Master Clock
TIMER2_TOGGLE3
TIMER2 Toggle Output 3
I2S1_SCLK
I2S1 Serial Clock(BCLK)
TIMER2_TOGGLE4
TIMER2 Toggle Output 4
I2S1_WS
I2S1 Word Select(LRCLK)
CLK_SPI2
Clock SPI2
I2S1_IN_D0
I2S1 Serial Data Input 0
CLK_I2C2
Clock I2C2
11.1.1 Kendryte K210 FPIOA硬件功能表
register()方法的使用示例如下所示:
from board import board_info
from fpioa_manager import fm
fm.register(board_info.KEY0, fm.fpioa.GPIOHS0, force=True)
unregister()方法用于注销指定注册了内部功能的引脚,即将引脚与具体的硬件功能进行解绑,unregister()方法如下所示:
fm.unregister(pin)
通过unregister()方法,可以很方便地释放引脚上分配的硬件功能,pin是指定的引脚编号。
unregister()方法的使用示例如下所示:
from board import board_info
from fpioa_manager import fm
fm.unregister(board_info.KEY0)
get_gpio_used()方法用于获取所有GPIO的使用情况,get_gpio_used()方法如下所示:
fm.get_gpio_used()
通过get_gpio_used()方法可以很方便地获取GPIOGPIOHS的引脚分配情况,None表示该硬件功能未被使用。
get_gpio_used()方法是使用示例如下所示:
>>> from fpioa_manager import fm
>>> for item in fm.get_gpio_used():
>>>     print(item)
>>>
('fm.fpioa.GPIOHS0', None)
('fm.fpioa.GPIOHS1', None)
('fm.fpioa.GPIOHS2', None)
('fm.fpioa.GPIOHS3', None)
('fm.fpioa.GPIOHS4', None)
('fm.fpioa.GPIOHS5', None)
('fm.fpioa.GPIOHS6', None)
('fm.fpioa.GPIOHS7', None)
('fm.fpioa.GPIOHS8', None)
('fm.fpioa.GPIOHS9', None)
('fm.fpioa.GPIOHS10', None)
('fm.fpioa.GPIOHS11', None)
('fm.fpioa.GPIOHS12', None)
('fm.fpioa.GPIOHS13', None)
('fm.fpioa.GPIOHS14', None)
('fm.fpioa.GPIOHS15', None)
('fm.fpioa.GPIOHS16', None)
('fm.fpioa.GPIOHS17', None)
('fm.fpioa.GPIOHS18', None)
('fm.fpioa.GPIOHS19', None)
('fm.fpioa.GPIOHS20', None)
('fm.fpioa.GPIOHS21', None)
('fm.fpioa.GPIOHS22', None)
('fm.fpioa.GPIOHS23', None)
('fm.fpioa.GPIOHS24', None)
('fm.fpioa.GPIOHS25', None)
('fm.fpioa.GPIOHS26', None)
('fm.fpioa.GPIOHS27', None)
('fm.fpioa.GPIOHS28', None)
('fm.fpioa.GPIOHS29', 29)
('fm.fpioa.GPIOHS30', 37)
('fm.fpioa.GPIOHS31', 38)
('fm.fpioa.GPIO0', None)
('fm.fpioa.GPIO1', None)
('fm.fpioa.GPIO2', None)
('fm.fpioa.GPIO3', None)
('fm.fpioa.GPIO4', None)
('fm.fpioa.GPIO5', None)
('fm.fpioa.GPIO6', None)
('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小节《FPIOAFPIOA管理器脚本介绍》。
11.3.2 程序流程图
第十一章 FPIOA管理器实验9251.png

11.3.2.1 FPIOA管理器实验流程图
11.3.3 main.py代码
main.py中的脚本代码如下所示:
from fpioa_manager import fm
# IO0注册GPIOHS0功能
fm.register(0, fm.fpioa.GPIOHS0)
print(fm.get_gpio_used()[0])
# 注销IO0注册的硬件功能
fm.unregister(0)
print(fm.get_gpio_used()[0])
可以看到,首先通过fm.register()方法为IO0注册了GPIOHS0的功能,因此接下来将获取到GPIOHS0IO分配情况将会是IO0
接着使用fm.unregister()方法注销了IO0注册的硬件功能,因此接下来将获取到GPIOHS0IO分配情况将会是None
11.4 运行验证
DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,可以看到“串行终端”窗口中输出了一系列信息,如下图所示:
第十一章 FPIOA管理器实验9715.png
11.4.1 “串行终端”窗口打印输出
可以看到,“串行终端”串口中先后分别显示了GPIOHS0IO分配情况为IO0None,这与理论推断的结果一致。

更多回帖

发帖
×
20
完善资料,
赚取积分