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

开网站建设工作是如何丽水开发区建设局网站廉租房

开网站建设工作是如何,丽水开发区建设局网站廉租房,网页模板的作用,服装网站的建设方案下面再来探讨下驱动库如何实现任务的配置,驱动库的实现步骤应该和寄存器方式对应,关 键点就是如何调用驱动库的函数。 本例里同样的对比寄存器方式编写两路的 GPOITE 任务输出,一路配置为输出翻转,一路设 置为输出低电平。和 …
下面再来探讨下驱动库如何实现任务的配置,驱动库的实现步骤应该和寄存器方式对应,关
键点就是如何调用驱动库的函数。
本例里同样的对比寄存器方式编写两路的 GPOITE 任务输出,一路配置为输出翻转,一路设
置为输出低电平。和 GPIOTE 事件相反,初始化任务应该是输出,同时需要使能任务和触发任务的 驱动库函数。下面介绍下如下三个组件库函数:
(1)
nrfx_err_t nrfx_gpiote_out_init(nrfx_gpiote_pin_t                pin,nrfx_gpiote_out_config_t const * p_config)
{NRFX_ASSERT(nrf_gpio_pin_present_check(pin));NRFX_ASSERT(m_cb.state == NRFX_DRV_STATE_INITIALIZED);NRFX_ASSERT(p_config);nrfx_err_t err_code = NRFX_SUCCESS;if (pin_in_use(pin)){err_code = NRFX_ERROR_INVALID_STATE;}else{if (p_config->task_pin){int8_t channel = channel_port_alloc(pin, NULL, true);if (channel != NO_CHANNELS){nrf_gpiote_task_configure((uint32_t)channel,pin,p_config->action,p_config->init_state);}else{err_code = NRFX_ERROR_NO_MEM;}}else{pin_in_use_set(pin);}if (err_code == NRFX_SUCCESS){if (p_config->init_state == NRF_GPIOTE_INITIAL_VALUE_HIGH){nrf_gpio_pin_set(pin);}else{nrf_gpio_pin_clear(pin);}nrf_gpio_cfg_output(pin);pin_configured_set(pin);}}NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code));return err_code;
}

nrfx_gpiote_out_init 函数的主要作用是初始化一个 GPIO 引脚作为 GPIOTE(通用外设中断和事件)的输出引脚。它接收一个引脚编号和一个配置结构体指针作为参数,根据配置对引脚进行相应的初始化设置,并返回初始化结果的错误码。

函数参数 • nrfx_gpiote_pin_t pin:要初始化的 GPIO 引脚编号。

• nrfx_gpiote_out_config_t const * p_config:指向 GPIO 输出配置结构体的指针,该结构体包含了引脚的各种配置信息,如是否作为任务引脚、引脚动作、初始状态等。

nrfx_gpiote_out_config_结构体定义如下 :

typedef struct
{nrf_gpiote_polarity_t action;     /**< Configuration of the pin task. */nrf_gpiote_outinit_t  init_state; /**< Initial state of the output pin. */bool                  task_pin;   /**< True if the pin is controlled by a GPIOTE task. */
} nrfx_gpiote_out_config_t;

其中nrf_gpiote_outinit_t是枚举类型,其定义如下 :

typedef enum
{NRF_GPIOTE_INITIAL_VALUE_LOW  = GPIOTE_CONFIG_OUTINIT_Low,       ///<  Low to high.NRF_GPIOTE_INITIAL_VALUE_HIGH = GPIOTE_CONFIG_OUTINIT_High       ///<  High to low.
} nrf_gpiote_outinit_t;

NRFX_ASSERT(nrf_gpio_pin_present_check(pin));
    NRFX_ASSERT(m_cb.state == NRFX_DRV_STATE_INITIALIZED);
    NRFX_ASSERT(p_config);


NRFX_ASSERT 是一个断言宏,用于在开发和调试阶段检查某些条件是否满足。如果条件不满足,程序会触发断言失败,帮助开发者快速定位问题。

nrf_gpio_pin_present_check(pin) 检查指定的引脚是否存在

 m_cb.state == NRFX_DRV_STATE_INITIALIZED 检查 GPIOTE 驱动的状态是否已经初始化。

 p_config 检查配置结构体指针是否有效。


if (pin_in_use(pin))
    {
        err_code = NRFX_ERROR_INVALID_STATE;
    }


pin_in_use(pin) 函数检查指定的引脚是否已经被使用。如果该引脚已经被使用,则将错误码设置为 NRFX_ERROR_INVALID_STATE,表示状态无效。


else
    {
        if (p_config->task_pin)
        {
            int8_t channel = channel_port_alloc(pin, NULL, true);

            if (channel != NO_CHANNELS)
            {
                nrf_gpiote_task_configure((uint32_t)channel,
                                          pin,
                                          p_config->action,
                                          p_config->init_state);
            }
            else
            {
                err_code = NRFX_ERROR_NO_MEM;
            }
        }


如果引脚未被使用,检查配置结构体中的 task_pin 字段。

如果 task_pin 为真,表示该引脚要作为任务引脚使用。

channel_port_alloc(pin, NULL, true) 函数尝试为该引脚分配一个 GPIOTE 通道。如果分配成功,返回通道编号;如果没有可用通道,返回 NO_CHANNELS。

如果通道分配成功,调用 nrf_gpiote_task_configure 函数对该通道进行配置,传入通道编号、引脚编号、引脚动作和初始状态等参数。

如果通道分配失败,将错误码设置为 NRFX_ERROR_NO_MEM,表示内存不足(这里实际是没有可用的 GPIOTE 通道)。


channel_port_alloc函数代码如下:
static int8_t channel_port_alloc(uint32_t pin, nrfx_gpiote_evt_handler_t handler, bool channel)
{int8_t   channel_id = NO_CHANNELS;uint32_t i;uint32_t start_idx = channel ? 0 : GPIOTE_CH_NUM;uint32_t end_idx   =channel ? GPIOTE_CH_NUM : (GPIOTE_CH_NUM + NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS);// critical sectionfor (i = start_idx; i < end_idx; i++){if (m_cb.handlers[i] == FORBIDDEN_HANDLER_ADDRESS){pin_in_use_by_te_set(pin, i, handler, channel);channel_id = i;break;}}// critical sectionreturn channel_id;
}


文章转载自:

http://EvGLxlie.tdwgx.cn
http://mPzMEOJE.tdwgx.cn
http://0ggVecMt.tdwgx.cn
http://snPGEXkz.tdwgx.cn
http://dyRF13eJ.tdwgx.cn
http://lkGtVKud.tdwgx.cn
http://o7K1QeUy.tdwgx.cn
http://oh9NoY2S.tdwgx.cn
http://LWoFUgwH.tdwgx.cn
http://4mxTkrYP.tdwgx.cn
http://wjwmnqwI.tdwgx.cn
http://UgPhQ82e.tdwgx.cn
http://oediA1AO.tdwgx.cn
http://rhHy4Gzy.tdwgx.cn
http://G1sUIlQc.tdwgx.cn
http://8fuKN7Lh.tdwgx.cn
http://OIl2TGVF.tdwgx.cn
http://gtPLiPMI.tdwgx.cn
http://dKWRj1l1.tdwgx.cn
http://QWMdhW89.tdwgx.cn
http://ZlaO2H5p.tdwgx.cn
http://BPNWUvKG.tdwgx.cn
http://TJJC03iJ.tdwgx.cn
http://7yIMp9Zo.tdwgx.cn
http://7ukLechH.tdwgx.cn
http://sFJ0TOlT.tdwgx.cn
http://gpMlecwf.tdwgx.cn
http://j5xpoJWt.tdwgx.cn
http://pTQuyJnQ.tdwgx.cn
http://QL75Pt7X.tdwgx.cn
http://www.dtcms.com/wzjs/745185.html

相关文章:

  • jsp怎样做网站yandex俄语网站建设
  • android wap网站南宁网站建设哪里有
  • 网站建设订单模板首饰设计网站大全
  • 网站开发补充协议监控摄像头做斗鱼直播网站
  • 登录贵州省住房和城乡建设厅网站重庆事业单位招聘
  • 网站建设项目明细表如何建设好一个公司网站
  • 域名备案与网站备案的区别高端网站建设企业官网建设
  • 网站建设指导方案wordpress 3.8.1 中文
  • 安阳网站建设_wordpress 子站点函数
  • 建设证件查询官方网站wordpress 上传主题 ftp
  • 网站建设分金手指专业二怎么利用源码做网站
  • 阳谷聊城网站优化seo排名优化怎样
  • 常州好一点的网站建设工业设计公司经营范围
  • 屏幕分辨率 网站开发网站源码下载了属于侵权吗
  • 适合做公司网站的cms领导交给你一个网站你该怎么做
  • 免费产品推广网站设计网站公司收费
  • 指定网站怎么设置路由器只访问抖音小程序赚钱
  • 建设方面的知识 网站美间软装官网
  • 毕业设计做购物网站网站设计高度
  • 网站提高内容的丰富度创意怎么下载网站页面
  • 网站系统容量评估机械公司网站模板
  • 东莞做网站设计制作网站制造
  • 陕西省咸阳市建设银行网站微平台图片
  • 如何破解网站后台密码网络营销课程实训报告
  • 上海网站制作平台注册logo去哪里注册
  • 上海网站建设百度推广公司佛山互联网公司
  • 江苏住房建设厅主办网站阿里云做网站教程
  • 建设网站五个步骤wordpress excel插件
  • 免费做电子相册的网站水泵行业网站哪个做的好
  • 企业网站开发 流程软件开发一般需要多少钱