首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

请问下GPIO驱动的有关问题

2013-03-26 
请教下GPIO驱动的问题static struct gpio_chip gpio_5892_chip {.label 5892,.direction_input gpio_

请教下GPIO驱动的问题
static struct gpio_chip gpio_5892_chip =
{
    .label              = "5892",
    .direction_input    = gpio_5892_direction_input,
    .direction_output   = gpio_5892_direction_output,
    .get                = gpio_5892_get,
    .set                = gpio_5892_set,
    .base               = 0,
    .ngpio              = ARCH_NR_GPIOS,
};

/****************************************************************************
*
*  brcm_init_gpio
*
*   Sets up gpiolib so that it's aware of how to manipulate our GPIOs
*
*****************************************************************************/

void  bcm_init_gpio( void )
{
    bcm5892_gpiochip_add( &gpio_5892_chip );

} // bcm_init_gpio

#endif //#ifdef CONFIG_HAVE_GPIO_LIB
。。。。
static int __init gpio_init( void )
{
/* Initialize debug level */
gLevel = DBG_DEFAULT_LEVEL;

GPIO_DEBUG(DBG_INFO,( "gpio_init called\n" ));

#ifdef CONFIG_HAVE_GPIO_LIB
    bcm_init_gpio( );#endif

    printk( banner );

   return 0;
} /* gpio_init */

module_init(gpio_init);

在gpio_chip结构中的方向、端口值等函数,在驱动中要如何调用?比如我在驱动中使用到哪些端口,然后要设置端口方向和口值。
[解决办法]
1、首先需要一个驱动的框架(我的感觉就像是一种仪式,让操作系统明白这是驱动,正在申请驱动的特权);
2、在这个框架下,再进行物理地址到虚拟地址的映射;
3、然后,调用端口函数来访问端口。
有的操作系统的端口操作函数已经做过物理地址的映射,就不需要用户自己再映射了。
无操作系统的裸机下运行程序,1、2两步就免了
[解决办法]
你这个不是已经是驱动了吗?还怎么在驱动中调用?看不懂你的问题
[解决办法]
你可以在bcm5892这个芯片的GPIO驱动的上层架构中直接调用direction_input,get,set等函数来获取GPIO口设置I/O

热点排行