GPIO分成很多组今天学习的这个芯片的GPIO有GPA-GPJ个组。具体可在芯片手册中看到。

GPIO有很多寄存器,今天学习的这个芯片,他的寄存器分为以下几种类型:

  (1)端口控制寄存器

  (2)端口数据寄存器

  (3)PORT PULL-UP REGISTER               端口上拉寄存器

  (4)MISCELLANEOUS CONTROL REGISTER         混杂的控制寄存器

  (5)EXTERNAL INTERRUPT CONTROL REGISTER       外部中断控制寄存器

 以上信息在芯片手册中获得。

  接着介绍

    (1)GPIO各个组都有那些类型的寄存器。如GPA组,有控制和数据寄存器,其他类型的没有,

    (2)GPIO各个组各个寄存器的基地址。如GPACON基地址为0X255000000

    (3)GPIO各个组中的其中每个编号对应的位。如GPA1对应的位是0-1位,

    (4)位中各个值表示的意义,如GPA1对应0-1位,若0-1位为10,则表示设置它为输入,还有一些不知道表示的是什么

今天做的实验:

  一、汇编程序点一个灯

    (1)在板子上找到这个我要点的等看它标的是什么(现在这板子上面标的是D10)

    (2)进入板子的原理图,搜索D10,通过其原理图,

    

        可得到信息,它的另一端是nLED_1,只要它这一端输出低电平,那么灯就亮

    (2.5)那么现在得到目标,由点亮灯,变为了让nLED_1输出高电平,这就需要设置控制寄存器和数据寄存器。

    (3)接着搜索nLED_1看它接入道芯片的哪个引脚,结果发现接道的是芯片的GPF4这个GPIO管脚

    (4)由GPF4可知道信息,这个灯连接的是GPIO,并且用的是GPIO中的F组,在组中编号4

    (5)进入芯片手册,搜索GPF,得到GPF这个组的(控制寄存器)和(数据寄存器)的地址

    (6)同时也得到信息,编号为4的这个管脚对应的是8-9这两位,设置GPFCON这个基地址的寄存器的8-9这两位为01就代表输出,数据寄存器就0就代表低电平

    (7)编写用汇编语言写的代码,

    (8)把它编译成板子可以运行的二进制程序

        a)使用这个板子的交叉编译工具链arm-linux-gcc 编译成.o

        b)将.o通过arm-linux-ld -Ttext 0x0000000  led_on.o -o led_on_elf生成elf文件,其中的-Ttext 0x0000000表示的是代码段从0开始,具体还不怎么理解

        c)arm-linux-objcopy -O binary -S led_on_elf led_on.bin将他转换成板子上能运行的.BIN的二进制文件

    (9)通过昨天搭建的开发环境,将他通过网络下载,放到NAND FLASH上的BOOT LOADER分区,

    (10) 播码NAND启动

  二、C语言程序电灯

    (1)分析:C程序电灯,不可能只写一个C程序,因为C程序的执行,需要条件,比如最基本的栈必须要有,所以得写一个汇编程序,为C语言的加入提供条件。

    (2)创建两个文件,一个.S,一个.C

      .S文件目的是做调用C程序之前的一些初始化操作,为C程序的加入提供条件

      .C文件的目的就是点亮灯。

    (3).S文件中要做的

        a)关调看门狗,因为不关的话,程序运行3秒看门狗就要重启系统,上面那个实验没关看门狗,也不知道灯会不会闪,不管了,这不是重点,

        b)设置栈,

        

          这条语句的意思有些不懂,为什么这样就是设置栈了,猜想:栈是向下生长的,将SP指针指向最高地址,压栈时就向下压,但是后面说的不能大于4K,可能就是因为,当前没有初始化SDRAM,内存的访问也只有片内的SRAM,而SRAM的大小最大也就是4K

        C)跳入main函数

    (4).C中要做的,就是简单的位操作设置值了

    (5)后面同上

  三、C程序通过按键电灯

    (1)看板子上的按键,标的是EINT0,原理图中搜索EINT0

    

      由电路图知道,当不按下的时候,为高电平,当按下,就变成低电平。

      我想要知道是否按下,肯定需要知道寄存器中的值,所以应该是设置为输入。

      所以可以确定,要设置它的控制器为输入,然后娶他的数据寄存器的值,

    (2)用上边的方法查询到了按键和灯的各个地址,

     (3)编写C程序,

    (4)剩下的同上

    

今天学习的裸板驱动之GPIO实验学习心得的更多相关文章

  1. 今天学习的裸板驱动之存储控制器心得(初始化SDRAM)

    CPU只管操作地址,而有些地址代表的是某些存储设备. 但是操作这些存储设备需要很多东西,比如需要制定bank,行/列地址等.所以就有了存储管理器,用来处理这种CPU操作的地址和存储设备间的转换. (1 ...

  2. 裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  3. arm裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  4. S5PV210裸板驱动:启动

    以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...

  5. 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展

    实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...

  6. Linux学习 : 裸板调试 之 配置UART

    1.UART原理说明 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出:接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART ...

  7. Linux学习 : 裸板调试 之 使用MMU

    MMU(Memory Management Unit,内存管理单元),操作系统通过使用处理器的MMU功能实现以下:1)虚拟内存.有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序.为了使用虚拟 ...

  8. Linux学习 : 裸板调试 之 配置使用NAND FLASH

    关于NAND FLASH的结构是以页为单位写,以块为单位来擦除: 1Gb     为大页   page=2048Kb    BLOCK=128K 512Mb 为小页   page=512byte   ...

  9. s3c2440串口裸板驱动(使用fifo)

    使用fifo的好处有: 1:串口的数据发送的数据量较大时,使用fifo可以大大降低MCU的开销.(有点类似串入并出的cput处理模型,本质上还是串行收发) 2:在某些特殊场合,例如制定较复杂的协议时, ...

随机推荐

  1. SQLSERVER误删Windows登录用户

    SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法   SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇 ...

  2. SugarSync的API总结

    SugarSync API App支持SugarSync网盘的前提: 1.AccessKeyID:xxx 2.Private Access Key:xxx 3.AppID:xxx 详细的API总结如下 ...

  3. D11

    =-=感觉今天的题目好难... 主要是没有碰到过,所以会觉得不懂怎么写.. 其实现在想想,T1,T2,T3其实都好水..T1其实没有做过还真不会,有做过的话就是个大水题了 T2找最小环..超级裸的,但 ...

  4. Mahout之(二)协同过滤推荐

    协同过滤 —— Collaborative Filtering 协同过滤简单来说就是根据目标用户的行为特征,为他发现一个兴趣相投.拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤可能感兴趣的内容 ...

  5. .Net里的Attribute 学习

    .Net里的Attribute 学习 前两天看到书里边讲Attribute定制,结合了网上的资料,自己做了简单的登录功能,并结合了某些设计模式,有兴趣的朋友可以看下.由于时间原因,没有做过多的说明,直 ...

  6. MarkDown/reST 文档发布流水线

    相信很多朋友都在使用Markdown或者restructuredText格式来编写一些技术文档,也会把这些文档放在github上分享给社区.GitHub提供了很好的Markdown格式解析支持,但是这 ...

  7. toFixed()要注意的

    toFixed()是Number类型的一种方法,该方法是保留四舍五入取指定位数的小数点,但最终返回值类型是字符串.所以,刚开始用该方法的人要注意不要在计算时使用到该方法.

  8. 百度地图API的自动定位路线查询

    功能如下:打开时自动定位到当前位置(浏览器可能会屏蔽自动定位功能,建议手机查看,或直接打开地址:http://1.jingcode.applinzi.com/test2.html),输入目的地点击搜索 ...

  9. Java之路(六) 局部变量作用域最小化

    将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 将局部变量的作用域最小化的方法有: 方法1:在第一次使用某个局部变量的地方进行声明. a.Java可以在任何可以出现语句 ...

  10. MySQL闪回原理与实战

    本文将介绍闪回原理,给出笔者的实战经验,并对现存的闪回工具作比较. DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除 ...