【ARM】s3c2410之gpio调试

发布者:未来画家最新更新时间:2021-07-12 来源: eefocus关键字:ARM  s3c2410 手机看文章 扫描二维码
随时随地手机看文章

调试准备


编译工具:MDK470a


开发板:s3c2410


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



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


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


//===PORT F GROUP


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


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


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


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


int i,nout;  


int Main()  


{  


      GPFCON = 0x00005500;  


//     GPFDAT = 0x00000050;    


           nout=0x000000F0;  


while(1)  


           {  


               GPFDAT=nout & 0x00000070;    


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


               GPFDAT=nout & 0x00000030;    


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


               GPFDAT=nout & 0x00000010;  


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


               GPFDAT=nout & 0x00000000;    


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


//led();


           }      


//return(0);


}  


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



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


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




int i,nout;


void led(void)


{


   GPFDAT=nout & 0x00000070;  


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


   GPFDAT=nout & 0x00000030;  


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


   GPFDAT=nout & 0x00000010;  


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


   GPFDAT=nout & 0x00000000;  


}


int Main()


{


      GPFCON = 0x00005500;


//     GPFDAT = 0x00000050;


           nout=0x000000F0;


while(1)


           {


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


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


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


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


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


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


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


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


//led();


           }    


//return(0);


}


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


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



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


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




int i,nout;


void led(void)


{


   GPFDAT=nout & 0x00000070;  


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


   GPFDAT=nout & 0x00000030;  


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


   GPFDAT=nout & 0x00000010;  


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


   GPFDAT=nout & 0x00000000;  


}


int Main()


{


      GPFCON = 0x00005500;


//     GPFDAT = 0x00000050;


           nout=0x000000F0;


while(1)


           {


/*


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


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


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


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


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


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


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


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


               */


               led();


           }    


//return(0);


}


现象:和Code-2现象一样



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


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


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


void port_init(void)    


{




   rGPFCON=0x00005500;


//  rGPFUP=0x0000ff;    


}


void led_on(void)  


{


int i,nout;


   nout=0x000000F0;


   rGPFDAT=nout & 0x00000070;  


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


   rGPFDAT=nout & 0x00000030;  


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


   rGPFDAT=nout & 0x00000010;  


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


   rGPFDAT=nout & 0x00000000;  


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


}


/*


void led_off(void)  


{


   int i,nout;


   nout=0;


   rGPFDAT=0;


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


   rGPFDAT=nout | 0x00000080;      


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


   rGPFDAT=nout | 0x00000040;      


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


   rGPFDAT=nout | 0x00000020;  


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


   rGPFDAT=nout | 0x00000000;  


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


}


void led_on_off(void)  


{


   int i;


   rGPFDAT=0;  


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


   rGPFDAT=0x000000F0;


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


}


*/


int main(void)


{


//  port_init();


       rGPFCON=0x00005500;


while(1)


   {


       led_on();


//      led_off();


//      led_on_off();


   }


return(0);


}


/*


int i,nout;


void led(void)


{


   GPFDAT=nout & 0x00000070;  


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


   GPFDAT=nout & 0x00000030;  


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


   GPFDAT=nout & 0x00000010;  


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


   GPFDAT=nout & 0x00000000;  


}


int Main()


{


      GPFCON = 0x00005500;


//     GPFDAT = 0x00000050;



           nout=0x000000F0;


           while(1)


           {



               GPFDAT=nout & 0x00000070;  


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


               GPFDAT=nout & 0x00000030;  


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


               GPFDAT=nout & 0x00000010;  


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


               GPFDAT=nout & 0x00000000;  


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



               //led();


           }



      //return(0);


}


*/


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


分析


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


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


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


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


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


关键字:ARM  s3c2410 引用地址:【ARM】s3c2410之gpio调试

上一篇:【ARM】s3c2410中断处理实例
下一篇:【ARM】arm·ad转换器

推荐阅读最新更新时间:2024-11-17 10:21

分析ARM和单片机的区别
1、软件方面 这应该是最大的区别了。引入了操作系统。为什么引入操作系统?有什么好处嘛? 1)方便。主要体现在后期的开发,即在操作系统上直接开发应用程序。不像单片机一样一切都要重新写。前期的操作系统移植工作,还是要专业人士来做。 2)安全。这是liNUX的一个特点。liNUX的内核与用户空间的内存管理分开,不会因为用户的单个程序错误而引起系统死掉。这在单片机的软件开发中没见到过。 3)高效。引入进程的管理调度系统,使系统运行更加高效。在传统的单片机开发中大多是基于中断的前后台技术,对多任务的管理有局限性。 2、硬件方面 现在的8位单片机技术硬件发展的也非常得快,也出现了许多功能非常强大的单片机。但是与32ARM相比还是有
[单片机]
基于S3C2410单片机串口应用程序的开发
  0 引言   ARM ADS全称为ARM Developer suite(ARM开发套件)。是ARM公司推出的ARM系列处理器集成开发工具,使用非常广泛,目前最高版本的是1.2,它取代了早期的ADS1.1和 ADS1.0。它除了可以安装在Windows NT4、Windows98和Windows95操作系统下,还支持Windows XP和Windows Me操作系统。ADS由命令行开发工具、ARM实时库、GuI开发环境(CodeWarrior和AXD)、实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。命令行开发工具完成将源代码编译,连接成可执行代码的功能,包手舌:a
[单片机]
基于<font color='red'>S3C2410</font>单片机串口应用程序的开发
三星宣布与 Arm 合作,以 GAA 代工技术优化下一代 Cortex-X CPU 内核
2 月 20 日消息,三星电子旗下芯片代工部门宣布与 Arm 合作,共同开发、优化下一代 Cortex-X 核心。据介绍,此次合作涉及通过使用 Arm 最新 Cortex-X 设计和三星 GAA 工艺,旨在提升 CPU 性能和能效表现。 也就是说,Arm 下一代 Cortex-X 系列 CPU 架构将针对三星电子的 Gate-All-Around(GAA)芯片制造技术进行优化,这意味着基于下一代 Cortex-X 系列架构的 CPU 在使用三星 2nm 和 3nm GAA 工艺制造时可获得进一步优化,从而提供更高的性能和更低的功耗。 IT之家查询相关资料获悉,GAA 是目前业界公认的下一代技术,相比 FinFET 进一步改进了半导
[嵌入式]
基于ARM和Linux交叉开发环境的搭建
摘要:交叉开发环境是嵌入式Linux开发的基础.后续的开发过程几乎都是基于此环境的。而ARM作为一种高性能、低成本的嵌入式RISC微处理器。已成为应用最广泛的嵌入式处理器。本文内容包括基于32位ARM920T核“GEC2410”开发板的硬件结构和嵌入式Linux交叉开发环境的概念和配置.开发工具的使用以及交叉调试器制作的方法。利用虚拟机在Windows操作系统下,为“GEC2410”开发板搭建了一个嵌入式Linux的运行平台。 关键词:交叉开发环境;ARM;Linux 0 引言 目前,随着ARM技术的日益成熟和广泛应用,基于ARM核的微处理器已经成为嵌入式市场的主流。而建立面向ARM构架的嵌入式操作系统也就成为当前研究的
[工业控制]
基于<font color='red'>ARM</font>和Linux交叉开发环境的搭建
Azure ARM (16) 基于角色的访问控制 - 使用默认的Role
  熟悉Microsoft Azure平台的读者都知道,在老的Classic Portal里面,我们可以设置共同管理员(Co-admin)。   参考: Windows Azure Active Directory (3) China Azure AD增加新用户      但是Co-Admin和服务管理员(Service Admin)的权限是一样的。   比如上图的admin创建的任何资源,是可以被newuser这个用户删除的。这样不能进行权限控制。   在新的Azure ARM Portal里面,我们是可以根据不同的用户,对资源组(Resource Group)设置基于角色的访问控制 (Role Based Ac
[单片机]
Azure <font color='red'>ARM</font> (16) 基于角色的访问控制 - 使用默认的Role
俄罗斯公布全新国产PC电脑:自研4核ARM处理器+魔改Linux系统加持
因为一些客观情况,俄罗斯加快了研制国产PC的步伐,以满足需求和替代进口。日前,名为MIG Akinak的新款PC产品问世,硬件和软件均由俄罗斯本土打造。 核心CPU名为Skif (Scythian),64bit ARM架构,采用4核Cortex-A53 CPU+PowerVR Series8XE GE8300 GPU+双核DSP设计,频率1.8GHz,功耗仅24W。 其他配置方面,8GB~64GB LPDDR4内存、32GB/64GB eMMC硬盘,可通过microSD卡或者SATA II扩展2TB。预留的M.2不能接SSD,只能接Wi-Fi/蓝牙无线模块、蜂窝数据模块等。 系统预装基于Linux的Alt发行版
[家用电子]
俄罗斯公布全新国产PC电脑:自研4核<font color='red'>ARM</font>处理器+魔改Linux系统加持
11.栈的初始化
11.栈的初始化 1.栈的概念: 2.满/空栈: 1.3:升/降栈: 1.4.栈桢的理解: 局部变量是保存在栈中的: Stack.c: 编译和反汇编: 传递参数: Func1: 保存寄存器的值: Main: Func1: Func2:
[单片机]
11.栈的初始化
S3C2410与指纹传感器MBF200的SPI通信
  引 言   随着网络技术和通信技术的发展,传统的身份认证技术对于信息安全表现得越来越有些力不从心了。由于人的身体特征具有唯一性和稳定性,人们开始把目光转向了生物识别技术,如指纹、虹膜、DNA、掌形识别等。在众多的特征识别中,指纹采集设备由于具有体积小、功耗低、稳定性好、误判概率低等优点,而受到人们的青睐。指纹传感器是指纹采集设备中的核心器件,在此选用富士通公司的MBF200。它是一款先进的固态指纹传感器芯片,具有性能高、功耗低、成本低、接口方便等特点。这使得在嵌入式系统中实现数据的传输更加方便。S3C2410是三星公司推出的ARM920T核微处理器,主要面向手持设备以及高性价比、低功耗的应用,且在片上集成了丰富的组件,有利于
[医疗电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved