Cortex-A9 Exynos4412四核处理器---GPIO模块

作者:刘老师,华清远见教育科技集团讲师。

【实验内容】

编写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;
        }