2.1 原理圖分析
查看EK-RA6M4的原理圖,如下圖所示,該開發(fā)板上有3個(gè)Led指示燈。
根據(jù)原理圖可知,這三個(gè)Led的控制邏輯為:
Led燈 | LED3 | LED2 | LED1 |
---|---|---|---|
顏色 | 紅色 | 綠色 | 藍(lán)色 |
引腳 | P400 | P404 | P415 |
電平 | 高電平亮、低電平滅 | 高電平亮、低電平滅 | 高電平亮、低電平滅 |
2.2 創(chuàng)建工程
在開始菜單的FSP v4.1.0里點(diǎn)擊運(yùn)行e2studio。然后點(diǎn)擊 File -> Switch Workspace -> Other... ,然后選擇剛才創(chuàng)建的工作路徑并點(diǎn)擊 Launch啟動(dòng)。
接下來(lái)點(diǎn)擊 File -> C/C++ Project 創(chuàng)建 Renesas RA C/C++ Project 。接下來(lái)設(shè)置我們的項(xiàng)目名為 MyBoard 。
在接下來(lái)的配置中,我們定制開發(fā)我們的開發(fā)板,Board選擇“Custom User Board (Any Device) ”,Device選擇"R7FA6M4AF3CFB",以及燒錄調(diào)試器的類型。下一步我們就選擇 Flat (Non-TrustZone) Project 。
接下來(lái)的操作系統(tǒng)類型,選擇 No RTOS 。
項(xiàng)目模板選擇 Bare Metal -Minimal
接下來(lái),創(chuàng)建好的項(xiàng)目如下圖所示。
2.3 Pins引腳配置
接下來(lái)我們打開項(xiàng)目中的FSP配置文件,配置三個(gè)Led燈的引腳為GPIO模式,并分別配置它們的別名為L(zhǎng)edRed(P400)、LedGreen(P404)、LedBlue(P415)。
- 通過(guò) Symbolic Name 字段可以修改該GPIO的名稱為 LedRed,它將在IDE自動(dòng)生成的文件 ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h 中定義;
- 通過(guò) Mode 字段可以修改GPIO口的工作模式,它們將在IDE自動(dòng)生成的文件 ra_gen/pin_data.c 中定義;
然后再配置使能外部晶振,并重新生成代碼。
2.4 Stack配置
e2studio生成的項(xiàng)目,默認(rèn)添加的GPIO的stack,這里我們不需要進(jìn)行任何的修改。
2.5 源碼修改
接下來(lái),我們使用添加 src/bsp_led.h 頭文件,在里面添加Led的相關(guān)定義及操作函數(shù)聲明如下:
#ifndef BSP_LED_H_
#define BSP_LED_H_
/** Information on how many LEDs and what pins they are on. */
typedef struct st_bsp_leds
{
uint16_t led_count; ///< The number of LEDs on this board
uint16_t const * p_leds; ///< Pointer to an array of IOPORT pins for controlling LEDs
} bsp_leds_t;
/** Available user-controllable LEDs on this board. These enums can be can be used to index into the array of LED pins
* found in the bsp_leds_t structure. */
typedef enum e_bsp_led
{
BSP_LEDBLUE, ///< LED1
BSP_LEDGREEN, ///< LED2
BSP_LEDRED, ///< LED3
} bsp_led_t;
/** Available user-controllable LEDs on this board. These enums can be used to turn on/off LED. */
typedef enum e_bsp_led_status
{
BSP_LEDOFF, ///< Turn off LED
BSP_LEDON, ///< Turn on LED
} bsp_led_status_t;
extern const bsp_leds_t g_bsp_leds;
extern void turn_led(bsp_led_t which, bsp_led_status_t status);
#endif /* BSP_LED_H_ */
然后再添加 src/bsp_led.c 源文件如下:
#include "bsp_api.h"
#include "bsp_led.h"
#include "bsp_pin_cfg.h"
/** Array of LED IOPORT pins. */
static const uint16_t g_bsp_prv_leds[] =
{
(uint16_t) LedBlue,
(uint16_t) LedGreen,
(uint16_t) LedRed,
};
/** Structure with LED information for this board. */
const bsp_leds_t g_bsp_leds =
{
.led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0]))),
.p_leds = &g_bsp_prv_leds[0]
};
/** Function to turn Led on or off for this board. */
void turn_led(bsp_led_t which, bsp_led_status_t status)
{
if(which >= g_bsp_leds.led_count )
{
return ;
}
if( BSP_LEDOFF == status )
{
R_BSP_PinWrite(g_bsp_leds.p_leds[which], BSP_IO_LEVEL_LOW);
}
else
{
R_BSP_PinWrite(g_bsp_leds.p_leds[which], BSP_IO_LEVEL_HIGH);
}
}
接下來(lái),我們可以修改 src/hal_entry.c 源文件,在里面添加毫秒級(jí)延時(shí)宏函數(shù) delay_ms() 以及 Led 跑馬燈的控制代碼。
#include "bsp_led.h"
#define delay_ms(ms) R_BSP_SoftwareDelay(ms, BSP_DELAY_UNITS_MILLISECONDS)
... ...
void hal_entry(void)
{
/* TODO: add your own code here */
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
R_BSP_PinAccessEnable(); /* Enable access to the PFS registers. */
while (1)
{
turn_led(BSP_LEDBLUE, BSP_LEDON);
delay_ms(250);
turn_led(BSP_LEDBLUE, BSP_LEDOFF);
turn_led(BSP_LEDGREEN, BSP_LEDON);
delay_ms(250);
turn_led(BSP_LEDGREEN, BSP_LEDOFF);
turn_led(BSP_LEDRED, BSP_LEDON);
delay_ms(250);
turn_led(BSP_LEDRED, BSP_LEDOFF);
delay_ms(350);
}
}
- R_BSP_PinAccessEnable() 函數(shù)必須使能,否則不能操作GPIO的寄存器;
2.5 編譯運(yùn)行
代碼修改完成后,在開發(fā)板上編譯運(yùn)行,會(huì)發(fā)現(xiàn)三個(gè)Led跑馬燈運(yùn)行。
-
led
+關(guān)注
關(guān)注
242文章
23278瀏覽量
660947 -
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635408 -
瑞薩
+關(guān)注
關(guān)注
35文章
22309瀏覽量
86325 -
跑馬燈
+關(guān)注
關(guān)注
5文章
117瀏覽量
34785
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論