【藍芽低功耗BLE】控制GPIO來點亮LED,blegpio
這節講一下最簡單的,也是最基礎的東西,CC2540的IO操作,把PORT口當做GPIO來用,廢話不多說,往下看。
1、硬體電路
硬體電路時最簡單的,用一根GPIO去控制LED燈,由於GPIO作為output,所以也不用管GPIO的模式。
還是挺簡單的,控制左邊GPIO的高低來開關LED燈。
2、相關寄存器
| P0SEL |
P0[7:0]功能設定寄存器,預設設定為普通I/O口 |
| P0INP |
P0[7:0]作為輸入口時電路模式寄存器,可以設定為輸入上下拉等 |
| P0 |
P0[7:0]可以位定址的I/O寄存器 |
| P0DIR |
P0口輸入輸出設定寄存器 |
P0SEL 0:普通IO口 1:第二功能
P0DIR 0:輸入 1:輸出
P0INP 0:上拉/下拉 1:三態
3、代碼實現
這裡以P1_0為例,看下代碼中是如何?。
在hal_led.c裡面的HalLedInit函數:
void HalLedInit (void){#if (HAL_LED == TRUE) HalLedSet(HAL_LED_ALL, HAL_LED_MODE_OFF); // Initialize all LEDs to OFF. // Set LED GPIOs to outputs. LED1_DDR |= LED1_BV;#if (!defined HAL_PA_LNA && !defined HAL_PA_LNA_CC2590) LED2_DDR |= LED2_BV;#if (!defined CC2540_MINIDK && !defined HAL_BOARD_CC2540USB) LED3_DDR |= LED3_BV;#endif#endif#if defined BLINK_LEDS HalLedStatusControl.sleepActive = FALSE; // Initialize sleepActive to FALSE.#endif#endif
相關的宏定義
/* 1 - Green */#define LED1_BV BV(0)#define LED1_SBIT P1_0#define LED1_DDR P1DIR#define LED1_POLARITY ACTIVE_HIG
開關LED
#define HAL_TURN_OFF_LED1() st( LED1_SBIT = LED1_POLARITY (0); ) #define HAL_TURN_OFF_LED2() st( LED2_SBIT = LED2_POLARITY (0); ) #define HAL_TURN_OFF_LED3() st( LED3_SBIT = LED3_POLARITY (0); ) #define HAL_TURN_OFF_LED4() HAL_TURN_OFF_LED1() #define HAL_TURN_ON_LED1() st( LED1_SBIT = LED1_POLARITY (1); ) #define HAL_TURN_ON_LED2() st( LED2_SBIT = LED2_POLARITY (1); ) #define HAL_TURN_ON_LED3() st( LED3_SBIT = LED3_POLARITY (1); ) #define HAL_TURN_ON_LED4() HAL_TURN_ON_LED1(
提取一下關鍵代碼:
1)把P1_0設定為輸出
P1_DIR |= 0x01;
2)設定P1_0為高電平,點亮LED
P1_0 = 1;
2)設定P1_0為低電平,熄滅LED
P1_0 = 0;
其實看一下協議棧裡面的HAL中針對各個介面的封裝也不難。
這一節就先到這。
賽揚226性可以怎?跟AMD的sempron 2200+比哪個更好
玩遊戲當然是AMD的好,但是多媒體是賽揚2.26的好一點