【ARM】s3c2410之gpio调试

简介:

调试准备

   编译工具:MDK470a

   开发板:s3c2410

   调试方式:经mdk编译后得到 hex文件,用hex2bin工具转换成bin文件,通过usb下载,在DNW上观察


<Code-1>

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

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

  3. //===PORT F GROUP

  4. //端口:     GPF7      GPF6     GPF5     GPF4     GPF3     GPF2        GPF1     GPF0

  5. //信号:     LED_1     LED_2    LED_3    LED_4    FS2_INT  GPLD_INT1   KEY_INT  BUT_INT1

  6. //设置属性:  output    output   output   output   EINT3    EINT2       EINT1    EINT0

  7. //二进制值:  01        01       01       01       00       00          00       00

  8. int i,nout;  

  9. int Main()  

  10. {  

  11.       GPFCON = 0x00005500;  

  12. //     GPFDAT = 0x00000050;    

  13.            nout=0x000000F0;  

  14. while(1)  

  15.            {  

  16.                GPFDAT=nout & 0x00000070;    

  17. for(i=0;    i<1000000;  i++);  

  18.                GPFDAT=nout & 0x00000030;    

  19. for(i=0;    i<1000000;  i++);  

  20.                GPFDAT=nout & 0x00000010;  

  21. for(i=0;    i<1000000;  i++);  

  22.                GPFDAT=nout & 0x00000000;    

  23. for(i=0;    i<1000000;  i++);  

  24. //led();

  25.            }      

  26. //return(0);

  27. }  

现象:LED1~4按等时间间隙顺序循环亮灭


<Code-2>

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

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


  3. int i,nout;

  4. void led(void)

  5. {

  6.    GPFDAT=nout & 0x00000070;  

  7. for(i=0;    i<1000000;  i++);

  8.    GPFDAT=nout & 0x00000030;  

  9. for(i=0;    i<1000000;  i++);

  10.    GPFDAT=nout & 0x00000010;  

  11. for(i=0;    i<1000000;  i++);

  12.    GPFDAT=nout & 0x00000000;  

  13. }

  14. int Main()

  15. {

  16.       GPFCON = 0x00005500;

  17. //     GPFDAT = 0x00000050;

  18.            nout=0x000000F0;

  19. while(1)

  20.            {

  21.                GPFDAT=nout & 0x00000070;   //μãááLED1

  22. for(i=0;    i<1000000;  i++);

  23.                GPFDAT=nout & 0x00000030;   //μãááLED1/LED2

  24. for(i=0;    i<1000000;  i++);

  25.                GPFDAT=nout & 0x00000010;   //μãááLED1/LED2/LED3

  26. for(i=0;    i<1000000;  i++);

  27.                GPFDAT=nout & 0x00000000;   //μãááLED1/LED2/LED3/LED4

  28. for(i=0;    i<1000000;  i++);

  29. //led();

  30.            }    

  31. //return(0);

  32. }

现象:LED1与LED3几乎同时亮,一小段时间后LED2亮,一段时间后LED4亮,然后不再循环

注意:Code-2只是在Code-1的前面加了一个函数,但是并没有调用


<Code-3>

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

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


  3. int i,nout;

  4. void led(void)

  5. {

  6.    GPFDAT=nout & 0x00000070;  

  7. for(i=0;    i<1000000;  i++);

  8.    GPFDAT=nout & 0x00000030;  

  9. for(i=0;    i<1000000;  i++);

  10.    GPFDAT=nout & 0x00000010;  

  11. for(i=0;    i<1000000;  i++);

  12.    GPFDAT=nout & 0x00000000;  

  13. }

  14. int Main()

  15. {

  16.       GPFCON = 0x00005500;

  17. //     GPFDAT = 0x00000050;

  18.            nout=0x000000F0;

  19. while(1)

  20.            {

  21. /*

  22.                GPFDAT=nout & 0x00000070;   //μãááLED1

  23.                for(i=0;    i<1000000;  i++);

  24.                GPFDAT=nout & 0x00000030;   //μãááLED1/LED2

  25.                for(i=0;    i<1000000;  i++);

  26.                GPFDAT=nout & 0x00000010;   //μãááLED1/LED2/LED3

  27.                for(i=0;    i<1000000;  i++);

  28.                GPFDAT=nout & 0x00000000;   //μãááLED1/LED2/LED3/LED4

  29.                for(i=0;    i<1000000;  i++);

  30.                */

  31.                led();

  32.            }    

  33. //return(0);

  34. }

现象:和Code-2现象一样


<Code-4>

 
  1. #define rGPFCON (*(volatile unsigned *)0x56000050)  

  2. #define rGPFDAT (*(volatile unsigned *)0x56000054)

  3. //#define rGPFUP  (*(volatile unsigned *)0x56000058)  

  4. void port_init(void)    

  5. {


  6.    rGPFCON=0x00005500;

  7. //  rGPFUP=0x0000ff;    

  8. }

  9. void led_on(void)  

  10. {

  11. int i,nout;

  12.    nout=0x000000F0;

  13.    rGPFDAT=nout & 0x00000070;  

  14. for(i=0;    i<100000;   i++);

  15.    rGPFDAT=nout & 0x00000030;  

  16. for(i=0;    i<100000;   i++);

  17.    rGPFDAT=nout & 0x00000010;  

  18. for(i=0;    i<100000;   i++);

  19.    rGPFDAT=nout & 0x00000000;  

  20. for(i=0;    i<100000;   i++);

  21. }

  22. /*

  23. void led_off(void)  

  24. {

  25.    int i,nout;

  26.    nout=0;

  27.    rGPFDAT=0;

  28.    for(i=0;    i<100000;   i++);

  29.    rGPFDAT=nout | 0x00000080;      

  30.    for(i=0;    i<100000;   i++);

  31.    rGPFDAT=nout | 0x00000040;      

  32.    for(i=0;    i<100000;   i++);

  33.    rGPFDAT=nout | 0x00000020;  

  34.    for(i=0;    i<100000;   i++);

  35.    rGPFDAT=nout | 0x00000000;  

  36.    for(i=0;    i<100000;   i++);

  37. }

  38. void led_on_off(void)  

  39. {

  40.    int i;

  41.    rGPFDAT=0;  

  42.    for(i=0;    i<100000;   i++);

  43.    rGPFDAT=0x000000F0;

  44.    for(i=0;    i<100000;   i++);

  45. }

  46. */

  47. int main(void)

  48. {

  49. //  port_init();

  50.        rGPFCON=0x00005500;

  51. while(1)

  52.    {

  53.        led_on();

  54. //      led_off();

  55. //      led_on_off();

  56.    }

  57. return(0);

  58. }

  59. /*

  60. int i,nout;

  61. void led(void)

  62. {

  63.    GPFDAT=nout & 0x00000070;  

  64.    for(i=0;    i<1000000;  i++);

  65.    GPFDAT=nout & 0x00000030;  

  66.    for(i=0;    i<1000000;  i++);

  67.    GPFDAT=nout & 0x00000010;  

  68.    for(i=0;    i<1000000;  i++);

  69.    GPFDAT=nout & 0x00000000;  

  70. }

  71. int Main()

  72. {

  73.       GPFCON = 0x00005500;

  74. //     GPFDAT = 0x00000050;

  75.            nout=0x000000F0;

  76.            while(1)

  77.            {

  78.                GPFDAT=nout & 0x00000070;  

  79.                for(i=0;    i<1000000;  i++);

  80.                GPFDAT=nout & 0x00000030;  

  81.                for(i=0;    i<1000000;  i++);

  82.                GPFDAT=nout & 0x00000010;  

  83.                for(i=0;    i<1000000;  i++);

  84.                GPFDAT=nout & 0x00000000;  

  85.                for(i=0;    i<1000000;  i++);

  86.                //led();

  87.            }

  88.       //return(0);

  89. }

  90. */

现象:下载完成后,先y运行时开发板直接重启


分析

目前看来达到效果的就只有Code-1,我在源码中是有很多注释的,因为粘贴过来都是乱码,所以就全部删掉了。

Code-1与Code-2在PC平台上看应该是一样的,但是运行结果大相径庭,应该不是开发板缓存引起的,估计是编译器动了手脚

<1>可能MDK对代码作了优化,应该不是链接器,可能是编译的时候

<2>Code-4致使板子直接重启,原因是什么呢?

这两个个问题好像现在还搞不定,先放一放吧,下次问老师,或者大手帮忙解决下啊……




本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1190765

相关文章
|
程序员 内存技术
S3C2410(ARM9)的启动方式
1、Nand Flash启动 为了从Nand Flash启动,S3C2410配置了一个叫做Steppingstone的4KB内部SRAM缓冲器,当系统被配置为从Nand Flash启动时(配置由硬件工程师在电路板设置),Nandflash控制器会自动的将Nand Flash前4KB代码将会被自动装入内部RAM(Steppingstone)中,并把0x0地址设置为内部RAM的起始地址(存储器映射),然后CPU开始从内部RAM的0x0地址启动,这个过程不需要程序的干涉。
1057 0
|
24天前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
27天前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
37 0
|
1月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
105 3
|
2月前
ARM64架构提供的Cache操作
ARM64架构提供的Cache操作
|
3月前
|
Ubuntu Windows
ARM架构安装ubuntu系统
8月更文挑战第19天
1028 0
|
6月前
|
弹性计算 编解码 运维
飞天技术沙龙回顾:业务创新新选择,倚天Arm架构深入探讨
阿里云、平头哥与Arm联合举办的飞天技术沙龙在上海举行,聚焦Arm Neoverse核心优势和倚天710计算实例在大数据、视频领域的应用。活动中,专家解读了倚天710的性能提升和成本效益,强调了CIPU云原生基础设施处理器的角色,以及如何通过软件优化实现资源池化和稳定性平衡。实例展示在视频编码和大数据处理上的性能提升分别达到80%和70%的性价比优化。沙龙吸引众多企业代表参与,促进技术交流与实践解决方案的探讨。
飞天技术沙龙回顾:业务创新新选择,倚天Arm架构深入探讨