实验七I/O口驱动实验
―、实验目的:
1、 了解PXA270微处理器GPIO的功能
2、 熟悉PXA270微处理器GPIO驱动程序的编写方法
3、 掌握驱动程序的加载过程和方法
二、 实验环境(软件与硬件):
软件环境:VMw实验七I/O口驱动实验
―、实验目的:
1、 了解PXA270微处理器GPIO的功能
2、 熟悉PXA270微处理器GPIO驱动程序的编写方法
3、 掌握驱动程序的加载过程和方法
二、 实验环境(软件与硬件):
软件环境:VMwareWorkstation
硬件环境:pc机、arm机
三、 实验过程和结果(包括编写的程序与结果,结果要截图)
第1步:利用vi编辑器,;
(1)增加驱动所需的头文件和变量
#include<linux/>
#include<linux/>
#include<asm/>
#include<asm/>
#include<linux/>MODULE_LICENSE(〃GPL〃);
charLED_MODULE=0;
#defineDEVICE_NAME"xsb_seg"
#defineSEG_CS10x10300000
#defineSEG_CS20x10400000
staticcharLED[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6F};
unsignedlong*CSl_Address,*CS2_Address;
struetseg{
charLEDl_Val;
charLED2_Val;
charLED3_Val;
charLED4_Val;
charnegative;
};
同时更新所有七段数码光驱动管显示函数staticvoidUpdateled(struetseg*seg_7)
{
unsignedshortbuff=0x00;
buff二seg_7->LEDl_Val;buff=buff|(seg_7->LED2_Val<<8);
writew(buff,CSl_Address);
buff=0x00;
buff=seg_7->LED3_Val;buff=buff|(seg_7->LED4_Val<<8);
writew(buff,CS2_Address);return;
}
写具体某位七段数码光驱动管显示函数
voidvalue_seting(struetseg*seg_7,charposition,charvalue){
if(seg_7->negative==0)value=~value&~(0x1<<7);
elsevalue=(0x1<<7)|value;
if(position==l)seg_7->LEDl_Val二value;
elseif(position==2)seg_7->LED2_Val二value;
elseif(position==3)seg_7->LED3_Val二value;
elseif(position==4)seg_7->LED4_Val二value;
}
实现七段数码光驱动写操作函数
staticssize_tXSB_Seg_write(struetfile*file,constchar*buffer,size_tcount,loff_t*ppos)
{
inti;
struetseg*seg_7二file->private_data;
charled_forall[4];
printk(KERN_EMERG""TheModuleiswritten,XSB_Seg_write\n〃);if(count!=4)
{
printk(KERN_EMERG""thecountofinputisnot4!!");return0;
}
if(copy_from_user(led_forall,buffer,4))
{---
for(i=1;i<=4;i++)
{
value_seting(seg_7,i,LED[led_forall[iT]]);
}
Updateled(seg_7);
}
return0;
}
实现七段数码管驱动IOCTL操作函数
staticintXSB_Seg_ioctl(structinode*ip,structfile*fp,unsignedintcmd,unsignedlongarg)
{
charval=0x00;
structseg*seg_7=fp->private_data;
if(!a
嵌入式实验报告 IO口驱动实验 来自淘豆网m.daumloan.com转载请标明出处.