上一章节进行实验使用的是汇编进行编程的,本次实验是使用c语言进行编写的。

(1)点亮一个led灯

  1)启动文件:

   crt.S

  .text

  .global _start

  _start:

    ldr R0,=0x53000000

    mov R1,#0x00000000

    str R1,[R0]

    ldr sp,=1024*4

      bl main

halt_loop:

      b  halt_loop

  2)led.c

    #define GPFCON (*(volatile unsigned long*)0x56000050)

  #define GPFDAT (*(volatile unsigned long*)0x56000054)

    int main()

    {

      GPFCON= 0x00000100;  //可能对其他位进行产生影响

      GPFDAT= 0x00000000;

    return 0;

}

   3)Makefile

   led.bin: crt.S led.c

    arm-linux-gcc -g -c -o crt.o crt.S

    arm-linux-gcc -g -c -o led.o led.c

    arm-linux-ld -Ttext 0x00000000 -g led.o crt.o -o led_elf

    arm-linux-objcopy -O binary -S led_elf led.bin

    arm-linux-objdump -D -m arm led_elf > led.dis

  clean:

     rm -f led_elf led.dis led.bin *.o

(2)流水灯实验

  启动文件:crt.S

  源文件:leds.c

   #define GPFCON (*(volatile unsigned long*)0x56000050)

   #define GPFDAT (*(volatile unsigned long*)0x56000054)

   

   #define GPF4_reset (3<<(4*2))

   #define GPF5_reset (3<<(5*2))

   #define GPF6_reset (3<<(6*2))

   

   #define GPF4_out (1<<(4*2))

   #define GPF5_out (1<<(5*2))

   #define GPF6_out (1<<(6*2))

 

void Delay_ms(volatile unsigned long ms)//延时

  {

    for(; ms>0; ms--);

}

   int main()

  {

     GPFCON &=~(GPF4_reset | GPF5_reset | GPF6_reset);

     GPFCON |= GPF4_out | GPF5_out | GPF6_out;  //输出

    while(1)

   {

     GPFDAT &=~(1<<4);

     Delay_ms(30000);

     GPFDAT |=(1<<4);

      

     GPFDAT &=~(1<<5);

     Delay_ms(30000);

     GPFDAT |=(1<<5);

     GPFDAT &=~(1<<6);

     Delay_ms(30000);

     GPFDAT |=(1<<6); 

   } 

}

  Makefile:

 leds.bin: crt.S leds.c

    arm-linux-gcc -g -c -o crt.o crt.S

    arm-linux-gcc -g -c -o leds.o leds.c

    arm-linux-ld -Ttext -g crt.o leds.o -o leds_elf

    arm-linux-objcopy -O binary -S leds_elf leds.bin

    arm-linux-objdump -D -m arm leds_elf >leds.dis

  clean:

    rm -f leds_elf leds.bin leds.dis *.o

 

 (3)按键控制led

    

   按键采用外部上拉的形式连接,其中S2,S3,S4分别连接于2440的GPF0,GPF2,GPG3引脚。

   启动文件:crt.S 

   源文件:led_key.c

   #define GPFCON (*(volatile unsigned long*)0x56000050)

   #define GPFDAT (*(volatile unsigned long*)0x56000054)

   

   #define GPGCON (*(volatile unsigned long*)0x56000060)

   #define GPGDAT (*(volatile unsigned long*)0x56000064)

   

   #define GPF4_reset (3<<(4*2))

   #define GPF5_reset (3<<(5*2))

   #define GPF6_reset (3<<(6*2))

   

   #define GPF4_out (1<<(4*2))

   #define GPF5_out (1<<(5*2))

   #define GPF6_out (1<<(6*2))

   

   #define GPF0_reset (3<<(0*2))

   #define GPF2_reset (3<<(2*2))

   #define GPG3_reset (3<<(3*3))

   #define GPF0_in (0<<(0*2))

   #define GPF2_in (0<<(2*2))

   #define GPG3_in (0<<(3*2))

   int main()

{

   GPFCON &=~(GPF4_reset | GPF5_reset | GPF6_reset);//输出

   GPFCON |= GPF_out4 | GPF_out5 | GPF_out6;

   

   GPFCON &=~(GPF0_rest | GPF2_reset);

   GPFCON |= GPF0_in | GPF2_in;//该处可要可不要,由于[x:x]=00,通过上面语句已经实现

   GPGCON &=~GPG3_reset;

   GPFCON |= GPG3_in; //该处可以省去

   while(1)

{

   if(GPFDAT & (1<<0))  //按键未按

     GPFDAT |= (1<<4);  //led1灭掉

   else 

     GPFDAT &=~(1<<4);  //led1点亮

   if(GPFDAT & (1<<2))

     GPFDAT |= (1<<5);

   else

     GPFDAT &=~(1<<5);

   if(GPGDAT & (1<<3))

     GPGDAT |=(1<<6);

   else 

     GPGDAT &=~(1<<6);

}

}

    Makefile:

   led_key.bin: crt.S led_key.c

    arm-linux-gcc -g -c -o crt.o crt.S

    arm-linux-gcc -g -c -o led_key.o led_key.c

    arm-linux-ld -Ttext 0x00000000 -g crt.o led_key.o led_key_elf

    arm-linux-objcopy -O binary -S led_key_elf led_key.bin

    arm-linux-objdump -D -m arm led_key_elf > led_key.dis

   clean:

    rm -f led_key_elf led_key.dis led_key.bin *.o

 通过本次实验简单掌握了S3C244的gpio操作,gpio段落也算告一段落了。下面进行总结一下:

 

GPIO实验之c语言的更多相关文章

  1. Cortex-M3学习日志(一)-- GPIO实验

    因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...

  2. GPIO实验(二)

    =============第三个实验============用c语言轮流点亮3个LED=================== 1.crt0.S.text.global _start_start:    ...

  3. GPIO实验(一)

    目标:点亮LED1.看原理图,找到对应的引脚和寄存器2.a.配置寄存器为输入/出引脚    GPFCON[9:8]=0b01  b.设置输出高/低电平    GPDAT[4]=0b0 1.预处理2.编 ...

  4. S02_CH10_ User GPIO实验

    S02_CH10_ User GPIO实验 在之前的第四章课程中,我们详细的讲解了如何在VIVADO软件下封装一个简单的流水灯程序.在ZYNQ开发过程中,有时候我们可能会需要与ARM硬核进行通信,在这 ...

  5. 实验七 MySQL语言结构

    实验七 MySQL语言结构 一.  实验内容: 1. 常量的使用 2. 变量的使用 3. 运算符的使用 4. 系统函数的使用 二.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为 ...

  6. 实验报告系列:实验一 HTML语言的简单网页制作

    实验一 HTML语言的简单网页制作 一.实验目的: 1.掌握常用的HTML语言标记: 2.利用文本编辑器建立HTML文档,制作简单网页. 3.学习将其它格式的文档转换成HTML格式的文档 二.实验内容 ...

  7. 实验1 C语言开发环境使用和数据类型、运算符、表达式

    ♦ 实验结论 PART 1 验证性内容 问题: 1.结尾没有加“:”时回车到下一行的时候再输入下一行的语言首字对齐方式会发生变化,可以对上一行进行检查. (这一点需要在不同软件里面试一下,在机房里的软 ...

  8. 实验1 c语言最基本内容

    part 1 验证性内容 总结:经受了数组和结构体的双重折磨后,发现这部分好简单...现在没啥问题了... part  2  补全程序 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数 ...

  9. 实验1 C 语言开发环境使用和数据类型、运算符、表达式

    # include <stdio.h> int main() { int x; printf("x:\n"); scanf("%d",&x) ...

随机推荐

  1. [openjudge-搜索]哆啦A梦的时光机

    题目描述 描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿 ...

  2. python编程快速上手第7章习题20

    20.如何写一个正则表达式,匹配每 3 位就有一个逗号的数字?它必须匹配以下数字:'42''1,234''6,368,745'但不会匹配: '12,34,567' (逗号之间只有两位数字) '1234 ...

  3. 设计模式之模板方法模式:实现可扩展性设计(Java示例)

    概述 在实际开发中,常常会遇到一项基本功能需要支撑不同业务的情况.比如订单发货,有普通的整包发货,有分销单的发货,采购单的发货,有多商品的整包或拆包发货等.要想支持这些业务的发货,显然不能在一个通用流 ...

  4. 设计模式之Facade(外观)(转)

    Facade的定义: 为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connec ...

  5. 20165215 2017-2018-2 《Java程序设计》第九周学习总结

    20165215 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 URL类 URL 类是 java.net 包中的一个重要的类,使用 URL 创建对象的应用程 ...

  6. 第三方统计分析埋点工具对比,神策、Ptmind、GrowingIO、国双,还有谷歌分析,谁更好?

    第三方统计分析埋点工具对比,神策.Ptmind.GrowingIO.国双,还有谷歌分析,谁更好?https://www.colabug.com/2985393.html GA.Mixpanel 和神策 ...

  7. Android4.0 主线程不能访问网络异常解决办法

    从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会 ...

  8. Django框架----Form组件补充

    一.Form类 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: 1 Field 2 required=T ...

  9. Linux centos7 下 svn 服务器搭建

    摘自:https://www.cnblogs.com/mymelon/p/5483215.html 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在 ...

  10. ui-router .state参数配置

    .state('页面被引用时的变量名',{ template: '<h1>My Contacts</h1>',//被应用时插入的模板,状态被激活时,它的模板会自动插入到父状态对 ...