資源簡介
根據海思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文件傳送
評論
共有 條評論