分类: LINUX
2011-08-08 19:13:16
User LED电路图
User LED CPU管脚接线图
从电路图文档中可以看出,LED是通过GPIO的M端口实现的,其中分别用到了GPM0/1/2/3管脚。根据LED的接线图可以看出只有在NLED0/1/2/3为低电平时,才会导通点亮。M端口有6个管脚,三个对应的寄存器:
GPMCON是控制寄存器,控制管脚的功能:用作输入,输出等。
GPMDAT是数据寄存器,内容与管脚电平相一致,也即GPM0为高电平那么对应的0b1为1.
GPMPUD是用来控制功率输出的,通常在电平输出不符合要求是,实现电平的上拉和下拉。
相关寄存器文档(芯片手册300 pg.)
Bootloader中对应GPM初始化的代码位于board/samsung/smdk6410/lowlevel_init.S
相关寄存器定义在include/s3c6410.h
ldr指令用来将立即数装载如寄存器,str将r1中的值写入间址GPMDAT_OFFSET+r0。ELFIN_GPIO_BASE定义的就是实际的物理地址,不难看出bootloader是实地址寻址的。
前3行写入0x00111111到GPMCON寄存器,也即配置GPM0-5为输出。
接着2行写入0x00000555到GPMPUD寄存器,配置GPM0-5内部电阻下拉使能。这是因为如果要点亮LED,那么需要低电平,下拉可以保证下拉电阻接地产生低电平。
最后2行写入0x002a到GPMDATA寄存器,也即0b101010,所以对应的GPM0/2/4是低电平,GPM1/3/5是高电平,与此相连的LED1/3点亮,LED2/4熄灭,这也就是为何开发板上电后LED1/3点亮的原因。