4.1 原理圖分析
查看EK-RA6M4的原理圖,如下圖所示,該開發(fā)板上有2個用戶按鍵。

根據(jù)原理圖可知,這2個按鍵的控制邏輯為:
| 按鍵 | S1 | S2 |
|---|---|---|
| 引腳 | P005 | P006 |
| 電平 | 按鍵按下低電平、按鍵釋放高電平 | 按鍵按下低電平、按鍵釋放高電平 |
4.2 中斷配置
首先,在FSP配置中將按鍵所用的兩個GPIO口配置成中斷模式。

- 在這里,我們可以查找到 P005 、P006的中斷號分別為 IRQ10 和 IRQ11;
接著選擇 Stacks , 點(diǎn)擊 "New Stack" -> "Input" -> "External IRQ(r_icu)" 添加外部中斷協(xié)議棧。

接下來配置相關(guān)的按鍵中斷,并重新生成代碼。

- 通過 Name 字段可以修改按鍵中斷的名稱為 g_key1_irq,它將在IDE自動生成的文件 ra_gen/common_data.c/h 中定義按鍵操作相關(guān)的變量;
- 通過 Channel 字段可以修改按鍵的中斷號,這里設(shè)置為10,下面的 Pins 將自動選擇 P005 這個引腳;
- 通過 Trigger 字段可以修改中斷的觸發(fā)方式為下降沿觸發(fā);
- 通過 Callback 字段設(shè)置按鍵的中斷回調(diào)函數(shù),它將配置在 g_key1_irq_cfg 變量中,該函數(shù)需要我們自己實(shí)現(xiàn);
- 另外,我們也可以在這里修改按鍵中斷的優(yōu)先級;
4.3 源碼修改
創(chuàng)建按鍵操作相關(guān)的頭文件 src/bsp_key.h 如下:
#ifndef BSP_KEY_H_
#define BSP_KEY_H_
#define USER_KEY1_IRQ_NUMBER 10
#define USER_KEY2_IRQ_NUMBER 11
extern int key_init(void);
extern void icu_deinit(void);
#endif /* BSP_KEY_H_ */
創(chuàng)建按鍵操作相關(guān)的c文件 src/bsp_key.c 如下:
#include h>
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_api.h"
#include "common_data.h"
int key_init(void)
{
int err = FSP_SUCCESS;
/* Open and enable key1 interrupt */
err = R_ICU_ExternalIrqOpen(&g_key1_irq_ctrl, &g_key1_irq_cfg);
if (FSP_SUCCESS != err)
{
printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
return err;
}
err = R_ICU_ExternalIrqEnable(&g_key1_irq_ctrl);
if (FSP_SUCCESS != err)
{
printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
return err;
}
/* Open and enable key1 interrupt */
err = R_ICU_ExternalIrqOpen(&g_key2_irq_ctrl, &g_key2_irq_cfg);
if (FSP_SUCCESS != err)
{
printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
return err;
}
err = R_ICU_ExternalIrqEnable(&g_key2_irq_ctrl);
if (FSP_SUCCESS != err)
{
printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
return err;
}
return err;
}
void icu_deinit(void)
{
R_ICU_ExternalIrqClose(&g_key1_irq_ctrl);
R_ICU_ExternalIrqClose(&g_key2_irq_ctrl);
}
void key_callback(external_irq_callback_args_t *p_args)
{
static bsp_led_status_t status[2] = { BSP_LEDON, BSP_LEDON};
if(USER_KEY1_IRQ_NUMBER == p_args->channel)
{
turn_led(BSP_LEDRED, status[0]);
status[0] ^= 1;
}
else if(USER_KEY2_IRQ_NUMBER == p_args->channel)
{
turn_led(BSP_LEDGREEN, status[1]); status[1] ^= 1;
}
}
- 按鍵回調(diào)函數(shù) key_callback() 將分別通過兩個按鍵控制 紅綠兩個燈的亮滅。
修改 src/hal_entry.c 源文件,在里面添加按鍵初始化代碼并修改藍(lán)色Led燈為系統(tǒng)運(yùn)行的心跳燈狀態(tài)。
... ...
#include "bsp_key.h"
... ...
void hal_entry(void)
{
... ...
key_init();
while (1)
{
turn_led(BSP_LEDBLUE, BSP_LEDON);
delay_ms(200);
turn_led(BSP_LEDBLUE, BSP_LEDOFF);
delay_ms(200);
turn_led(BSP_LEDBLUE, BSP_LEDON);
delay_ms(200);
turn_led(BSP_LEDBLUE, BSP_LEDOFF);
delay_ms(200);
turn_led(BSP_LEDBLUE, BSP_LEDON);
delay_ms(500);
turn_led(BSP_LEDBLUE, BSP_LEDOFF);
delay_ms(1000);
}
}
4.4 編譯運(yùn)行
代碼修改完成后,在開發(fā)板上編譯運(yùn)行,藍(lán)色Led將作為系統(tǒng)狀態(tài)心跳燈,而按下S1、S2將點(diǎn)亮紅色和綠色Led,再次按下則將滅掉Led。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
原理圖
+關(guān)注
關(guān)注
1353文章
6427瀏覽量
246315 -
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670418 -
GPIO
+關(guān)注
關(guān)注
16文章
1328瀏覽量
56231 -
按鍵中斷
+關(guān)注
關(guān)注
0文章
15瀏覽量
6607
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
單片機(jī)教程十七:單片機(jī)的中斷系統(tǒng)
單片機(jī)教程十七:單片機(jī)的中斷系統(tǒng)
單片機(jī)中斷系統(tǒng)的概念:什么是中斷,我們從一個生活中的例程引入
發(fā)表于 05-15 23:11
?5179次閱讀
單片機(jī)按鍵控制程序【C語言】
單片機(jī)按鍵控制程序【C語言】單片機(jī)按鍵控制程序【C語言】單片機(jī)按鍵控制程序【C語言】
發(fā)表于 12-29 11:04
?29次下載
單片機(jī)中斷系統(tǒng)介紹_51單片機(jī)中斷系統(tǒng)結(jié)構(gòu)
單片機(jī)中斷就是當(dāng)單片機(jī)正在執(zhí)行程序的時候,突然某個按鍵按下了(產(chǎn)生外部中斷),單片機(jī)就必須得去處
發(fā)表于 01-10 17:29
?1.3w次閱讀
51單片機(jī)中斷用法實(shí)例解析
51單片機(jī)的外部中斷0引腳接一只按鍵,該按鍵通過上拉電阻接到電源,即沒有按鍵發(fā)生時單片機(jī)檢測到的
發(fā)表于 12-12 15:31
?2.6w次閱讀
使用51單片機(jī)外部中斷按鍵控制LED閃爍的程序免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)外部中斷按鍵控制LED閃爍的程序免費(fèi)下載。
發(fā)表于 07-05 17:41
?28次下載
單片機(jī)--中斷系統(tǒng)實(shí)驗
實(shí)驗?zāi)康暮腿蝿?wù)目的:利用“模塊化單片機(jī)教學(xué)實(shí)驗平臺”,加深對單片機(jī)的中斷系統(tǒng)的理解。任務(wù):利用單片機(jī)的中斷系統(tǒng)完成程序設(shè)計。 實(shí)驗內(nèi)容使用A
發(fā)表于 11-05 13:20
?11次下載
單片機(jī):按鍵調(diào)節(jié)時鐘
按鍵調(diào)節(jié)時鐘的應(yīng)用實(shí)驗一、實(shí)驗?zāi)康模ㄒ唬┻M(jìn)一步掌握數(shù)碼管的顯示控制;(二)進(jìn)一步掌握單片機(jī)的定時器中斷的應(yīng)用;(三)進(jìn)一步掌握定時器工作方式的控制
發(fā)表于 11-11 11:06
?76次下載
單片機(jī)按鍵使用程序 (51單片機(jī))
單片機(jī)獨(dú)立按鍵使用程序 (51單片機(jī))獨(dú)立按鍵是單片機(jī)中很重要的一個器件,在這篇文章里,通過這個用獨(dú)立按
發(fā)表于 11-11 18:36
?108次下載
51單片機(jī)按鍵檢測--獨(dú)立按鍵與矩陣鍵盤
按鍵可以說是51單片機(jī)項目開發(fā)的一個重要組件了,它是作為51單片機(jī)IO口輸入的一種重要方式。我們可以通過按鍵控制單片機(jī)執(zhí)行相應(yīng)的程序,得到我們想要得效果。51
發(fā)表于 11-12 11:06
?17次下載
PIC單片機(jī) 按鍵檢測識別
目錄按鍵和PIC單片機(jī)一、按鍵二、按鍵的物理連接與檢測三、PIC16F18854單片機(jī)按鍵檢測及
發(fā)表于 11-16 12:36
?12次下載
瑞薩單片機(jī)之外部中斷實(shí)現(xiàn)按鍵的長按與短按(二)
瑞薩單片機(jī)通過外部中斷實(shí)現(xiàn)按鍵的長按與短按
發(fā)表于 11-22 14:21
?21次下載
單片機(jī)獨(dú)立按鍵控制led燈程序
單片機(jī)獨(dú)立按鍵控制LED燈程序 單片機(jī)獨(dú)立按鍵控制LED燈程序是一種簡單而有趣的電子學(xué)習(xí)項目,它通常由一個單片機(jī)芯片、一個LED燈和一個
基于單片機(jī)的按鍵中斷控制
評論