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口的初始化,放到如下位置
CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)_第1张图片
IO口的初始化,要放在其他外设初始化之前,切记。
下面就是IO口初始化的程序

#include 
#include 
#include 
#include 
#include 

#include 

#include 
//#include 
#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 
#include 

//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)纠错/业务合作:[email protected]
4)香瓜BLE之CC2640R2F群:557278427
5)本文出处:原创连载资料《简单粗暴学蓝牙5》
6)完整开源资料下载地址:
https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

你可能感兴趣的:(CC2640R2F)