然后再对SAR寄放器的次高位置“1”,依上述方式进行D/A转换和比较。
如此重复上述进程,直至确信SAR寄放器的最低位为止。
进程终止后,状态线改变状态,说明已完成一次转换。
最后,逐次逼近寄放器SAR中的内容确实是与输入模拟量V相对应的二进制数字量。
显然A/D转换器的位数N决定于SAR的位数和D/A的位数。
图(b)表示四位A/D转换器的逐次逼近进程。
转换结果可否准确逼近模拟信号,要紧取决于SAR和D/A的位数。
位数越多,越能准确逼近模拟量,但转换所需的时刻也越长。
逐次逼近式的A/D转换器的要紧特点是:
转换速度较快,在1—100/µs之内,分辨率能够达18位,专门适用于工业操纵系统。
转换时刻固定,不随输入信号的转变而转变。
抗干扰能力相对积分型的差。
例如,对模拟输入信号采样进程中,假设在采样时刻有一个干扰脉冲迭加在模拟信号上,那么采样时,包括干扰信号在内,都被采样和转换为数字量,这就会造成较大的误差,因此有必要采取适当的滤波方法。
实现程序的要紧函数
要紧驱动函数如下:
第四章vivi、Linux内核、cramfs文件系统的烧写
vivi的烧写
①把并口线插到pc机的并口,并把并口与JTAG相连,JTAG与开发板
的14针JTAT口相连,打开2410-S.
②把整个GIVEIO目录(在\\img\flashvivi目录下)拷
贝到C:
\WINDOWS下,并把该目录下的文件拷贝到
c:
/windows/system32/drivers下。
③在操纵面板里,选添加硬件>下一步>选-是我已经连接了此硬件
>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选
择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-阅读,指定
驱动为C:
\WINDOWS\GIVEIO\文件,点击确信,安装好驱动
④在d盘新建一目录bootloader,把sjf2410-s(在\\img
\flashvivi目录下)和要烧写的vivi拷贝到该目录下,在程序-附件-
msdos下,进入该目录,运行sjf2410-s命令如下:
sjf2410-s/f:
vivi
在尔后显现的三次要求输入参数,第一次是让选择Flash,选0;第二次
是选择jtag对flash的两种功能,也选0;第三次是让选择起始地址,选
0尔后就等待大约3-5分钟的烧写时刻,当vivi烧写完毕后选择参数2,
退出烧写。
Linux内核的烧写
复位2410-s,进入vivi。
vivi>loadflashkernelx回车
当显现Readyfordownloadingusingxmodem...如图
点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择好镜像文件zImage,Enter,协议为Xmodem,点击“发送”,4分钟左右zImage烧写完毕;
烧写cramfs文件系统
vivi>loadflashrootx回车
当显现Readyfordownloadingusingxmodem...如图
点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择好镜像文件,协议为Xmodem,点击“发送",7分钟左右烧写完毕。
第五章交叉编译
Makefile文件编写
Makefile文件源代码如下:
TOPDIR=../
include$(TOPDIR)
EXTRA_LIBS+=-lpthread
EXEC=$(INSTALL_DIR)/ad./ad
OBJS=
all:
$(EXEC)
$(EXEC):
$(OBJS)
$(CC)$(LDFLAGS)-o$@$(OBJS)$(EXTRA_LIBS)
install:
$(EXP_INSTALL)$(EXEC)$(INSTALL_DIR)
clean:
rm-f*.oad*.gdb
交叉编译的进程
①进入/arm2410s/exp/basic/04_ad目录,利用vi编辑器或其他编辑器阅读明白得源代码。
②运行make生成ad可执行文件
第六章程序源代码设计与调试
程序源代码设计
/********************************************************/
/**/
/*SamsungS3C44B0*/
/*tpu>*/
/**/
/********************************************************/
#ifndef__ASM_ARCH_HARDWARE_H
#define__ASM_ARCH_HARDWARE_H
#defineREGBASE0x01c00000
#defineREGL(addr)(*(volatileunsignedint*)(REGBASE+addr))
#defineREGW(addr)(*(volatileunsignedshort*)(REGBASE+addr))
#defineREGB(addr)(*(volatileunsignedchar*)(REGBASE+addr))
/*****************************/
/*CPUWrapperRegisters*/
/*****************************/
#defineSYSCFGREGL(0x000000)
#defineNCACHBE0REGL(0x000004)
#defineNCACHBE1REGL(0x000008)
#defineSBUSCONREGL(0x040000)
/************************************/
/*MemoryControllerRegisters*/
/************************************/
#defineBWSCONREGL(0x080000)
#defineBANKCON0REGL(0x080004)
#defineBANKCON1REGL(0x080008)
#defineBANKCON2REGL(0x08000c)
#defineBANKCON3REGL(0x080010)
#defineBANKCON4REGL(0x080014)
#defineBANKCON5REGL(0x080018)
#defineBANKCON6REGL(0x08001c)
#defineBANKCON7REGL(0x080020)
#defineREFRESHREGL(0x080024)
#defineBANKSIZEREGL(0x080028)
#defineMRSRB6REGL(0x08002c)
#defineMRSRB7REGL(0x080030)
/*********************/
/*UARTRegisters*/
/*********************/
#defineULCON0REGL(0x100000)
#defineULCON1REGL(0x104000)
#defineUCON0REGL(0x100004)
#defineUCON1REGL(0x104004)
#defineUFCON0REGL(0x100008)
#defineUFCON1REGL(0x104008)
#defineUMCON0REGL(0x10000c)
#defineUMCON1REGL(0x10400c)
#defineUTRSTAT0REGL(0x100010)
#defineUTRSTAT1REGL(0x104010)
#defineUERSTAT0REGL(0x100014)
#defineUERSTAT1REGL(0x104014)
#defineUFSTAT0REGL(0x100018)
#defineUFSTAT1REGL(0x104018)
#defineUMSTAT0REGL(0x10001c)
#defineUMSTAT1REGL(0x10401c)
#defineUTXH0REGB(0x100020)
#defineUTXH1REGB(0x104020)
#defineURXH0REGB(0x100024)
#defineURXH1REGB(0x104024)
#defineUBRDIV0REGL(0x100028)
#defineUBRDIV1REGL(0x104028)
/*******************/
/*SIORegisters*/
/*******************/
#defineSIOCONREGL(0x114000)
#defineSIODATREGL(0x114004)
#defineSBRDRREGL(0x114008)
#defineITVCNTREGL(0x11400c)
#defineDCNTZREGL(0x114010)
/********************/
/*IISRegisters*/
/********************/
#defineIISCONREGL(0x118000)
#defineIISMODREGL(0x118004)
#defineIISPSRREGL(0x118008)
#defineIISFIFCONREGL(0x11800c)
#defineIISFIFREGW(0x118010)
/**************************/
/*I/OPortsRegisters*/
/**************************/
#definePCONAREGL(0x120000)
#definePDATAREGL(0x120004)
#definePCONBREGL(0x120008)
#definePDATBREGL(0x12000c)
#definePCONCREGL(0x120010)
#definePDATCREGL(0x120014)
#definePUPCREGL(0x120018)
#definePCONDREGL(0x12001c)
#definePDATDREGL(0x120020)
#definePUPDREGL(0x120024)
#definePCONEREGL(0x120028)
#definePDATEREGL(0x12002c)
#definePUPEREGL(0x120030)
#definePCONFREGL(0x120034)
#definePDATFREGL(0x120038)
#definePUPFREGL(0x12003c)
#definePCONGREGL(0x120040)
#definePDATGREGL(0x120044)
#definePUPGREGL(0x120048)
#defineSPUCRREGL(0x12004c)
#defineEXTINTREGL(0x120050)
#defineEXTINPNDREGL(0x120054)
/*********************************/
/*WatchDogTimersRegisters*/
/*********************************/
#defineWTCONREGL(0x130000)
#defineWTDATREGL(0x130004)
#defineWTCNTREGL(0x130008)
/*********************************/
/*A/DConverterRegisters*/
/*********************************/
#defineADCCONREGL(0x140000)
#defineADCPSRREGL(0x140004)
#defineADCDATREGL(0x140008)
/***************************/
/*PWMTimerRegisters*/
/***************************/
#defineTCFG0REGL(0x150000)
#defineTCFG1REGL(0x150004)
#defineTCONREGL(0x150008)
#defineTCNTB0REGL(0x15000c)
#defineTCMPB0REGL(0x150010)
#defineTCNTO0REGL(0x150014)
#defineTCNTB1REGL(0x150018)
#defineTCMPB1REGL(0x15001c)
#defineTCNTO1REGL(0x150020)
#defineTCNTB2REGL(0x150024)
#defineTCMPB2REGL(0x150028)
#defineTCNTO2REGL(0x15002c)
#defineTCNTB3REGL(0x150030)
#defineTCMPB3REGL(0x150034)
#defineTCNTO3REGL(0x150038)
#defineTCNTB4REGL(0x15003c)
#defineTCMPB4REGL(0x150040)
#defineTCNTO4REGL(0x150044)
#defineTCNTB5REGL(0x150048)
#defineTCNTO5REGL(0x15004c)
/*********************/
/*IICRegisters*/
/*********************/
#defineIICCONREGL(0x160000)
#defineIICSTATREGL(0x160004)
#defineIICADDREGL(0x160008)
#defineIIC