现在的位置: 首页 > 综合 > 正文

Linux 驱动学习笔记

2013年09月30日 ⁄ 综合 ⁄ 共 2431字 ⁄ 字号 评论关闭

最近用mini2440学习linux驱动,做一下笔记


LED驱动:

static int __init dev_init(void)

在驱动的初始化函数中经常看到,__init 前缀,
这个在下面文件中定义

file:/include/linux/init.h






主要是将这个函数放在init段section中,这样可以在执行完成后,释放内存。


关于s3c2410_gpio_cfgpin函数,只能了解到,设置某个GPIO的功能,但是怎么实现的没看明白,好像还用到虚拟地址了,最后也没有发现是怎么配置的GPCON寄存器的,



而且,后面



有个地方讲不通:

(这个地方应该是都不满足
switch
的条件,所以,
function
不改变)

#define
S3C2410_GPIO_LEAVE  
(0xFFFFFFFF)

#define S3C2410_GPIO_INPUT  
(0xFFFFFFF0) 
/*
not available on A */

#define
S3C2410_GPIO_OUTPUT 
(0xFFFFFFF1)

#define
S3C2410_GPIO_IRQ    
(0xFFFFFFF2)  
/* not available for all */

#define
S3C2410_GPIO_SFN2   
(0xFFFFFFF2) 
/* bank A => addr/cs/nand */

#define
S3C2410_GPIO_SFN3   
(0xFFFFFFF3) 
/* not available on A */

 


#define
S3C2410_GPB5_OUTP   
(0x01 << 10)

所以,

s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP);

switch (function)

根本对不上号?

 

s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP);

s3c2410_gpio_cfgpin(37, S3C2410_GPB5_OUTP);

s3c2410_gpio_cfgpin(37,

 0x01 << 10


);

剩下的37怎么变换出mask,怎么得到GPCON的地址没看懂?






这个在
/arch/arm/mach-s3c2410/include/mach/regs-gpio.h
中定义


#define
S3C2410_GPB5        
S3C2410_GPIONO(S3C2410_GPIO_BANKB, 5)


#define
S3C2410_GPB5_INP     (0x00 << 10)


#define
S3C2410_GPB5_OUTP    (0x01 << 10)


#define
S3C2410_GPB5_nXBACK  (0x02 << 10)


 



S3C2410_GPIONO

(S3C2410_GPIO_BANKB
,
5)


 


#define S3C2410_GPIONO

(bank,offset) ((bank) + (offset))


#define
S3C2410_GPIO_BANKA   (32*0)


#define S3C2410_GPIO_BANKB

  
(32*1)

 



可以看一下这篇文章:

http://www.linuxidc.com/Linux/2011-06/37322.htm




抱歉!评论已关闭.