AMR linux S3c2440之ADC驅動實現

2021-09-30 09:47:16 字數 2174 閱讀 8717

====

硬體描述:

s3c2440有乙個10-bit的cmos adc 模數轉換器,支援8個模擬通道輸入,10位的解析度,最高速度可達500ksps(500 千次/每秒)。

從圖中可知:模擬adc,包含了2部分功能,一部分是觸屏功能,另一部分就是普通adc功能,分別可以產生int_tc和int_adc 兩個中斷。8個ain模擬輸入(a[3:0],ym,yp,xm,xp)通過乙個8路模擬開關mux進行通道片選。 adc模組共有20個暫存器。對於普通adc轉換,使用adccon 和 adcdat0即可完成控制。adccon用於控制設定,adcdat0儲存了轉換結果。

驅動程式adc_dev.ko:

#include #include #include #include #include #include #include #include #include #include #include #include #include #define device_name "adc_dev"

struct adc_dev ;

static struct adc_dev adc_dev;

static void __iomem *adc_reg_base;

static struct clk *adc_clk;

#define adccon (*(volatile unsigned long *)(adc_reg_base + s3c2410_adccon))

#define adcdat0 (*(volatile unsigned long *)(adc_reg_base + s3c2410_adcdat0))

#define start_adc(ch,pres) adccon = (0x01 | 0x01<<14 | ch<<3 | pres<<6)

static ssize_t adc_read(struct file *fp, char __user *buf, size_t count, loff_t *ppos)

static int adc_open(struct inode *in, struct file *fp)

static irqreturn_t adc_done_handler(int irq, void *dev_id)

static struct file_operations dev_fops = ;

static struct miscdevice misc = ;

static int __init dev_init(void)

clk_enable(adc_clk); //開啟adc 時鐘,系統開機時預設是關閉的

ret = request_irq(irq_adc,adc_done_handler,irqf_shared,device_name,&adc_dev); //分配中斷線

if (ret)

ret = misc_register(&misc); //註冊裝置

return ret;

}static void __exit dev_exit(void)

module_init(dev_init);

module_exit(dev_exit);

module_license("gpl");

module_author("itspy");

module_description("adc driver test");

應用程式adc_test:

#include #include #include #include #include int main(void)

printf("adc_test result:\n");

for (i= 0; i< 5; i++)

else

} close(fd);

return 0;

}

測試結果:

[root@wsn /]# ./adc_test 

adc_test result:

adc value = 740 (2.38 v) 

adc value = 744 (2.40 v) 

adc value = 744 (2.40 v) 

adc value = 744 (2.40 v)

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...

s3c2440系統時鐘

1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...

s3c2440儲存控制

nandflash和norflash都是flash的一種,都是散存,都是磁碟儲存介子,但是nandflash一般比較大,而norflash都比較小,並且norflash比較貴,並且norflash寫的速度比較慢,但讀的速度比較快 而nandflash讀的速度比較慢,寫的速度比較快。nor flash...