【Cypress FM4 EVK 开发板试用体验】+ GPIO操作
-
-
apleilx
- LV5工程师
-
| 2016-12-03 13:15:54
- 浏览量 848
- 回复:2
本帖最后由 apleilx 于 2016-12-5 15:54 编辑
FM4的管脚配置和 ST、NXP的芯片用法差别还是很大的,库文件超级大,编译速度都慢了不少,不过还好有管脚配置工具。
这两天看了看官方提供的外设库,一开始很不适应,外设定义的十分复杂,后来才发现这么做是为了用位带映射,这个用着有点象PIC的外设定义方法,这样的好处是外设操作效率提高了不少。
管脚配置器生成的代码:(通用IO部分)
/**
*****************************************************************************
** \brief This function initializes GPIO
**
*****************************************************************************/
static void Iomux_GPIO_Init(void)
{
// Init GPIO pin function
Gpio1pin_InitIn( GPIO1PIN_P1D, Gpio1pin_InitPullup( 1u ) );
Gpio1pin_InitIn( GPIO1PIN_P20, Gpio1pin_InitPullup( 0u ) );
Gpio1pin_InitOut( GPIO1PIN_PB2, Gpio1pin_InitVal( 1u ) );
Gpio1pin_InitOut( GPIO1PIN_P18, Gpio1pin_InitVal( 1u ) );
Gpio1pin_InitOut( GPIO1PIN_P1A, Gpio1pin_InitVal( 1u ) );
}
头文件提供了管脚控制寄存器的位带别名定义,我们直接操作位带区就可以。
重定义下:
#define LED_GREEN bFM_GPIO_PDORB_P2
#define LED_BLUE bFM_GPIO_PDOR1_P8
#define LED_RED bFM_GPIO_PDOR1_PA
然后按照下面代码可以控制指示灯闪烁:
if(bPulse_3s)
{
if(LED_BLUE)
LED_BLUE = 0;
else
LED_BLUE = 1;
}
if(bPulse_10s)
{
if(LED_GREEN)
LED_GREEN = 0;
else
LED_GREEN = 1;
}
if(bPulse_30s)
{
if(LED_RED)
LED_RED = 0;
else
LED_RED = 1;
}
本帖最后由 apleilx 于 2016-12-5 15:54 编辑
FM4的管脚配置和 ST、NXP的芯片用法差别还是很大的,库文件超级大,编译速度都慢了不少,不过还好有管脚配置工具。
这两天看了看官方提供的外设库,一开始很不适应,外设定义的十分复杂,后来才发现这么做是为了用位带映射,这个用着有点象PIC的外设定义方法,这样的好处是外设操作效率提高了不少。
管脚配置器生成的代码:(通用IO部分)
/**
*****************************************************************************
** \brief This function initializes GPIO
**
*****************************************************************************/
static void Iomux_GPIO_Init(void)
{
// Init GPIO pin function
Gpio1pin_InitIn( GPIO1PIN_P1D, Gpio1pin_InitPullup( 1u ) );
Gpio1pin_InitIn( GPIO1PIN_P20, Gpio1pin_InitPullup( 0u ) );
Gpio1pin_InitOut( GPIO1PIN_PB2, Gpio1pin_InitVal( 1u ) );
Gpio1pin_InitOut( GPIO1PIN_P18, Gpio1pin_InitVal( 1u ) );
Gpio1pin_InitOut( GPIO1PIN_P1A, Gpio1pin_InitVal( 1u ) );
}
头文件提供了管脚控制寄存器的位带别名定义,我们直接操作位带区就可以。
重定义下:
#define LED_GREEN bFM_GPIO_PDORB_P2
#define LED_BLUE bFM_GPIO_PDOR1_P8
#define LED_RED bFM_GPIO_PDOR1_PA
然后按照下面代码可以控制指示灯闪烁:
if(bPulse_3s)
{
if(LED_BLUE)
LED_BLUE = 0;
else
LED_BLUE = 1;
}
if(bPulse_10s)
{
if(LED_GREEN)
LED_GREEN = 0;
else
LED_GREEN = 1;
}
if(bPulse_30s)
{
if(LED_RED)
LED_RED = 0;
else
LED_RED = 1;
}