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

请问上GPIO驱动的有关问题

2012-09-28 
请教下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

热点排行