作者:刘老师,华清远见教育科技集团讲师。
【实验内容】
编写GPIO模块程序,点亮FS_4412开发板上的LED灯。
【实验目的】
熟悉开发环境的使用
掌握Exynos4412处理器GPIO功能
【实验平台】
FS_4412 Cortex-A9开发板、FS_Jtag仿真器、Eclipse
查看手册的GPIO模块,Exynos4412 引脚功能复用和分组如下所示
查看电路图,观察LED灯的连接方式
核心板电路图:
根据GPIO部分的寄存器描述,典型的寄存器如下图所示
以GPX1_0为例:
GPX1.CON = (GPX1.CON & ~(0xf)) | 1; //GPX1_0作为输出模式控制LED灯的亮灭
根据数据寄存器对应的位控制GPX1_0引脚的输出电平状态:
//Turn off LED3
GPX1.DAT &= ~0x1; //将Bit0 清零,GPX1_0输出电平
//Turn on LED3
GPX1.DAT |= 0x1; // 将Bit0 置‘1’, GPX1_0输出高电平
主程序如下所示:
/*-------------------------MAIN FUNCTION------------------------------*/
/**********************************************************************
* @brief Main program body
* @param[in] None
* @return int
**********************************************************************/
int main(void)
{
/*
*Config
*/
GPX2.CON = (GPX2.CON & ~(0xf<<28))| 1<<28;//GPX2_7:output, LED2
GPX1.CON = (GPX1.CON & ~(0xf)) | 1; //GPX1_0:output, LED3
GPF3.CON = (GPX3.CON & ~(0xf<<16 | 0xf<<20)) | (1<<16 | 1<<20);//GPF3_4:output, LED4
//GPF3_5:output, LED5
while(1)
{
//Turn on LED2
GPX2.DAT |= 0x1 << 7;
mydelay_ms(500);
//Turn on LED3
GPX1.DAT |= 0x1;
//Turn off LED2
GPX2.DAT &= ~(0x1<<7);
mydelay_ms(500);
//Turn on LED5
GPF3.DAT |= (0x1 << 5);
//Turn off LED3
GPX1.DAT &= ~0x1;
mydelay_ms(500);
//Turn on LED4
GPF3.DAT |= (0x1 << 4);
//Turn off LED5
GPF3.DAT &= ~(0x1 << 5);
mydelay_ms(500);
//Turn off LED4
GPF3.DAT &= ~(0x1 << 4);
}
return 0;
}