CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)
原创博客,如有转载,注明出处——在金华的电子民工林。
引言:基于上一篇说了如何建立一个新工程,管理一个新工程,现在面临着一个问题,我们技术人员接到一个项目,不同的应用,硬件也不同啊,外设,IO口的分配都是不一样的,我们怎么才能不改变底层的情况下给不同的项目配置不同的IO口呢?这个就是我这一篇博客要解决的问题,只有解决了这个问题,我们才能完美的管理各个不同的项目工程。
错误认知一:外设IO的分配只能在main函数里的PIN_init(BoardGpioInitTable);进行配置?而这个函数调用的数组就是在底层的文件上?
释疑:这里只是一个预分配的调用,在我们应用初始化里,还是需要再次初始化IO口。我们可以把底层的配置给全部给注释掉,或者,把这个向量表定义到应用层的文件里去。
const PIN_Config BoardGpioInitTable[] = {// CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
// CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
// CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
// CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
// CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip select */
// CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
// CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX via debugger back channel */
// CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
// CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
// CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI clock */PIN_TERMINATE
};
原创博客,如有转载,注明出处——在金华的电子民工林。
只留这么个玩意。然后,把IO口的初始化,放到如下位置
IO口的初始化,要放在其他外设初始化之前,切记。
下面就是IO口初始化的程序
#include <stdbool.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/family/arm/m3/Hwi.h>
#include <ti/sysbios/knl/Semaphore.h>
#include <ti/sysbios/knl/Queue.h>#include <ti/sysbios/BIOS.h>#include <ti/drivers/PIN.h>
//#include <ti/drivers/pin/PINCC26XX.h>
#include "board.h"
#include "UserIO.h"PIN_Config CtrPinsCfg[] =
{
PIR_SIGN_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS, // PIR is active high scanmode
UP_LIMIT_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS, // Uplimit is active low scanmode
DOWN_LIMIT_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS, // Downlimit is active low scanmodeLIGHT_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MED, //LED_LAMP initially off PIN_OPENDRAIN
UV_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MED, //UV Light initially off PIN_OPENDRAIN
FAN_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED, //Fan initially off
HOT_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED, //Hot initially off
PIN_TERMINATE
};PIN_State CtrPins;
PIN_Handle hCtrPins;void IOCtrInit(void)
{hCtrPins = PIN_open(&CtrPins, CtrPinsCfg);
}
原创博客,如有转载,注明出处——在金华的电子民工林。
把IO口的配置放在这里,很重要的一定,是要在.h里定义IO口的ID,如下是.h里的代码
#include <hal_types.h>
#include <ti/devices/cc26x0r2/driverlib/ioc.h>//IO口自己随意映射到哪个IO口。#define PIR_SIGN_IN IOID_16
#define UP_LIMIT_IN IOID_17
#define DOWN_LIMIT_IN IOID_18#define LIGHT_CTR_OUT IOID_22
#define UV_CTR_OUT IOID_23
#define FAN_CTR_OUT IOID_24
#define HOT_CTR_OUT IOID_25
上面最重要的是一定要调用ioc.h的头文件,下面的IOID号随便你定义,这样,就能把对IO口的分配,从底层文件分配,改到了应用层的分配,实现了不修改底层,只修改应用层,从容应对各种不同的项目应用。
另外,也可以把main主函数里的 PIN_init(BoardGpioInitTable);里的BoardGpioInitTable这个向量表,修改掉,指向到应用层去。
原创博客,如有转载,注明出处——在金华的电子民工林。
1)友情伙伴:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜BLE之CC2640R2F群:557278427
5)本文出处:原创连载资料《简单粗暴学蓝牙5》
6)完整开源资料下载地址:
https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)相关推荐
- STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口
STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口 1.使用到的工具介绍 2.整个简单介绍 3.程序的介绍 1.使用到的工具介绍: kei ...
- STM32F1xx的IO口电压兼容问题以及如何选择对应外设的IO口
一.如何判断STM32的IO是否兼容5V STM32的IO,绝大部分都兼容5V,至于哪些兼容5V,需要看STM32芯片的数据手册里的引脚描述表,凡是带FT标志的IO口,都是兼容5V的. 对于正点原子的 ...
- python语言自学-零基础小白学习Python编程语言的正确姿势(纯干货)
原标题:零基础小白学习Python编程语言的正确姿势(纯干货) 敢问有哪种编程语言集简洁.优雅.简单.全能于一身?Python绝对算的上是一个.举个例子,比如完成同一个任务,C语言需要写1000行代码 ...
- Simplicity Studio V5 建立一个空工程后如何添加外设驱动
默认生成工程自带的驱动就这么多. 这些都可以根据自己需求添加.下面我们添加i2c,IADC,LDMA三个. 这里多出了三个文件:em_i2c.c.em_iadc.c.em_ldma.c,这就是自己添加 ...
- 倒梁法matlab,柱下条形基础等基础工程.ppt
1,基础工程,电子教案,研制单位:湖南大学土木工程学院,2,3.柱下条形基础.筏形和箱形基础,3,3.1概述,优点:埋深较大.可提高地基承载力.增大基础抗滑稳定性.并可利用补偿作用减小基底附加应力.减 ...
- location驱动包_Zynq SDK 驱动探求(三):论一个外设驱动的全部身家·Xilinx SDK 驱动源码结构...
Processor is ready. Configure programable logic. 在新专栏 Rapid TCP/IP on Zynq 中,将围绕 Xilinx Zynq 系列芯片,从 ...
- 这款开源的STM32外设驱动库,可以直接拿来用!
软件一行,经常需要用到很多重复的代码,我们有必要花一些时间整理一些常用的.通用的代码,等到用到的时候就可以直接拿来用了.如果没有精力自己去整理,也可以用一些网上比较成熟的代码. 比如本次介绍的基于ST ...
- 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522
目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...
- 一份很棒的外设驱动库!(基于STM32F4)
关注.星标公众号,直达精彩内容 来源:https://www.lmlphp.com/user/1774/article/item/19294/ 编辑整理:技术让梦想更伟大 | 李肖遥 本次分享一份基于 ...
最新文章
- Chapter 9:Noise-Estimation Algorithms
- Wing IDE Pro (Wing pro 6.0) for Ubuntu/linux
- SAP MM 公司间退货STO流程后勤部分简述
- Object #HTMLCanvasElement 的drawImage没有作用的原因
- 20160512关于mac安装caffe的记录
- Author Topic Model[ATM理解及公式推导]
- 配置主机间信任的一个简单办法
- 如何在 macOS Monterey 正式发布之前备份您的 Automator 作品?
- gdb调试出现optimized out解决方法
- 拓展题 系列I之科普系列
- 详解 Redis 中布隆过滤器解决缓存穿透问题
- 【歌词】ASIAN KUNG-FU GENERATION - ムスタング(mix for 芽衣子)
- KaLi Linux 2019.2安装netspeed
- 喜讯|云畅科技上榜湖南省上市后备企业名单
- 【iOS】This operation can fail if the version of the OS on the device is incompatible
- 【论文阅读】DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting
- 淘宝API卖家/买家相关接口列表与说明
- 什么能吃,什么不能吃
- CTF_Web:从0学习Flask模板注入(SSTI)
- ubuntu16.04 安装 oracle11g (2022.6.5)