概述
原创博客,如有转载,注明出处——在金华的电子民工林。
引言:基于上一篇说了如何建立一个新工程,管理一个新工程,现在面临着一个问题,我们技术人员接到一个项目,不同的应用,硬件也不同啊,外设,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 scanmode
LIGHT_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口分配(纯干货)的全部内容,希望文章能够帮你解决CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复