基于Web的MCF5249数据采集系统的设计
其中,Vi为ADC的输入电压;Vfullscate为满量程输入电压;
X为ADC输出的数字量;
n为ADC的位数。
A/D转换的结果在中断处理程序中读取。读取一次转换的程序代码如下:
Volatile u
nsigned shortint m;
m=*(volatile unsigned short int *)(MBAR2_ADDR+AD_VALUE);
通常,A/D转换需要连续采样。采样结果应存放在一个多访问循环队列MACQ(Multiple Access Circular Queue)中。
MACQ是一个定长有序的数据结构。源进程(生产者,ADC采样程序)将数据存入MACQ,一旦初始化,MACQ总是满的。当有新的数据被存入(PUT)MACQ,旧数据即被丢弃(如图3)。应用进程(消费者)可以从MACQ中读取任何数据。读功能是非破坏性的,即读操作不会改变MACQ。
在uClinux中,A/D转换中断程序的编写方法是将A/D转换器作为一个字符设备来处理。中断程序是在linux/drivers/char目录下编写,其结构如下:*File:m5249_adirq.c
#include<linux/interrupt.h>
#include<asm/irq.h>
#define ADC_IRQ(128+63)//定义中断号
#define MBAR2_ADDR 0x8000000
#define AD_CONFIG 0x402
#define AD_VALUE 0x406
/*定义中断处理函数*/
void adirq_interrupt(int irq,void *d,struct pt_regs *regs){
在此读取A/D转换的值并存入队列中。
}
/*设备初始化函数*/
int adirq_init(){
int result;
unsigned short adc_irq;
adc_irq=ADC_IRQ;
result=request_irq(adc_irq,&adirq_interrupt,SA_INTERRUPT,5249_adirq NULL);//注册中断
if(result= = -1)
{printk(“Can't get assigned %d”adc_irq);
return result;}
return 0;
}
中断服务程序的添加方法如下
《基于Web的MCF5249数据采集系统的设计(第2页)》