海王  

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/poll.h>
#include <asm/uaccess.h>
#include <asm-arm/arch-s3c2410/gpio.h>
#include <linux/device.h>

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/err.h>
#include <linux/clk.h>

#include <asm/system.h>
#include <asm/mach-types.h>

#include <asm/io.h>
#include <asm/arch/map.h>
#include <asm/plat-s3c/regs-timer.h>
#include <asm-arm/arch-s3c2410/regs-mem.h>
#include <asm/arch/regs-irq.h>
#include <asm/mach/time.h>

#include <asm/plat-s3c24xx/clock.h>
#include <asm/plat-s3c24xx/cpu.h>
#include <asm-arm/arch-s3c2410/irqs.h>
#include <asm/io.h>    //__raw_writel

#include "../hs_timer/hs_timer.h"
#include "../ct_def/ct_def.h"

MODULE_LICENSE("Dual BSD/GPL");
#define DEVICE_NAME          "hstimertst222"

struct hmi_test_dev
{
 struct cdev cdev;
};
struct hmi_test_dev dev;
static int hmi_timertest_major;
TIMERID test_timer;
TIMERID test_timer2;
TIMERID test_timer3;
TIMERID test_timer4;
TIMERID test_timer5;
TIMERID test_timer6;
TIMERID test_timer7;
/*
S3C2410_GPF0
S3C2410_GPF1
S3C2410_GPF2
S3C2410_GPF3
S3C2410_GPF4
S3C2410_GPF5
S3C2410_GPF6
S3C2410_GPG0
S3C2410_GPF0_INP
S3C2410_GPF1_INP
S3C2410_GPF2_INP
S3C2410_GPF3_INP
S3C2410_GPF4_INP
S3C2410_GPF5_INP
S3C2410_GPF6_INP
S3C2410_GPG0_INP

S3C2410_GPE4
S3C2410_GPE3
S3C2410_GPE2
S3C2410_GPE1
S3C2410_GPE0
S3C2410_GPB10
S3C2410_GPB7
S3C2410_GPB9
S3C2410_GPF7
S3C2410_GPB8
S3C2410_GPE4_OUTP
S3C2410_GPE3_OUTP
S3C2410_GPE2_OUTP
S3C2410_GPE1_OUTP
S3C2410_GPE0_OUTP
S3C2410_GPB10_OUTP
S3C2410_GPB7_OUTP
S3C2410_GPB9_OUTP
S3C2410_GPF7_OUTP
S3C2410_GPB8_OUTP
*/

//void init_kbd_queue(void)
//{
// local_irq_disable();
// currLoc = 0;
// currLen = 0;
// local_irq_enable();
//}
//s3c2410_gpio_cfgpin(S3C2410_GPF0, S3C2410_GPF0_OUTP);
//s3c2410_gpio_pullup(S3C2410_GPF0, 1);
//s3c2410_gpio_setpin(S3C2410_GPF0, 0);

void test_timer_hook(INT32U parm)
{
 static int i=0;
 if(i==0)
 {
  s3c2410_gpio_setpin(S3C2410_GPG8, 1);
  i = 1;
 }
 else
 {
  s3c2410_gpio_setpin(S3C2410_GPG8, 0);
  i =0;
 }
 Start_HS_timer_ignore_irqs (test_timer);
}

void test_timer_hook2(INT32U parm)
{
 static int i=0;
 if(i==0)
 {
  s3c2410_gpio_setpin(S3C2410_GPB1, 1);
  i = 1;
 }
 else
 {
  s3c2410_gpio_setpin(S3C2410_GPB1, 0);
  i =0;
 }
 udelay(10);
 Start_HS_timer_ignore_irqs (test_timer2);
}

void test_timer_hook3(INT32U parm)
{
 Start_HS_timer_ignore_irqs (test_timer3);
}


int using_flag = 0;
static int timertest_open (struct inode* inode, struct file* file)
{
 if (!try_module_get(THIS_MODULE))
        return -EBUSY;
 return SUCCESS;
}

static int  timertest_release (struct inode* inode, struct file* file)
{
 
 module_put(THIS_MODULE);
 return SUCCESS;
}

static const struct file_operations hmi_hstest_fops = {
 .owner = THIS_MODULE,
 .open = timertest_open,
 .release = timertest_release,
};

void hmi_hstimertst_setup_cdev(dev_t devno)
{
 int err;
 cdev_init(&dev.cdev, &hmi_hstest_fops);
 dev.cdev.owner = THIS_MODULE;
 dev.cdev.ops = &hmi_hstest_fops;
 err = cdev_add(&dev.cdev,devno,1);
 if(err)
  printk(KERN_NOTICE "Error %d adding hmi_buttons ",err);
}

struct class *timertest_class;
struct device* timertest_device;

static int __init timertest_init(void)
{
 int ret;
 dev_t devno;
 struct clk * clk_p;
 unsigned long pclk;

 unsigned long tcon;
// unsigned long tcnt;
 unsigned long tcfg1;
 unsigned long tcfg0;
 unsigned int register_buf;
  
 clk_p = clk_get(NULL, "pclk");
 pclk = clk_get_rate(clk_p);
 printk("pclk : %ld \n",pclk);

 tcon  = __raw_readl(S3C2410_TCON);
 tcfg1  = __raw_readl(S3C2410_TCFG1);
 tcfg0  = __raw_readl(S3C2410_TCFG0);
 printk("S3C2410_TCFG0 : %x  S3C2410_TCFG1 : %x  TCON: %x \n",tcfg0,tcfg1,tcon);
 register_buf=__raw_readl(S3C2410_INTMOD);
 printk("S3C2410_INTMOD : %x\n",register_buf);

 register_buf=__raw_readl(S3C2410_INTMSK);
printk("S3C2410_INTMSK : %x\n",register_buf);
 register_buf=__raw_readl(S3C2410_INTSUBMSK);
printk("S3C2410_INTSUBMSK : %x\n",register_buf);
 register_buf=__raw_readl(S3C2410_TCNTO(4) );
printk("S3C2410_TCNTO: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_TCNTB(4) );
printk(" S3C2410_TCNTB(4): %x\n",register_buf);


 register_buf=__raw_readl( S3C2410_BANKCON0);
printk(" S3C2410_BANKCON0: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON1 );
printk(" S3C2410_BANKCON1: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON2 );
printk(" S3C2410_BANKCON2: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON3);
printk(" S3C2410_BANKCON3: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON4 );
printk(" S3C2410_BANKCON4: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON5 );
printk(" S3C2410_BANKCON5: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON6 );
printk(" S3C2410_BANKCON6: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BANKCON7 );
printk(" S3C2410_BANKCON7: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_BWSCON);
printk(" S3C2410_BWSCON: %x\n",register_buf);
 register_buf=__raw_readl( S3C2410_REFRESH);
printk(" S3C2410_REFRESH: %x\n",register_buf);
 register_buf=__raw_readl(S3C2410_BANKSIZE);
printk(" S3C2410_BANKSIZE: %x\n",register_buf);
 register_buf = 0xb2;
 __raw_writel(register_buf,S3C2410_BANKSIZE);
 register_buf=__raw_readl( S3C2410_MRSRB6);
printk(" S3C2410_MRSRB6: %x\n",register_buf);
 register_buf=__raw_readl(S3C2410_MRSRB7);
printk(" S3C2410_MRSRB7: %x\n",register_buf);


 register_buf=__raw_readl(S3C2410_PRIORITY);
 printk("S3C2410_PRIORITY : %x\n",register_buf);
 //register_buf = 0x12807f;
 //__raw_writel(register_buf,S3C2410_PRIORITY);

 ret = alloc_chrdev_region(&devno,0,1,DEVICE_NAME); //申请设备号
 if(ret < 0)
 {
  return ret;
 }
 hmi_timertest_major = MAJOR(devno);
 hmi_hstimertst_setup_cdev(devno);

 timertest_class = class_create(THIS_MODULE, DEVICE_NAME);
   if(IS_ERR(timertest_class))
 {
  cdev_del(&dev.cdev); //删除cdev结构体和cdev设备
  unregister_chrdev_region(MKDEV(hmi_timertest_major,0),1);//释放设备号
     printk("Err: failed in creating class.\n");
     return -1;
   }
 timertest_device = device_create(timertest_class,NULL,devno,DEVICE_NAME);
 if (IS_ERR(timertest_device))
 {
  cdev_del(&dev.cdev); //删除cdev结构体和cdev设备
  unregister_chrdev_region(MKDEV(hmi_timertest_major,0),1);//释放设备号
  printk(KERN_ERR "buttons_add: device_create failed\n");
  return -1;
 }
//  test_timer = Register_HS_timer (1000, test_timer_hook, 0, 0);
 if (test_timer == NULL_TIMER_ID)
 {
  cdev_del(&dev.cdev); //删除cdev结构体和cdev设备
  unregister_chrdev_region(MKDEV(hmi_timertest_major,0),1);//释放设备号
  return -1;
 }
//  test_timer2 = Register_HS_timer (10000, test_timer_hook2, 0, 0);
 if (test_timer2 == NULL_TIMER_ID)
 {
  printk("test_timer2 err !!");
  return -1;
 }
//  test_timer3 = Register_HS_timer (10000, test_timer_hook3, 0, 0);
 if (test_timer3 == NULL_TIMER_ID)
 {
  printk("test_timer3 err !!");
  return -1;
 }
//test_timer4 = Register_HS_timer (10000, test_timer_hook3, 0, 0);
//test_timer5 = Register_HS_timer (10000, test_timer_hook3, 0, 0);
//test_timer6 = Register_HS_timer (10000, test_timer_hook3, 0, 0);
//test_timer7 = Register_HS_timer (10000, test_timer_hook3, 0, 0);
//SetTicks_HS_timer (test_timer4, 1000);
//SetTicks_HS_timer (test_timer5, 100);
//SetTicks_HS_timer (test_timer6,150);
//SetTicks_HS_timer (test_timer7, 300);
 s3c2410_gpio_cfgpin(S3C2410_GPG8, S3C2410_GPG8_OUTP);
 s3c2410_gpio_pullup(S3C2410_GPG8, 1);
 s3c2410_gpio_setpin(S3C2410_GPG8, 0);
  s3c2410_gpio_cfgpin(S3C2410_GPB1, S3C2410_GPB1_OUTP);
 s3c2410_gpio_pullup(S3C2410_GPB1, 1);
 s3c2410_gpio_setpin(S3C2410_GPB1, 0);
// SetTicks_HS_timer (test_timer, 100/* 1000000 /187500*/);
// Start_HS_timer (test_timer);
// SetTicks_HS_timer (test_timer2, 50 * 1000000 /187500);
// Start_HS_timer (test_timer2);
// SetTicks_HS_timer (test_timer3, 10* 1000000 /187500);
// Start_HS_timer (test_timer3);

//Start_HS_timer (test_timer4);
//Start_HS_timer (test_timer5);
//Start_HS_timer (test_timer6);
//Start_HS_timer (test_timer7);
 return 0;
}

static void __exit timertest_exit(void)
{
 device_destroy(timertest_class, MKDEV(hmi_timertest_major, 0));
   class_destroy(timertest_class);
// UnRegister_HS_timer(test_timer);
// UnRegister_HS_timer(test_timer3);
// UnRegister_HS_timer(test_timer2);
 cdev_del(&dev.cdev); //删除cdev结构体和cdev设备
 unregister_chrdev_region(MKDEV(hmi_timertest_major,0),1);//释放设备号
}

module_init(timertest_init);
module_exit(timertest_exit);

 

posted on 2010-08-13 10:39  海王  阅读(1939)  评论(0编辑  收藏  举报