首页
社区
课程
招聘
[原创]mini2440简单的I/O操作
2016-10-12 23:31 3838

[原创]mini2440简单的I/O操作

2016-10-12 23:31
3838
mini2440是一块ARM9的开发板, 用了Samsung S3C2440作为处理器,而Samsung S3C2440是基于32位arm9内核的。所以想对mini2440的I/O,要熟悉32位的arm指令,和S3C2440的内部资源。

S3C2440共有130个I/O口,可以通过指令,来决定每个I/O的状态。
— Port A(GPA): 25-output port
— Port B(GPB): 11-input/out port
— Port C(GPC): 16-input/output port
— Port D(GPD): 16-input/output port
— Port E(GPE): 16-input/output port
— Port F(GPF): 8-input/output port
— Port G(GPG): 16-input/output port
— Port H(GPH): 9-input/output port
— Port J(GPJ): 13-input/output port

假如要控制某个I/O口输出高电平,没有现象很难看出我们的操作是否成功,所以在开发板上通常会为某些I/O口接上外围电路,比如led灯、蜂鸣器等等,供我们测试学习。

在mini2440开发板上的PortB的第1个口GPB0,外接的是一个蜂鸣器的电路,如图,当GPB0输出高电平时,三极管导通,蜂鸣器电路形成回路开始正常工作,反之输出低时不工作。所以我们可以通过指令使BPB0输出高,打开蜂鸣器。

GPB的每个I/O口都有输出/输入两个功能可以选,其中输出状态还可以选择是否上拉(就是默认是高)。我们要想使蜂鸣器工作,在这里要选择GPB的I/O口是输出状态,并且不上拉,即默认是输出低,通过指令控制输出高,使蜂鸣器工作。
看一下S3C2440的芯片手册,找到GPB0各个寄存器的地址。

GPBCON 0x56000010 R/W Configures the pins of port B 0x0
GPBUP 0x56000018 R/W Pull-up disable register for port B 0x0
GPBDAT 0x56000014 R/W The data register for port B Undef.

GPB0 [1:0]  00 = Input 01 = Output
       10 = TOUT0 11 = reserved
GPB[10:0]   0: The pull up function attached to the corresponding port pin is enabled.
       1: The pull up function is disabled
GPB[10:0]   When the port is configured as output port, the pin state is the same
       as the corresponding bit. 

通过查找芯片手册最后确定了各个寄存器的值,接下来就是具体的汇编指令了。

  AREA asm, CODE, READWRITE
  ENTRY

;初始化变量
GPBCON    EQU  0x56000010
GPBUP     EQU  0x56000018
GPBDAT    EQU  0x56000014

start
  ldr  r0, =GPBCON    ;0x56000010 -> r0
  ldr  r1, [r0]             ;0x56000010地址保存的值 -> r1
  and r1, r1, #0xfc      ;r1后两位清零 (GPB0的控制位)
  orr r1, r1, #0x01      ;r1后两位赋1 (GPB0的控制位置1)
  str r1, [r0]                ;r1的值赋值到0x56000010的地址中 完成GBP0控制位的操作
  
  ;和上面类似,分被对GPB0UP,GPB0DAT进行赋值
  ldr r0, =GPBUP
  ldr r1, [r0]
  and r1, r1, #0xfc
  orr r1, r1, #0x01
  str r1, [r0]
  
  ldr  r0, =GPBDAT
  ldr  r1, [r0]
  and r1, r1, #0xfc
  orr r1, r1, #0x01 
  str  r1, [r0]
  
  END

用ARM MDK 编译后用jlink连接开发板,调试运行,蜂鸣器开始响了。
玩裸机,I/O操作是基础,后面不管是串口、iic、spi等通信协议,还是操作一些传感器,都是在操作I/O的基础上进行的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回