第一篇:关于接口测试的总结
关于接口测试的总结
1.接口测试:是测试系统组件间接口的一种测试。主要用于检测外部系统于系统之间以及系统内部各个子系统之间的交互点。重点测试的时数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等等,这要求对业务逻辑有一定程度上的理解,对数据流向有较好的定位。
2.接口测试的分类: a)b)c)系统与系统之间的调用(如分享时,微信会提供接口给“跑向珠峰”); 上层服务对下层服务的调用
服务之间的调用(如添加一条数据时,会先调用数据查询的服务,查询改数据是否是重复数据);
不同类型的接口测试方法可能不一致,但总体来说,不管是哪种类型,被测接口即为服务方,测试手段为客户方,接口测试的目的就是:通过我们的测试手段,去验证满足其声明提供的功能。
3.接口测试的原理:通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一过程(request→response)
4.接口测试的流程:类似于功能测试,需求讨论→评审需求→确定需求→产出接口定义→根据需求文档及接口定义设计测试用例(测试用例主要从业务场景,功能以及异常测试几个方面考虑)→评审用例→执行测试
5.接口测试的价值:降低成本,提高效率。接口测试能够提供系统复杂度上升情况下的低成本高效率的解决方案。它是一个完整的体系,还包括功能测试,性能测试等。
6.接口测试的适用范围:一般用于多个系统间的交互开发,或者拥有多个子系统的应用系统开发的测试。接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统。主要测试这些对外部提供的接口的正确性和稳定性。它也同样适用于上层系统中服务层接口,测试难度随层级而上升。即越往上难度越大。
7.需求的频繁变化,做接口测试的测试人员应该如何应对:个人觉得此在于团队开发的流程,团队之间的沟通和测试人员的警觉性。、在开发阶段,需求的变更是一件极为频繁和正常的事情,对于此点团队中的任何一人都应该以正确的心态来面对。团队需要规范的开发流程,良好的沟通方式,测试人员更需要及时跟进软件进度,和开发人员并进齐行。同时,测试与开发需要相对独立的工作环境,总结而言为之知己知彼,亦敌亦友。
8.关于如何简单设计接口测试的设计用例 a)明确出发点——测试的目的是为了让找出软件的缺口,修复并使之更加完善。在这一基础点上,接口测试也不例外。以找出软件的误漏为出发点,测试用例需紧贴此线,更容易找出问题所在。b)明确测试点——选择好的测试对象。系统内部层次繁复复杂,任何一个接口的变动都将导致用例失效。(可将这些最外层的接口根据数据的流向分为进入和流出两类,进入系统的接口实际上是我们用例的执行调用的接口。可通过参数对这些接口进行调用,模拟外部的使用;而流出的接口则是我们用例真正该验证的点。数据从哪里流出,流出的状态如何,此时系统的状态都是作为测试目的所要着重关注的部分)c)确认完整的测试对象的功能——确认外部接口提供给使用这些接口的外部用户什么样的功能,外部用户真正需要的时什么样的功能予以区别。用例的设计要严格按照测试对象功能设计才是正确的用例。
9.设计(接口)测试用例有哪些要求:结构好,可读性高,渗透性强。
10.(接口)测试用例包括的内容:功能点,测试环境,测试数据,执行操作以及预期结果。如下: a)接口测试测试的功能点:如果一个接口功能过于复杂时,可以对接口用例进行结构划分(如根据层次,平台,功能点等等),这样用例具有更好的可读性(接口划分原则为:以接口提供的功能点的不同进行合适粒度的划分,同一功能点的用例又可根据测试环境的不同,数据的不同进行用例的填充)b)c)接口测试用例的环境:程序内部环境和程序所调用的外部接口的环境。
关于接口测试测试数据:分为两部分:接口参数数据和用例执行所需系统数据。数据的设计、准备测试用例的数据不可马虎。通过好的测试数据查找问题,能极大的提高工作效率。接口参数数据需要对每个参数根据测试接口的实际功能进行分析,在符合业务逻辑的情况下进行逻辑组合排列,不要遗漏某些边界值和错误点的数据,这样用例更容易发现问题。d)e)执行操作:即对所测接口的调用。
预期结果:根据需求进行验证,是衡量软件是否达到预期的标准。应该着重细致,每个用例均需验证,应该避免一个用例重复做相同的验证,提高测试用例的效率。
11.具体测试用例的参考点: a)输入参数测试:针对输入参数进行的测试,也可以说是假定接口参数的不正确性进行的测试,确保接口对任意类型的输入都做了相应的处理:输入参数合法(不合法),输入参数为空,为null,输入参数超长等等; b)功能测试“接口是否满足了所提供的功能,相当于正常情况测试,如果一个接口功能复杂时推荐对接口用例进行结构划分,这样子用例觉有更好的可读性和可维护性; c)逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试的界限并不是那么清楚,所以我们也可以从给出的设计文档中考虑内部逻辑错误的分之情况和异常; d)异常情况测试:接口实现是否对清楚情况都进行了处理,接口输入参数虽然合法,但是在接口实现中,也会出现异常,因为内部的异常不一定是输入的数据造成的,而有可能是其他逻辑造成的,程序需要对任何异常都进行处理。
题外
关于单元测试,接口测试和白盒测试
a)单元测试:针对具体代码逻辑进行测试,主要测试被测代码的一个很小,很明确的功能是否正确。即单元模块的逻辑是否正确,对业务关注不大;
b)接口测试:针对程序内部的或者外部的接口进行的测试一个接口方法可能包含多个单元模块,并且,一个接口会有自己特定的业务定义:做接口测试更多的从业务的角度去考虑如何测试;
c)白盒测试:单元测试和接口测试都属于白盒测试的一个阶段
第二篇:医保接口测试文档
杭州创业软件集团
2013-5-1 徐
医
附
属
医
院
医保接口测试文档
编辑:沈国强
日期:2003-12-24
住院系统
1、运行住院系统,并登录住院系统
用于测试医保初始化是否通过,主要包括以下几项: 1)、检测系统参数设置是否已经设置; 2)、检测本机是否使用医保功能 3)、检测本机是否需记录医保错误日志 4)、连接医保数据库
5)、自动更新医保在院病人基本信息
2、退出住院系统
用于测试医保退出时,是否正常释放使用资源。
3、医保入院登记处理,具体包括以下功能
1)、医保性质选择,此时正常情况下应该自动打开医保读卡窗体(如图3-1),等待用户进行读卡操作;
杭州创业软件集团
2013-5-1
图3-1 2)、性质选择完成后,输入相关住院信息后,进行“保存”操作,此时将检测如果为医保病人,则将自动打开“费用控制”窗体(如图3-2),当有预交款时,在“预交款总额”一栏中,将自动输入且不能修改,“虚拟帐户总额”一般根据医院自行设定,可输入0,“锁定判别”用于将当前病人锁定或未锁定,锁定时,将不能记费,只能退费。当按“取消”时,将不对病人进行费用控制处理。
图3-2 3)、说明:在读卡过程中,不要将医保卡提早抽出,请在处理完成后再抽出。
4、对病人进行交预交款处理
在对医保病人进行交款处理数据保存时,将自动处理欠费功能,如果病人交款后,仍处于欠费状态,则系统将自动将病人锁定。
5、对病人进行退款处理
在对医保病人进行退款处理时,将自动处理欠费功能,如果病人退款后,处于欠费状态,则系统将自动将病人锁定。
6、对病人进行费用记帐
在费用记帐时,系统将对医保病人进行欠费检测,如果已经欠费,则不允许将费用记入;如果未欠费,但此项费用已经大于可用额度即自负金额加上本项目费用金额已经超过预交款与虚拟帐户的合计时,此项费用也不允许记入;只有当可用额度大于费用额时,方可记费;同时,对于医保病人进行费用与药品使用限制控制,即当费用或药品存在于“护理费、治疗费、器械费、另加器械费、消毒费、材料费、备皮材料费、静脉输液 杭州创业软件集团
2013-5-1
7、进行出院结算处理
在出院结算选择后,系统将自动打开医保读卡窗体,要求读卡操作,并进行病人基本信息的更新;在“结算”时,系统将自动打开医保结算窗体,同时进行医保分段计算处理,显示计算结果(如图7-1),按“确定”后进行正式结算并打印住院发票,医保病人发票可选择打印,即在系统参数中进行选择,即使用新发票或是旧发票打印,此功能只针对医保病人。旧发票打印程序需修改,由于没有实际项目,无法设定数据,需修改。
新发票打印程序使用DataWindow套打,位置基本正确,其中有两项数据未知,需确定,并修改程序。
图7-1
8、发票作废处理
在发票作废病人选择后,需进行读卡操作,并自动更新病人信息,“作废”时,将HIS端医保结算相关表置作废日期;并处理医保功能,使当前病人卡处于在院状态。
9、病人入院注销
在病人未发生费用与交款时,可作入院注销处理,“注销”操作时需进行读卡操作。
10、病人性质转换
病人可从非医保性质转换为医保性质,或从医保性质转换到非医保性质。
第三篇:Java接口抽象类继承总结
继承
作用:子类通过继承可以复用父类中的成员变量和方法 使用要求: 语法 class 类名
extends 父类名
子类最多只能继承一个父类。特点:
* 1.继承可依次进行,层次越低功能越强
* 2.java所有类都是object类的子类
* 3.开发时多使用jdk帮助文档 抽象类
作用:当父类的一些方法不能确定时,可以用abstract来修饰该类 使用要求:
* 1.抽象类不能被实例化
* 2.抽象类可以没有abstract方法,但一旦包含了abstract方法则该类必须
声明为abstract * 3.抽象方法不能有主体(即没有大括号)
abstract void cry();特点:当一个类继承的父类是抽象的,需要我们把抽象类中的所有方法全部实现 接口
作用:接口的最主要的作用是达到统一访问,接口就是给出一些没有内容的方法。封装到一起,到某个要使用的时候再根据具体情况把这些方法写出来 语法:
class 类名
implements 接口
{
方法;
变量;
} 特点:
1.接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。
2.接口体现了程序设计的多态和高内聚低偶合的设计思想 使用要求: 1.一个类可以实现多个接口
2.接口中可以有变量(常量)
a.接口中的变量本质上都是static而且是final(用final修饰类、方法、变量时类、方法、变量不能被继承、覆盖、修改)
b.在java开发中,经常把常用的变量,定义在接口中作为全局变量使用
访问形式:接口名.变量名 3.接口不能继承其他的类,但是可以继承其他的接口
4.当一个类实现了一个接口,就要求该类把接口的所有方法统统实现 接口定义共有规范,而且定义的是强制性规范,继承是扩展原有规范。
一般设计中,接口定义特性,抽象类做共有基本特性实现,子类做独有特性的扩展。
第四篇:DM8148 McASP接口调试总结
DM8148 McASP接口调试总结
基础知识:
I2S协议——(Inter-IC Sound或Intergrated Interchip Sound)是飞利浦公司设计的一种用于IC间传输数字音频信号的接口标准。标准的I2S协议由3条线构成:帧时钟、位时钟和数据线。帧时钟用于切换左右声道的数据。位时钟对应每一位数据。有时为了使系统间能够更好的同步还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟。
图1 I2S协议时序
I2S采样率、采样位数和时钟的关系:
位时钟(串行时钟)= 2*采样频率*采样位数 帧时钟 = 采样频率
主时钟 = 采样频率的256倍或384倍(依据codec的配置)
McASP接口——复通道音频接入接口,是TI公司的DSP的一种接入接口,是一种通用的音频接入接口。采用的是时分复用的数据流形式。Mcasp使用I2S协议,也支持DIT协议。mcasp包括发射和接收两部分,他们可以使用不同时钟,不同的传输模式,工作完全独立。发射和接收也能够工作在同步状态。mcasp的管脚都可以配置为通用I/O。
图2 mcasp引脚介绍
DM8148共有6个Mcasp接口,其中mcasp0、1既有接收口(ACLKR、AFSR)也有发送口(ACLKX、AFSX),且可以设置为不同时钟,即接收时钟可以与发送时钟同步,也可以选择异步。而Mcasp2、3、4、5只有发送口(ACLKX、AFSX),因此接收时钟必须与发送时钟同步。
硬件连接: 方式一:
ACLKX——连接I2S的位时钟输入/输出 AFSX——连接I2S的帧时钟输入/输出 AXR——连接I2S的数据输入/输出
方式二:
ACLKR——连接I2S的位时钟输入/输出 AFSR——连接I2S的帧时钟输入/输出 AXR——连接I2S的数据输入/输出
两种情况由于连接方式不同,在McASP时钟配置时也有区别。在TI的DVRRDK_04.00.00.03提供的内核中默认采用的是方式一(DM8148只有mcasp0和mcasp1同时具有发送口与接收口,mcasp2、3、4、5都只有发送口,因此所有mcasp口均可如此连接),时钟设置为了同步模式,不需要再改动。当选择方式二时(DM8148只有mcasp0和mcasp1可以这样连接),需要修改sound/soc/davinci/davinci-mcasp.c,将时钟设置为异步模式。本设备中sii9135连接采用了方式一(mcasp0),tlv320aic3106与tvp5158采用了方式二(mcasp4)。static void davinci_hw_param(struct davinci_audio_dev *dev, int stream, char *name){ ……
if(!strcmp(name, “SII9135AUDIO”))//+14-10-15
mcasp_set_bits(dev->base + DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);//设置时钟为异步
else
mcasp_clr_bits(dev->base + DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);//设置时钟为同步
…… }
图3接收与发送时钟配置 mcasp配置:
以tvp5158(连接至mcasp4)为例:
在archarmmach-omap2devices.c中添加mcasp资源: static struct resource ti81xx_mcasp4_resource[] = { {
.name = “mcasp”,.start = TI81XX_ASP4_BASE,.end = TI81XX_ASP4_BASE +(SZ_1K * 12)-1,.flags = IORESOURCE_MEM, }, /* TX event */ {
.start = TI81XX_DMA_MCASP4_AXEVT,.end = TI81XX_DMA_MCASP4_AXEVT,.flags = IORESOURCE_DMA, }, /* RX event */ {
.start = TI81XX_DMA_MCASP4_AREVT,.end = TI81XX_DMA_MCASP4_AREVT,.flags = IORESOURCE_DMA, }, };以上结构体添加了mcasp4的基地址以及EDMA通道,这些值如果没有定义,需要在archarmplat-omapincludeplatasp.h中添加,查阅数据手册。此外还要修改EDMA配置,否者会出现错误信息:
davinci_pcm: Failed to get dma channels asoc: can't open platform davinci-pcm-audio arecord: main:666: audio open error: Device or resource busy 修改如下:
static const s16 ti814x_dma_rsv_chans[][2] = { /*(offset, number)*/ {0, 2}, {14, 2}, {26, 6}, {48, 4}, {56, 6},// change {56,8} to {56,6} on 14-08-29 {-1,-1} };static const s16 ti814x_dma_rsv_slots[][2] = { /*(offset, number)*/ {0, 2}, {14, 2}, {26, 6}, {48, 4}, {56, 6},//change {56,8} to {56,6} on 14-08-29 {64, 127},{248, 264}, {-1,-1} };
同样在archarmmach-omap2devices.c中需要添加: static struct platform_device tvp5158_audio_device = {.name = “tvp5158-audio”,.id =-1, };
static u8 tvp5158_iis_serializer_direction[] = { RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, };tvp5158_iis_serializer_direction里的元素对应着mcasp接口的每个数据接收发送端口AXR的工作模式:RX_MODE(接收), TX_MODE(发送)和INACTIVE_MODE(无效)。本数组表示AXR [0]工作在接收模式,AXR [1]—AXR [15]不工作。static struct snd_platform_data tvp5158_snd_data = {.tx_dma_offset = 0x4A1AB000,.rx_dma_offset = 0x4A1AB000,.asp_chan_q = EVENTQ_0,.tdm_slots = 2, /* number of channels.I2S模式时必须设置为2*/.op_mode = DAVINCI_MCASP_IIS_MODE,.num_serializer = ARRAY_SIZE(tvp5158_iis_serializer_direction),.serial_dir = tvp5158_iis_serializer_direction,.version = MCASP_VERSION_2,.txnumevt = 32,.rxnumevt = 32, };
static struct platform_device ti81xx_mcasp_tvp5158_device = {.name = “davinci-mcasp”, /* driver name */.id = 4,//mcasp端口号
.dev = {
.platform_data = &tvp5158_snd_data,},.num_resources = ARRAY_SIZE(ti81xx_mcasp4_resource),.resource = ti81xx_mcasp4_resource, };
void __init ti81xx_register_mcasp(void)//注册mcasp { ……
#ifdefCONFIG_SND_SOC_TVP5158_AUDIO
printk(KERN_DEBUG “n**** Registering TVP5158 & MCASP4n”);
platform_device_register(&tvp5158_audio_device);
platform_device_register(&ti81xx_mcasp_tvp5158_device);#endif
#ifdef CONFIG_SND_SOC_SII9135_AUDIO
printk(KERN_DEBUG “n**** Registering SiI9135 & MCASP0n”);
platform_device_register(&sii9135_audio_device);
platform_device_register(&ti81xx_mcasp_sii9135_device);#endif }
在soundsocdavinciti81xx-evm.c中:snd_soc_dai_link结构体连接起codec驱动与平台驱动,内核根据名字建立连接,要保证codec_name和codec驱动中的platform_driver中的名字相同;codec_dai_name和codec驱动中的snd_soc_dai_driver中的名字相同。此结构体中成员的顺序决定了ALSA 声卡的设备序号,本程序中: staticstruct snd_soc_dai_link ti81xx_mcasp_dai[] = { {
.name = “TVP5158AUDIO”,.stream_name = “TVP-PCM”,.cpu_dai_name= “davinci-mcasp.4”,.codec_dai_name = “tvp5158-hifi”,.platform_name =“davinci-pcm-audio”,.codec_name = “tvp5158-audio”,.ops = &ti81xx_evm_ops, }, {
.name = “TLV320AIC3X”,.stream_name = “AIC3X”, #if defined(CONFIG_MACH_TI810XEVM)|| defined(CONFIG_MACH_TI810XDVR)|| defined(CONFIG_MACH_UD8107_DVR)
.cpu_dai_name= “davinci-mcasp.1”, #else
.cpu_dai_name= “davinci-mcasp.2”, #endif
.codec_dai_name = “tlv320aic3x-hifi”,.codec_name = “tlv320aic3x-codec.1-0018”,.platform_name = “davinci-pcm-audio”,.init = ti81xx_evm_aic3x_init,};.ops = &ti81xx_evm_ops, }, /*+ljk sii9135 14-9-17*/ {.name = “SII9135AUDIO”,.stream_name = “HDMI-PCM”,.cpu_dai_name= “davinci-mcasp.0”,.codec_dai_name = “sii9135-hifi”,.platform_name =“davinci-pcm-audio”,.codec_name = “sii9135-audio”,.ops = &ti81xx_evm_ops, }, /*end*/ sound/soc/davinci/ti81xx-evm.c中的ti81xx_evm_hw_params函数设定音频为I2S或者DSP模式,以及位时钟与帧时钟的主从模式。(DSP_A模式与I2S模式没有区别)。static int ti81xx_evm_hw_params(struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params){ struct snd_soc_pcm_runtime *rtd = substream->private_data;struct snd_soc_dai *codec_dai = rtd->codec_dai;struct snd_soc_dai *cpu_dai = rtd->cpu_dai;unsigned sysclk, fmt = 0;/* default */ sysclk = 24576000;if(!strcmp(rtd->dai_link->name, “TVP5158AUDIO”)){
/* AFSR-> falling edge, ACLKX-> rising edge, 1 bitclock delay
DSP_A Mode(codec clk & FRM master)*/
fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_CBM_CFM |
SND_SOC_DAIFMT_NB_IF;//选择DSP_A模式,主模式
AUDIOPRINT(“TVP5158:DSP_A#codec clk and FRM as master.n”);/*+ljk 14-9-1*/ }
else if(!strcmp(rtd->dai_link->name, “SII9135AUDIO”))//ljk 14-9-29 {
fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_CBM_CFM |
SND_SOC_DAIFMT_NB_IF;
AUDIOPRINT(“SII9135:DSP_A#codec clk and FRM as master.n”);//+ljk 14-9-1 } else {
/* DSP_B Mode*/
fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM |
}
SND_SOC_DAIFMT_IB_NF;}
/* set codec DAI configuration */ snd_soc_dai_set_fmt(codec_dai, fmt);/* set cpu DAI configuration */ snd_soc_dai_set_fmt(cpu_dai, fmt);/* set the codec system clock */ snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);return 0;tvp5158已经提供了部分驱动和代码,当一个codec需要从零开始添加时,可以仿照tvp5158,如sii9135(连接至mcasp0的接收端口)的添加: 1.添加sii9135-audio.c文件到sound/soc/codecs/目录。2.修改sound/soc/codecs/Kconfig和Makefile 3.修改sound/soc/davinci/Kconfig 4.其他修改部分与tvp5158修改位置相同
5.不需要修改static const s16 ti814x_dma_rsv_chans[][2] 与static const s16 ti814x_dma_rsv_slots[][2]中与mcasp0对应的值。
6.需要在sound/soc/davinci/davinci-mcasp.c中将接收与发送时钟设置为异步: static void davinci_hw_param(struct davinci_audio_dev *dev, int stream, char *name){ ……
if(!strcmp(name, “SII9135AUDIO”))//+14-10-15
mcasp_set_bits(dev->base + DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);//设置时钟为异步
else
mcasp_clr_bits(dev->base + DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);//设置时钟为同步
…… }
codec驱动配置:
需要注意codec驱动所支持的采样率与格式要与codec芯片配置的相同,而且不能超过mcasp所支持的范围。
static struct snd_soc_dai_driver tvp5158_dai = {.name = “tvp5158-hifi”,.capture = {
.stream_name = “Capture”,.channels_min = 2,.channels_max = 16,.rates =(SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_48000),};.formats = SNDRV_PCM_FMTBIT_S16_LE|SNDRV_PCM_FMTBIT_S32_LE,},.ops = &tvp5158_dai_ops, 测试方法:
首先需要配置音频芯片的寄存器使它们可以正常输出I2S格式音频。这些芯片采用I2C总线通信,所以可以使用i2cset和i2cget工具配置和查询。例如,配置tvp5158地址为0xc3的寄存器为0x68:
i2cset-y 1 0x5b 0xc3 0x68 tvp5158的配置脚本内容:
#!/bin/sh echo “*******TVP5158 set**********” i2cset-y 1 0x5b 0xfe 0x01 echo “0xfe:” i2cget-y 1 0x5b 0xfe #16kHz i2cset-y 1 0x5b 0xc0 0x00 echo “0xc0:” i2cget-y 1 0x5b 0xc0 #mix output i2cset-y 1 0x5b 0xc4 0x01 echo “0xc4:” i2cget-y 1 0x5b 0xc4 i2cset-y 1 0x5b 0xc8 0x00 echo “0xc8:” i2cget-y 1 0x5b 0xc8 #SD_R master i2s 64fs 16bit PCM i2cset-y 1 0x5b 0xc3 0x68 echo “0xc3:” i2cget-y 1 0x5b 0xc3 #-1.5db i2cset-y 1 0x5b 0xc1 0x77 echo “0xc3:” i2cget-y 1 0x5b 0xc3 i2cset-y 1 0x5b 0xc2 0x77 echo “0xc3:” i2cget-y 1 0x5b 0xc3 #mute disable i2cset-y 1 0x5b 0xc5 0x00 echo “0xc5:”
i2cget-y 1 0x5b 0xc5 echo “*******finish*********” 使用ALSA提供的录音工具arecord录取声音。录音的参数需要与芯片对应的配置相同。tvp5158通过I2C配置为了16bit,16KHz。sii9135为32bit,48KHz。使用arecord-l 命令查看录音设备:
tvp5158录音:
arecord-Dplughw:0,0-r16000-fS16_LE test.wav sii9135录音:
arecord-Dplughw:0,2-r48000-fS32_LE test.wav
常见问题:
1、使用arecord 录制的wav格式视频只有44bit。
如果I2S信号正常,则是由于I2S时钟没有匹配mcasp时钟,44bit其实是wav格式的头的大小。检查sound/soc/davinci/davinci-mcasp.c中的时钟同步寄存器配置。
第五篇:接口实验报告
贵
州
大
学
实
验
报
告
纸
系 别 电科 班 级 电科 091 班 姓 名
学号
课 程 名 称 微机接口技术 成 绩
评 定
教师签名 实 验 时 间
2012 年 6 月 11 日 实验四
综合实验 一、实验目的1、了解 8253 定时器的硬件连接方法及时序关系,掌握 8253 工作方式以及编程方法。
2、了解 8255 芯片结构及接口方式,掌握 8255 输入、输出的编程方法。
3、掌握 8088 中断系统原理,掌握 8259A 扩展 8088 系统中断的方法及编程。
二、实验内容
编程将 8253 定时器 0 设定为方式 3,定时器 1 设定在方式 2,每 5 秒产生一次中断请求(共八次),用 8259 实现中,CPU 响应后,通过 8255 的 A 口读取一次开关状态(8 位),存入内存单元中,读入 8 个数据后,再通过 8255 的 B 口送到 LED 依次输出显示(1 亮,0灭)。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
本实验需要用到 CPU 模块(F3 区)、8253 模块(C4 区)、8255 模块、8259 模块(C5区)、频率发生器模块(E6 区)、八位逻辑电平显示模块(B5 区),8253 电路原理图参见图 4-1。频率发生器电路原理图参见图 4-2。8255 电路原理图参见图 4-3。8259 电路原理图参见图 4-4。
8253 是一种可编程计数器/定时器,它是用软、硬技术结合的方法实现定时和计数控制。其主要有以下特点:
①有 3 个独立的 16 位计数器,每个计数器均以减法计数。
②每个计数器都可按二进制计数或十进制(BCD 码)计数。
③每个计数器都可由程序设置 6 种工作方式。
④每个计数器计数速度可以达 2MHz。
8259A 是专用控制中断优先级而设计的集成电路,可对中断源的优先级排队、识别、及提供中断矢量。单块 8259A 可编程实现 8 级中断管理,并可选择优先模式及中断请求方式。另外由多片 8259A 级联,可构成多达 64 级的矢量中断系统。
中断序号 0 1 2 3 4 5 6 7
变量地址 20H 23H 24H 27H 28H 2BH 2CH 2FH 30H 33H 34H 37H 38H 3BH 3CH 3FH 本实验用 2 号中断源 IR2,接单次脉冲,中断方式为边沿触发方式。
程序每按一次按键产生一次中断,中断服务程序使输出状态反转一次。
8255 是可编程的并行输入/输出接口芯片,通用性强且使用灵活。8255 共有三个八位口,其中 A 口和 B 口是单纯的数据口,供数据 I/O 口使用。C 口可分为两个 4 位端口(C 口 的上半部分和下半部),不仅可以作数据 I/O 口使用,还能用作控制线,配合 A 口和 B 口使用。
图4-1
8253
图4-2
频率发生器
GND12VCC24D08OUT010D17GATE011D26CLK09D35D44D53D62OUT113D71GATE114CLK115CS21RD22WR23OUT217A019GATE216A120CLK218U9C8253ICAD0ICAD1ICAD2ICAD3ICAD4ICAD5ICAD6ICAD7A0A1P37CCS_8253R11C4.7KVCCVCCP38CCLK0P39COUT0P40CGATE0P41CCLK1P43COUT1P42CGATE1P44CCLK2P45COUT2P46CGATE2/RD_IC/WR_ICCLK10RST11Q19Q47Q55Q64Q76Q813Q912Q1014Q1115Q121Q132Q143VDD16GND8U4ECD4020IOCK1VCCIOCK2IOCK3IOCK4P23E150HzP24E300HzP25E600HzP26E2.4kHzP28E153.6kHzP27E19.2kHz2.4576MHzD034D133D232D331D430D529D628D727PA04PA13PA22PA31PA440PA539PA638PA737PB018PB119PB220PB321PB422PB523PB624PB725PC014PC115PC216PC317PC413PC512PC611PC710RD5WR36A09A18RESET35CS6GND7VCC26U11C8255ICAD0ICAD1ICAD2ICAD3ICAD4ICAD5ICAD6ICAD7P58CCS_8255R13C4.7KVCC/RESET_ICA1A0VCC12345678JD3CPA0-712345678JD4CPB0-712345678JD5CPC0-7/RD_IC/WR_IC
图 4-3
8255 电路
图 4-1
8259
五、实验程序
;//***************************************************************;文件名: 综合实验;功能: 8253定时/计数器,8259中断,8255并行输入输出实验;接线:;
用导线连接CPU模块的208H到8259的CS_8259;;
;
用导线连接CPU模块的8000到8253模块的CS_8253;;
频率发生器模块的153.6kHz接8253模块的CLK0;;
8253模块的CLK1接OUT0,;//***************************************************************
TIM_CTL
EQU
8003H
;8253 状态/命令口地址 TIMER0
EQU
8000H
ICAD0ICAD1ICAD2ICAD3ICAD4ICAD5ICAD6P47CCS_8259R12C4.7KVCCP48CINTP49CINTAVCCP50CINT_0P51CINT_1P52CINT_2P53CINT_3P54CINT_4P55CINT_5P56CINT_6P57CINT_7INT_0INT_1INT_2INT_3INT_4INT_5INT_6INT_***881RP1C10KVCCINT_0INT_1INT_2INT_3INT_4INT_5INT_6INT_7/RD_IC/WR_ICIR018IR119IR220IR321IR422IR523IR624IR725CAS012CAS113CAS215AD011AD110AD29AD38AD47AD56AD65AD74CS1INT17INTA26RD3WR2GND14VCC28SP/EN16A027U10C8259A0ICAD7
TIMER1
EQU
8001H
TIMER2
EQU
8002H
MODE03
EQU
00110110B MODE12
EQU
01110100B MODE22
EQU
10110100B CS8259
EQU
208H C8255
EQU
203H
;8255 状态/命令口地址 P8255A
EQU
200H
;8255 PA 口地址 P8255B
EQU
201H
;8255 PC 口地址 P8255C
EQU
202H
;8255 PC 口地址
DATA
SEGMENT ARY
DB 8 DUP(?)DATA
ENDS STACK
SEGMENT STACK STA
DW 50 DUP(?)TOP
EQU LENGTH STA STACK
ENDS
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV
DX,C8255
MOV
AL,10011000B
;设置8255的A口输入,CH口输入,B口输出,CL口输出
OUT
DX,AL
CALL
DSCSH
;8253初始化
CALL
ZDCSH
;8239初始化
MOV
BX,OFFSET ARY
MOV
CX,8
XUNH:
CMP
CX,0
JNE
XUNH
MOV
CX,8
MOV
BX,OFFSET ARY LOOP1:
MOV
AL,[BX]
MOV
DX,P8255B
OUT
DX,AL
CALL
DELAY
INC
BX
LOOP
LOOP1
IRQ2:
CLI
MOV
DX,P8255A
IN
AL,DX
NOT
AL
MOV
[BX],AL
MOV
DX,P8255B
OUT
DX,AL
CALL
DELAY
INC
BX
DEC
CX
STI
IRET
ZDCSH
PROC NEAR
XOR
AX,AX
MOV
DS,AX
LEA
AX,IRQ2
MOV
DS:28H,AX
MOV
AX,CS
MOV
DS:2AH,AX
MOV
DX,CS8259
MOV
AL,00010011B
;ICW1
OUT
DX,AL
INC
DX
MOV
AL,00001000B
;ICW2:中断号从8开始
OUT
DX,AL
MOV
AL,00001111B
;ICW4:全嵌套方式,86/88系统,自动结束中断
OUT
DX,AL
MOV
AL,11111011B
;OCW1:开放Int-2
OUT
DX,AL
MOV
DX,CS8259
MOV
AL,20H
;OCW2:非特殊EOI结束中断
OUT
DX,AL
STI
;开中断
RET ZDCSH
ENDP
DSCSH
PROC NEAR
MOV
DX,TIM_CTL
MOV
AL,00110110B
OUT
DX,AL
MOV
DX,TIMER0
MOV
AL,00H
OUT
DX,AL
MOV
AL,03H
OUT
DX,AL
MOV
DX,TIM_CTL
MOV
AL,01110100B
OUT
DX,AL
MOV
DX,TIMER1
MOV
AL,0E8H
OUT
DX,AL
MOV
AL,03H
OUT
DX,AL
RET DSCSH
ENDP
DELAY
PROC
NEAR
PUSH
CX
PUSH
BX
MOV
BL,20 DL1:
MOV
CX,8000H DL2:
LOOP
DL2
DEC
BL
CMP
BL,0
JNE
DL1
POP
CX
RET DELAY
ENDP
CODE
ENDS
END
START
六、实验步骤
1)系统各跳线器处在初始设置状态。
用导线连接 CPU 模块的 200 到 8253 模块的 CS_8253; 频率发生器模块的 153.6kHz 接 8253 模块的 CLK0; 8253 模块的 CLK1 接 OUT0,CLK2 接 OUT1,GATE0、GATE1、GATE2 接+5V,OUT2 接 L0 灯。
2)启动 PC 机,打开 THGMW-88 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。
3)观察发光二极管的显示情况。
七、实验现象和分析 实验是为了输入和显示开关状态,并且通过 8253、8255、8259 来实现。实验通过 8253 来实现定时的采样,实验中每 5 秒产生一次定时输出;用 8259 来产生中断,当定时时间到就产生一次高电平输出,引起中断,产生中断后,CPU 对开关进行读取,并输出,通过发光二极管来显示输出结果;用 8255 来实现数据的输入和输出,输入为读取开关量,而输出为结果的输出到发光二极管,分别通过 8255 的 PA 口和 PB 口来实现。运行程序后,可以对开关进行拨动,在定时时间到后,可以看到发光二极管显示的状态的开关的状态相同。由此,可以认为电路对开关状态的输入和输出是正确的,实验完成了预想的要求。
八、实验总结
通过实验基本上掌握了 8253、8255、8259 的使用方法。8253 为计数器,有三个计数通道,并且有六种工作方式,可以产生多种不同的波形输出,实现不同长度的时间定时,通过方式命令字的设置可以设置不同计数器的不同方式。8255 为并行输入输出芯片,有三个输入输出口,可以实现三路的输入输出,并且有几种工作方式,在实验中,只用了方式 0,作为普通的输入输出口,工作时,可以通过方式命令字来设置三个口的工作状态。而 8259 为中断管理芯片,可以实现 8 路的中断处理,他可以实现中断的屏蔽,优先级的设定,中断号的产生等,他也可以通过设置方式命令字来设置它的工作方式。实验还使自己掌握了,多芯片联合工作的方法,这为以后的电路设计提供了很多的经验。