文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>向TX2440添加锋鸣器驱动

向TX2440添加锋鸣器驱动

时间:2010-11-16  来源:1987hanen

1。把驱动编译成模块    考备TX2440-beep.c放到drivers/char目录下,修改Kconfig文件,加入        config TX2440_BEEP           tristate "TX2440 BEEP Driver"            depends on ARCH_S3C2440            help              this is BEEP Driver for TX2440 development boards  修改Makefile文件加入  obj-$(CONFIG_TX2440_BEEP)     +=TX2440_beep.o 配置内核,支持驱动模块   Device Drivers  -->        Character devices -->         [M] TX2440 BEEP Driver 执行#make M=driver/char/ modules 编译完后,会在目录drivers/char下生成TX2440_Beep.ko文件,将其自制到根文件系统下lib/modules/2/6/31目录下 2,向内核中添加驱动,   #insmod lib/modules/2.6.31/TX2440_beep.ko   #rmmod TX2440_beep TX2440_beep.c /*************************************
PWM的驱动,在TX2440A上做测试
linux内核:2.6.31  
*************************************/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <linux/mm.h>
#include <asm/irq.h>
#include <plat/regs-timer.h>
#include <mach/regs-gpio.h>
#include <mach/map.h>
#include <mach/regs-irq.h>
#include <asm/io.h>
#include <mach/hardware.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#define DEVICE_NAME "TX2440-Beep"
static int BEEP_MAJOR=0;  /* 主设备号 */
static int TX2440_beep_ioctl(
 struct inode *inode,
 struct file *file,
 unsigned int cmd,
 unsigned long arg)
{
 unsigned long temp;
 if(cmd <= 0)
 {
  temp = __raw_readl(S3C2410_GPBCON); //GPBCON
  temp &= ~3;
  temp |= 1;
  __raw_writel(temp, S3C2410_GPBCON);
  temp = __raw_readl(S3C2410_GPBDAT); //GPBDAT
  temp &= ~1;
  __raw_writel(temp, S3C2410_GPBDAT);
 }
 else
 {
  temp = __raw_readl(S3C2410_GPBCON); //GPBCON
  temp &= ~3;
  temp |= 2;
  __raw_writel(temp, S3C2410_GPBCON);
  temp = __raw_readl(S3C2410_TCFG0); //TCFG0
  temp &= ~0xff;
  temp |= 15;
  __raw_writel(temp, S3C2410_TCFG0);
  temp = __raw_readl(S3C2410_TCFG1); //TCFG1
  temp &= ~0xf;
  temp |= 2;
  __raw_writel(temp, S3C2410_TCFG1);
  temp = (50000000/128)/cmd;
  __raw_writel(temp, S3C2410_TCNTB(0));
  temp >>= 1;
  __raw_writel(temp, S3C2410_TCMPB(0));
  temp = __raw_readl(S3C2410_TCON); //TCON
  temp &= ~0x1f;
  temp |= 0xb;
  __raw_writel(temp, S3C2410_TCON);
  temp &= ~2;
  __raw_writel(temp, S3C2410_TCON); 
 }
 return 0;
}
static struct file_operations TX2440_beep_fops = {
 .owner = THIS_MODULE,
 .ioctl = TX2440_beep_ioctl,
};
static struct class *beep_class; static int __init TX2440_beep_init(void)
{
 printk("TX2440 BEEP DRIVER MODULE INIT\n");
 BEEP_MAJOR = register_chrdev(0, DEVICE_NAME, &TX2440_beep_fops);
 if (BEEP_MAJOR < 0) {
   printk(DEVICE_NAME " can't register major number\n");
   return BEEP_MAJOR;
 }
 printk("register TX2440-Beep Driver OK! Major = %d\n", BEEP_MAJOR);
 beep_class = class_create(THIS_MODULE, DEVICE_NAME);
 if(IS_ERR(beep_class))
 {
  printk("Err: failed in TX2440-Beep class. \n");
  return -1;
 }
 device_create(beep_class, NULL, MKDEV(BEEP_MAJOR, 0), NULL, DEVICE_NAME);  printk(DEVICE_NAME " initialized\n");
 return 0;
} static void __exit TX2440_beep_exit(void)
{
 unregister_chrdev(BEEP_MAJOR, DEVICE_NAME);
 device_destroy(beep_class, MKDEV(BEEP_MAJOR, 0));
 class_destroy(beep_class);      
}
module_init(TX2440_beep_init);
module_exit(TX2440_beep_exit);

MODULE_AUTHOR("laohan");  
MODULE_DESCRIPTION("TX2440 Beep Driver"); 
MODULE_LICENSE("GPL"); 
编写测试程序beep.c  /*************************************
PWM驱动测试程序,在TX2440A开发板做测试
驱动用法:
  设备名称:TX2440-Beep
  测试程序名称:beep
  参数为蜂鸣器的频率
*************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
 int fd;
 unsigned long temp =0;
 int i;
 fd = open("/dev/TX2440-Beep", O_RDWR);
 if (fd < 0)
 {
  perror("open device TX2440-BEEP");
  exit(1);
 }
 printf("Please enter the times number (0 is stop) :\n");
 while(1)
 {
  scanf("%d",&temp);
  printf("times = %d \n",temp);
  ioctl(fd, temp, 4);
  if(temp == 0)
  {
   printf("Stop Control Beep!\n");
   break;
  }
 }
 close(fd);
 return 0;
}
arm-linux-gcc beep.c -o beep
把程序下载到开发板上,加上权限chmod 777 beep ./beep
 
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载