Lab Session 4
在Lab 3的基礎(chǔ)上增加低功耗 (Auto Judgement) 功能
5.4
增加低功耗 (Auto Judgement) 功能應(yīng)用程序
5.4.1 將培訓(xùn)配套資料Checkpoints文件夾中的工程 "Lab session 4" 中的qe_gen文件的 "qe_touch_sample.c" 拷貝
并覆蓋 "Project Explorer" 的Lab_session_1工程中qe_gen文件的 "qe_touch_sample.c".
5.4.2 應(yīng)用程序代碼說明
使用init_peripheral_function初始化需要使用的外設(shè)
使用R_CTSU_Open() 初始化config01 (MEC電極)
使用RM_TOUCH_Open() 初始化config02 (12個(gè)自容式按鍵)
/* Initialize peripheral functions */ init_peripheral_function(); /* Open Touch middleware */ err = R_CTSU_Open (g_qe_ctsu_instance_config01.p_ctrl, g_qe_ctsu_instance_config01.p_cfg); ctsu_ctrl = (ctsu_instance_ctrl_t *)g_qe_ctsu_instance_config01.p_ctrl; err = RM_TOUCH_Open (g_qe_touch_instance_config02.p_ctrl, g_qe_touch_instance_config02.p_cfg);
5.4.3 應(yīng)用程序代碼說明
以下代碼完成config01 (MEC電極) 和 config02 (12個(gè)自容式按鍵電極) 的初始化偏置電流調(diào)整。
/* Initial Offset Tuning */ { (void)R_LPT_SetCMT(LPT_CH1, (uint32_t)WAKEUP_LPT_PERIOD_NORMAL); /* Method1 offset tuning */ do { err = R_CTSU_ScanStart (g_qe_ctsu_instance_config01.p_ctrl); if (FSP_SUCCESS != err) { while (true) {} } (void)R_LPT_Control(LPT_CMD_START); while (0 == g_qe_touch_flag) {} g_qe_touch_flag = 0; err = R_CTSU_OffsetTuning (g_qe_ctsu_instance_config01.p_ctrl); } while(err != FSP_SUCCESS); /* Method2 offset tuning */ do { err = RM_TOUCH_ScanStart (g_qe_touch_instance_config02.p_ctrl); if (FSP_SUCCESS != err) { while (true) {} } (void)R_LPT_Control(LPT_CMD_START); while (0 == g_qe_touch_flag) {} g_qe_touch_flag = 0; err = RM_TOUCH_DataGet(g_qe_touch_instance_config02.p_ctrl, &button_status02, NULL, NULL); } while(err != FSP_SUCCESS); }
5.4.4 應(yīng)用程序代碼說明
以下代碼完成config01 (MEC電極) 在Normal模式下的baseline調(diào)整。
/* base line setting @method1 */ for (uint32_t i = 0U; i < WAKEUP_TIME_BASELINE; i++) { ? ? err = R_CTSU_ScanStart (g_qe_ctsu_instance_config01.p_ctrl); ? ? if (FSP_SUCCESS != err) ? ? { ? ? ? ? while (true) {} ? ? } ? ? (void)R_LPT_Control(LPT_CMD_START); ? ? R_BSP_SoftwareDelay(WAKEUP_WAIT_MEASUREEND, BSP_DELAY_MILLISECS); ? ? (void)R_LPT_Control(LPT_CMD_STOP); ? ? (void)R_LPT_Control(LPT_CMD_COUNT_RESET); ? ? ctsu_ctrl->state = CTSU_STATE_SCANNED; err = R_CTSU_AutoJudgementDataGet (g_qe_ctsu_instance_config01.p_ctrl, &button_status01); if (FSP_SUCCESS == err) { RM_TOUCH_MonitorAddressGet (g_qe_touch_instance_config02.p_ctrl, &monitor_buf_address, &monitor_id_address, &monitor_size_address); qe_monitor_autojudge (g_qe_ctsu_instance_config01.p_ctrl); } }
5.4.5 應(yīng)用程序代碼說明
以下代碼完成進(jìn)入低功耗模式的操作,在低功耗模式里完成config01 (MEC電極) 的測量和自動判斷,當(dāng)config01 (MEC電極) 有按鍵On判斷是時(shí),退出低功耗,并通過R_CTSU_AutoJudgementDataGet() 取得結(jié)果。
/* Standby mode */ { /* for [CONFIG01] configuration */ (void)R_LPT_SetCMT(LPT_CH1, (uint32_t)WAKEUP_LPT_PERIOD_STANDBY); err = R_CTSU_ScanStart (g_qe_ctsu_instance_config01.p_ctrl); /* Enter software standby mode */ lpc_err = R_LPC_LowPowerModeActivate(&activate_standby_callback); if (LPC_SUCCESS != lpc_err) { while (true) {} } while (0 == g_qe_touch_flag) {} g_qe_touch_flag = 0; err = R_CTSU_AutoJudgementDataGet (g_qe_ctsu_instance_config01.p_ctrl, &button_status01); if (FSP_SUCCESS == err) { RM_TOUCH_MonitorAddressGet (g_qe_touch_instance_config02.p_ctrl, &monitor_buf_address, &monitor_id_address, &monitor_size_address); qe_monitor_autojudge (g_qe_ctsu_instance_config01.p_ctrl); } }
5.4.6 應(yīng)用程序代碼說明
以下代碼為進(jìn)入Software Standby Mode時(shí)的Callback程序,用于啟動Low-power Timer定時(shí)器。
/* activate_standby_callback */ static void activate_standby_callback(void *p_data) { lpt_err_t lpt_err; /* Start LPT count */ lpt_err = R_LPT_Control(LPT_CMD_START); if (LPT_SUCCESS != lpt_err) while(1); }
5.4.7 應(yīng)用程序代碼說明
以下代碼為退出Snooze Mode時(shí)的Callback程序,用于停止和復(fù)位Low-power Timer定時(shí)器,以及disable snooze release interrupt。
/*snooze_callback*/ static void snooze_callback(void *p_data) { lpt_err_t lpt_err; lpc_err_t lpc_err; /* Stop LPT count */ lpt_err = R_LPT_Control(LPT_CMD_STOP); if (LPT_SUCCESS != lpt_err) while(1); /* Reset LPT count */ lpt_err = R_LPT_Control(LPT_CMD_COUNT_RESET); if (LPT_SUCCESS != lpt_err) while(1); /* Disable snooze release interrupt */ lpc_err = R_LPC_SnoozeModeConfigure(&gs_snooze_mode); if (LPC_SUCCESS != lpc_err) while(1); }
5.4.8 點(diǎn)擊圖標(biāo),編譯程序。
5.4.9 以上應(yīng)用程序代碼的詳細(xì)解釋
您可參考瑞薩官網(wǎng)的應(yīng)用筆記RX140 Group Smart Wakeup Solution Rev.1.00以及配套的樣例程序。
審核編輯:劉清
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3246瀏覽量
114715 -
電容觸摸
+關(guān)注
關(guān)注
0文章
70瀏覽量
16457 -
偏置電流
+關(guān)注
關(guān)注
1文章
117瀏覽量
13137
原文標(biāo)題:瑞薩電容觸摸技術(shù)之低功耗應(yīng)用——RX140實(shí)驗(yàn)環(huán)節(jié) (5)-3
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論