天天看點

ESP8266學習——HW Timer内容代碼總結架構

HW Timer

  • 内容
    • 效果
    • 步驟
    • 添加hw_timer.c檔案
    • hw_timer_init函數
    • 中斷源選擇
  • 代碼
    • 頭檔案
    • 宏定義
    • 全局變量
    • 延時函數delay_ms
    • LED初始化函數LED_init
    • 硬體定時器回調函數HW_Timer_cb
    • 硬體定時器初始化函數HW_Timer_init
    • user_init
    • 其他
  • 總結架構

内容

效果

步驟

  1. 添加hw_timer.c檔案
  2. 使用函數hw_timer_init(0,1);初始化硬體定時器
  3. 定義中斷回調函數
  4. 注冊回調函數
  5. 設定定時器參數

添加hw_timer.c檔案

ESP8266學習——HW Timer内容代碼總結架構

hw_timer_init函數

作用:初始化硬體定時器

【參數1:中斷源】

  • FRC1_SOURCE==0
  • NMI_SOURCE=1

【參數2:是否重複】

  • 重複:1
  • 不重複:0

中斷源選擇

ESP8266學習——HW Timer内容代碼總結架構

代碼

頭檔案

#include "ets_sys.h"

#include "osapi.h"
#include "user_interface.h"

#include "driver/uart.h"

           

宏定義

全局變量

延時函數delay_ms

void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{	
	for(;C_time>0;C_time--)
		os_delay_us(1000);

}
           

LED初始化函數LED_init

void ICACHE_FLASH_ATTR LED_init(void)
{
	//選擇GPIO4的功能
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
	//設定GPIO4的電平
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);

}
           

硬體定時器回調函數HW_Timer_cb

void HW_Timer_cb(void)
{
	F_LED = !F_LED;
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),F_LED);			//LED狀态翻轉

	os_printf("\r\n-----HW_Timer_INT-----\r\n");	//進入定時器函數标志

}

           

硬體定時器初始化函數HW_Timer_init

void HW_Timer_init(void)
{
    // 硬體定時器初始化【FRC1_SOURCE==0、NMI_SOURCE=1】
	hw_timer_init(0,1);					//初始化硬體定時器【參數1:中斷源】【參數2:是否重複】
	hw_timer_set_func(HW_Timer_cb);	//注冊回調函數
	hw_timer_arm(500000);				//設定定時器參數(機關us,參數必須<=1,677,721)

}
           

user_init

void ICACHE_FLASH_ATTR user_init(void)
{
	uart_init(115200,115200);	// 初始化序列槽波特率
	os_delay_us(10000);			// 等待序列槽穩定
	os_printf("\r\n=================================================\r\n");
	os_printf("\t Project:\t%s\r\n", ProjectName);
	os_printf("\t SDK version:\t%s", system_get_sdk_version());
	os_printf("\r\n=================================================\r\n");

	LED_init();		// LED初始化

	HW_Timer_init();
}
           

其他

/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR
user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
            rf_cal_sec = 512 - 5;
            break;
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
            rf_cal_sec = 1024 - 5;
            break;
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}



void ICACHE_FLASH_ATTR
user_rf_pre_init(void)
{
}

           

總結架構

需要更改的參數

  • 中斷源、是否重複
  • 定時時長

要點

  • 回調函數名和注冊回調函數中的回調函數名一緻
void HW_Timer_cb(void)
{
	.......			//到達指定時間,完成的功能
}

void HW_Timer_init(void)
{
    // 硬體定時器初始化【FRC1_SOURCE==0、NMI_SOURCE=1】
	hw_timer_init(0,1);					//初始化硬體定時器【參數1:中斷源】【參數2:是否重複】
	hw_timer_set_func(HW_Timer_cb);		//注冊回調函數
	hw_timer_arm(500000);				//設定定時器參數(機關us,參數必須<=1,677,721)

}
           

繼續閱讀