资源简介
根据海思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文件传送
相关资源
- windows ce 系统的GPIO驱动程序
- ARM7 GPIO LED控制实验高速GPIO与低速GP
- hisi gpio控制
- STM32 GPIO和定时器 模拟串口
- mpc5748_gpio.zip
- C6455的GPIO与中断系统介绍
- STM32的流水灯程序
- STM32串口通信超级终端控制LED灯
- stm32GPIO模拟spi驱动NRF2401
- stm8l使用AD测量内部温度 库函数版本工
- GPIO测试工具V3.0
- STM32F103VE_NRF24L01_GPIO模拟SPI通讯程序
- STM32关于GPIO的控制程序
- openrisc_demo.rar
- STM32F103-GPIO-按键检测
- ESP8266 PWM
- STM8S003工程模版
- TMS320F28335 例程 CCS 可直接运行
- 基于STM32F4的US100超声波传感器测距
- 安卓socket控制树莓派GPIO(含server及
- 海思3531基于minigui3.0的会议系统界面设
- TC275例程_ADC、CCU6、GPIO、STM等
- WINCE6 GPIO 驱动
- STM32 F103R6 GPIO 闪烁源代码Keil及protue
- 基于28027的GPIO程序
- 海思平台代码读取GPIO口值
- GPIO 控制程序设计与实现
- STM32 F103R6 寄存器方式读写GPIO源代码
- s3c6410简单驱动
- STM32使用GPIO_F的0-7口的4*4矩阵按键
评论
共有 条评论