资源简介
根据海思3531 datasheet写的gpio操作的例子,已经用于实际产品,运行稳定
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “hi_gpio.h“
#define GPIO_1_base_ADDR 0x20160000
#define GPIO_6_base_ADDR 0x201b0000
#define GPIO_10_base_ADDR 0x201f0000
#define GPIO_DIR_base (groupbase+0x400)
#define GPIO_INTR_MASK (groupbase+0x410)
#define GPIO_DATA_base data_reg_base
#define WRITE_REG(Addr Value) ((*(volatile unsigned int *)(Addr)) = (Value))
#define READ_REG(Addr) (*(volatile unsigned int *)(Addr))
//static DECLARE_MUTEX(gpio_sem);
static unsigned int groupbase=-1;
static unsigned int data_reg_base=0;
static unsigned int gpio1_base_addr_virtual=0;
static unsigned int gpio6_base_addr_virtual=0;
static unsigned int gpio7_base_addr_virtual=0;
static unsigned int gpio10_base_addr_virtual=0;
static void gpio_calculate_data_groupbase(unsigned int groupnum unsigned int bitnum)
{
switch(groupnum)
{
case 1:
groupbase =gpio1_base_addr_virtual;
break;
case 6:
groupbase =gpio6_base_addr_virtual;
break;
case 7:
groupbase =gpio7_base_addr_virtual;
break;
case 10:
groupbase =gpio10_base_addr_virtual;
break;
default:
break;
}
//printk(“groupbase:%x !\n“groupbase);
data_reg_base=groupbase+(1<<(bitnum+2));
printk(“data_reg_base:%#x !\n“data_reg_base);
}
static int gpio_open(struct inode *inode struct file *filp)
{
return 0;
}
static int gpio_release(struct inode *inode struct file *filp)
{
return 0;
}
static int gpio_ioctl(struct file *file unsigned int cmd unsigned long arg)
{
unsigned char __user *argp = (unsigned char __user *)arg;
gpio_groupbit_info group_bit_info;
unsigned int reg_tmp=0;
copy_from_user(&group_bit_infoargp sizeof(gpio_groupbit_info));
printk(“[driver]-debug:gpio_ioctlcmd=%#x\n“cmd);
printk(“[driver]-debug:gpio%d_%d=%d\n“group_bit_info.groupnumbergroup_bit_info.bitnumbergroup_bit_info.value);
if(((group_bit_info.groupnumber != 1) && (group_bit_info.groupnumber != 6)
&&(group_bit_info.groupnumber != 10)&&(group_bit_info.groupnumber != 7)) ||(group_bit_info.bitnumber>7))
{
printk(“[driver]:group number:%d or bitnum:%d beyond extent!\n“group_bit_info.groupnumbergroup_bit_info.bitnumber);
return -1;
}
gpio_calculate_data_groupbase(group_bit_info.groupnumbergroup_bit_info.bitnumber);
switch(cmd)
{
case GPIO_SET_DIR:
{
reg_tmp=READ_REG(GPIO_DIR_base);
if(group_bit_info.value==0)
{
reg_tmp &=~(1< WRITE_REG(GPIO_DIR_basereg_tmp);
}
else if(group_bit_info.value==1)
{
reg_tmp |=(1< WRITE_REG(GPIO_DIR_basereg_tmp);
}
else
{
printk(“dir beyond of extent!\n“);
/
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-04-02 14:03 gpio\
文件 6824 2015-04-02 14:02 gpio\hi_gpio.c
文件 321 2015-04-02 14:02 gpio\hi_gpio.h
文件 345 2015-04-02 14:02 gpio\Makefile
文件 7826 2015-04-02 14:02 gpio\test_gpio
文件 1831 2015-04-02 14:02 gpio\test_gpio.c
- 上一篇:飞机大战_简易版
- 下一篇:DSP-TMSC6678UDP文件传送
相关资源
- GPIO 控制程序设计与实现
- STM32 F103R6 寄存器方式读写GPIO源代码
- s3c6410简单驱动
- STM32使用GPIO_F的0-7口的4*4矩阵按键
- 库函数驱动外设的应用:应用STM32的
- 可配置式GPIO模拟SPI总线方法的设计与
- 海思GPIO驱动代码
- stm32f10x相关库文件 (包含: stm32f10x
- SHT20温湿度传感器程序gpio模拟I2C+中文
- STM32的GPIO口模拟串口通信.rar
- 4412 GPIO驱动程序、蜂鸣器实现音乐播
- STM32的GPIO口模拟串口通信
- 编写QT键盘插件自定义GPIO按键
- GPIO口扫描LED屏源码
- GPIO输出控制实验-控制Led亮灭
- STM32F407 GPIO LED点亮例程
- 香橙派orangepi的GPIO接口wiringOP_zero
- 树莓派3B+ 网页控制GPIOWebOPirpi3-webiop
- gpioDemo.rar
- 嵌入式Linux用户态操作GPIO接口代码和
- AR9331在OpenWRT下的GPIO驱动及应用开发新
- STM32F103+VL53L0源代码.zip
- stm32 gpio模拟i2c_slave
- FRDM_KL26 VLPR模式GPIO唤醒
- SFF-8485 串行GPIOSGPIO总线规范-中文版
- GPIO模拟MIPI RFFE
- DSP2812用GPIO口模拟I2C协议
- DSP6678GPIO中断程序
- Linux驱动开发 用IO内存操作GPIO控制L
- IMX6_GPIOS
评论
共有 条评论