当前位置: 首页 > news >正文

.net网站开发的例子沈阳关键词seo排名

.net网站开发的例子,沈阳关键词seo排名,临沭有做网站的吗,wordpress 好用的插件推荐文章目录 前言一、FPIOA是什么?二、FPIOA代码分析总结 前言 磨刀不误砍柴工,在正式开始学习之前,我们先来了解下K210自带的FPIOA,这个概念可能与我们之前学习STM32有很多不同,STM32每个引脚都有特定的功能&#xff0c…

文章目录

  • 前言
  • 一、FPIOA是什么?
  • 二、FPIOA代码分析
  • 总结


前言

磨刀不误砍柴工,在正式开始学习之前,我们先来了解下K210自带的FPIOA,这个概念可能与我们之前学习STM32有很多不同,STM32每个引脚都有特定的功能,我们只需要对引脚进行配置后使用即可(配置其寄存器,进行输入/输出/上拉/下拉等)。使用FPIOA(现场可编程 IO 阵列),可能需要我们先从思维模式上做个转变,下面我们一起来看看吧;


一、FPIOA是什么?

引用下官方文档的说法:FPIOA(现场可编程 IO 阵列)允许用户将 255 个内部功能映射到芯片外围的 48 个自由 IO 上。
这个功能可以说的神秘点叫:硬件软件功能绑定,接口映射。简单的理解:其实这东西有点像STM32或者其他芯片上的引脚复用(因为复用这东西我们熟悉),即一个引脚有多个功能可以选择;只不过这48个IO口的可复用功能更多,有255个功能可选;有没有理解?如果没有理解,我们来追踪下FPIOA的代码实现瞅瞅!开源真好,哈哈哈哈。

二、FPIOA代码分析

对应的头文件 fpioa.h
总共为用户提供以下接口

• fpioa_set_function  //设置 IO0-IO47 管脚复用功能
• fpioa_get_io_by_function //根据功能号获取 IO 管脚号
• fpioa_set_io   //设置 IO 管脚的配置
• fpioa_get_io   //获得 IO 管脚的配置
• fpioa_set_tie_enable   //使能或禁用 FPIOA 功能输入信号的强制输入电平功能
• fpioa_set_tie_value   //设置 FPIOA 功能输入信号的强制输入电平高或者低,仅在强制输入电平功能启用时生效
• fpioa_set_io_pull    //设置 IO 的上拉下拉
• fpioa_get_io_pull  //获取 IO 管脚上下拉值
• fpioa_set_io_driving  //设置 IO 管脚的驱动能力
• fpioa_get_io_driving   //获取驱动能力

我们分析的话要从fpioa_set_function这个开始,一起看着代码;下方代码调用fpioa_set_function ,传入两个参数,一个是硬件IO的索引号,另外一个是要绑定的功能的索引,其中FUNC_GPIO1是固件中预定义好的功能索引号,可以查看fpioa.h文件

/*****************************HEAR-FILE************************************/
#include "fpioa.h"/*****************************HARDWARE-PIN*********************************/
// 硬件IO口,与原理图对应
#define PIN_RGB_R             (12)
#define PIN_RGB_G             (13)
#define PIN_RGB_B             (14)/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应
#define RGB_R_GPIONUM          (0)
#define RGB_G_GPIONUM          (1)
#define RGB_B_GPIONUM          (2)/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口
#define FUNC_RGB_R             (FUNC_GPIO0+ RGB_R_GPIONUM)
#define FUNC_RGB_G             (FUNC_GPIO0+ RGB_G_GPIONUM)
#define FUNC_RGB_B             (FUNC_GPIO0+ RGB_B_GPIONUM)void hardware_init(void)
{// fpioa映射fpioa_set_function(PIN_RGB_R, FUNC_RGB_R);fpioa_set_function(PIN_RGB_G, FUNC_RGB_G);fpioa_set_function(PIN_RGB_B, FUNC_RGB_B);}

可能大家在看#define FUNC_RGB_R这类宏定义的时候会很疑惑,那我换个写法大家可能看的更明白。但是我为什么要写成上面的这种FUNC_GPIO0+ RGB_B_GPIONUM形式那?因为做完绑定和初始化后,设置io时候只需要传入其索引号(即RGB_B_GPIONUM),那么使用就会简单些,如下写法只是为了方便大家理解。全量代码可以查看AI嵌入式K210项目(3)-GPIO控制

#define FUNC_RGB_R             (FUNC_GPIO0)
#define FUNC_RGB_G             (FUNC_GPIO1)
#define FUNC_RGB_B             (FUNC_GPIO2)

那么这个索引编号是不是可以无限编下去那?NO,通用IO就8个,在用就只能用高速IO了,下图看看GPIO High speed,这个绑定硬件引脚功能的操作理解了吗?
在这里插入图片描述
下面看看是如何实现的吧,我直接在代码里注释吧,这样你们看起来省事些。

int fpioa_set_function(int number, fpioa_function_t function)
{uint8_t index = 0;/* Check parameters FPIOA_NUM_IO为引脚数量48, FUNC_MAX为支持的功能数256*///检查引脚编号和功能编号是否超出限制if(number < 0 || number >= FPIOA_NUM_IO || function < 0 || function >= FUNC_MAX)return -1;//如果指定引脚number要绑定的功能为FUNC_RESV0,则直接调用fpioa_set_function_raw(number, FUNC_RESV0)if(function == FUNC_RESV0) {fpioa_set_function_raw(number, FUNC_RESV0);return 0;}/* Compare all IO *///如果指定引脚number要绑定的是其他功能,则会遍历所有引脚的功能配置,如果有其他引脚绑定着这个功能,则会将其他引脚的功能设置为FUNC_RESV0for(index = 0; index < FPIOA_NUM_IO; index++){if((fpioa->io[index].ch_sel == function) && (index != number))fpioa_set_function_raw(index, FUNC_RESV0);}//如果上面的情况都不是,那么调用fpioa_set_function_raw(number, function)配置引脚number为指定功能fpioa_set_function_raw(number, function);return 0;
}

可以看到如果不出现异常情况,最终正常处理的流程会调用fpioa_set_function_raw(),一起来看看这个函数的实现吧。

int fpioa_set_function_raw(int number, fpioa_function_t function)
{/* Check parameters */// 在检测一波引脚编号和功能编号是否超出限制if(number < 0 || number >= FPIOA_NUM_IO || function < 0 || function >= FUNC_MAX)return -1;/* Atomic write register *///如果没问题,把你传进来的function参数赋值给你定的硬件num上。fpioa->io[number] = (const fpioa_io_config_t){.ch_sel = function_config[function].ch_sel,.ds = function_config[function].ds,.oe_en = function_config[function].oe_en,.oe_inv = function_config[function].oe_inv,.do_sel = function_config[function].do_sel,.do_inv = function_config[function].do_inv,.pu = function_config[function].pu,.pd = function_config[function].pd,.sl = function_config[function].sl,.ie_en = function_config[function].ie_en,.ie_inv = function_config[function].ie_inv,.di_inv = function_config[function].di_inv,.st = function_config[function].st,/* resv and pad_di do not need initialization */};return 0;
}

然后你定义的这个硬件口就用了对应function的能力,是不是挺好玩。好了,如果要好好理解的话可以看看我的分析结合源码,神秘的FPIOA就是这样;


总结

本节主要用大白话和大家说了什么事FPIOA,解析了其实现过程。

http://www.sczhlp.com/news/44701/

相关文章:

  • 简洁商城网站模板上海单个关键词优化
  • 浦江县住房和城乡建设局网站美国今天刚刚发生的新闻
  • 滕建建设集团网站企业网站seo
  • 良精企业网站管理系统源码 后台不能编辑产品宣传软文是什么
  • 网站制作产品资料东莞百度seo电话
  • 天津做网站的企业常州网站建设
  • 寻找徐州网站开发seo页面代码优化
  • 泰州市统计局网站建设方案网络营销专业是做什么的
  • 南沙区建设局网站巨量数据分析入口
  • 株洲网站建设公司怎么自己制作网站
  • 开办网站备案bt蚂蚁磁力搜索天堂
  • 网站稳定期怎么做海外建站
  • 个人网站多少钱一年营销型网站建设公司
  • 网站建设 技术可行性网络营销课程心得体会
  • 如何查看一个网站是用什么cms做的搜索引擎优化的方法和技巧
  • 医院网站HTML5建个网站费用多少
  • 潍坊专业人员继续教育网络平台登录石家庄网站建设方案优化
  • 有合作社做网站得不优化关键词软件
  • 阿里巴巴网站谁做的足球比赛统计数据
  • 设计的网站都有哪些功能网页制作软件下载
  • 上海网站建设专业公司新闻稿撰写
  • 电子商务网站建设与管理最新试卷seo秘籍优化课程
  • 网站做404页面怎么做搜索引擎排名优化公司
  • C++ 多线程与并发编程全面解析
  • 杭州开发区建设局网站网络推广运营推广
  • 家居网站建设总结子域名在线查询
  • 中国的wordpress广州推广优化
  • 南宁东凯做网站的公司武汉大学人民医院地址
  • 郑州做网站云极推广普通话的文字内容
  • 贵州省建设监理协会网站是什么企业策划