第一篇:關(guān)于接口測試的總結(jié)
關(guān)于接口測試的總結(jié)
1.接口測試:是測試系統(tǒng)組件間接口的一種測試。主要用于檢測外部系統(tǒng)于系統(tǒng)之間以及系統(tǒng)內(nèi)部各個子系統(tǒng)之間的交互點。重點測試的時數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等等,這要求對業(yè)務邏輯有一定程度上的理解,對數(shù)據(jù)流向有較好的定位。
2.接口測試的分類: a)b)c)系統(tǒng)與系統(tǒng)之間的調(diào)用(如分享時,微信會提供接口給“跑向珠峰”); 上層服務對下層服務的調(diào)用
服務之間的調(diào)用(如添加一條數(shù)據(jù)時,會先調(diào)用數(shù)據(jù)查詢的服務,查詢改數(shù)據(jù)是否是重復數(shù)據(jù));
不同類型的接口測試方法可能不一致,但總體來說,不管是哪種類型,被測接口即為服務方,測試手段為客戶方,接口測試的目的就是:通過我們的測試手段,去驗證滿足其聲明提供的功能。
3.接口測試的原理:通過測試程序模擬客戶端向服務器發(fā)送請求報文,服務器接收請求報文后對相應的報文做出處理然后再把應答報文發(fā)送給客戶端,客戶端接收應答報文這一過程(request→response)
4.接口測試的流程:類似于功能測試,需求討論→評審需求→確定需求→產(chǎn)出接口定義→根據(jù)需求文檔及接口定義設計測試用例(測試用例主要從業(yè)務場景,功能以及異常測試幾個方面考慮)→評審用例→執(zhí)行測試
5.接口測試的價值:降低成本,提高效率。接口測試能夠提供系統(tǒng)復雜度上升情況下的低成本高效率的解決方案。它是一個完整的體系,還包括功能測試,性能測試等。
6.接口測試的適用范圍:一般用于多個系統(tǒng)間的交互開發(fā),或者擁有多個子系統(tǒng)的應用系統(tǒng)開發(fā)的測試。接口測試適用于為其他系統(tǒng)提供服務的底層框架系統(tǒng)和中心服務系統(tǒng)。主要測試這些對外部提供的接口的正確性和穩(wěn)定性。它也同樣適用于上層系統(tǒng)中服務層接口,測試難度隨層級而上升。即越往上難度越大。
7.需求的頻繁變化,做接口測試的測試人員應該如何應對:個人覺得此在于團隊開發(fā)的流程,團隊之間的溝通和測試人員的警覺性。、在開發(fā)階段,需求的變更是一件極為頻繁和正常的事情,對于此點團隊中的任何一人都應該以正確的心態(tài)來面對。團隊需要規(guī)范的開發(fā)流程,良好的溝通方式,測試人員更需要及時跟進軟件進度,和開發(fā)人員并進齊行。同時,測試與開發(fā)需要相對獨立的工作環(huán)境,總結(jié)而言為之知己知彼,亦敵亦友。
8.關(guān)于如何簡單設計接口測試的設計用例 a)明確出發(fā)點——測試的目的是為了讓找出軟件的缺口,修復并使之更加完善。在這一基礎點上,接口測試也不例外。以找出軟件的誤漏為出發(fā)點,測試用例需緊貼此線,更容易找出問題所在。b)明確測試點——選擇好的測試對象。系統(tǒng)內(nèi)部層次繁復復雜,任何一個接口的變動都將導致用例失效。(可將這些最外層的接口根據(jù)數(shù)據(jù)的流向分為進入和流出兩類,進入系統(tǒng)的接口實際上是我們用例的執(zhí)行調(diào)用的接口。可通過參數(shù)對這些接口進行調(diào)用,模擬外部的使用;而流出的接口則是我們用例真正該驗證的點。數(shù)據(jù)從哪里流出,流出的狀態(tài)如何,此時系統(tǒng)的狀態(tài)都是作為測試目的所要著重關(guān)注的部分)c)確認完整的測試對象的功能——確認外部接口提供給使用這些接口的外部用戶什么樣的功能,外部用戶真正需要的時什么樣的功能予以區(qū)別。用例的設計要嚴格按照測試對象功能設計才是正確的用例。
9.設計(接口)測試用例有哪些要求:結(jié)構(gòu)好,可讀性高,滲透性強。
10.(接口)測試用例包括的內(nèi)容:功能點,測試環(huán)境,測試數(shù)據(jù),執(zhí)行操作以及預期結(jié)果。如下: a)接口測試測試的功能點:如果一個接口功能過于復雜時,可以對接口用例進行結(jié)構(gòu)劃分(如根據(jù)層次,平臺,功能點等等),這樣用例具有更好的可讀性(接口劃分原則為:以接口提供的功能點的不同進行合適粒度的劃分,同一功能點的用例又可根據(jù)測試環(huán)境的不同,數(shù)據(jù)的不同進行用例的填充)b)c)接口測試用例的環(huán)境:程序內(nèi)部環(huán)境和程序所調(diào)用的外部接口的環(huán)境。
關(guān)于接口測試測試數(shù)據(jù):分為兩部分:接口參數(shù)數(shù)據(jù)和用例執(zhí)行所需系統(tǒng)數(shù)據(jù)。數(shù)據(jù)的設計、準備測試用例的數(shù)據(jù)不可馬虎。通過好的測試數(shù)據(jù)查找問題,能極大的提高工作效率。接口參數(shù)數(shù)據(jù)需要對每個參數(shù)根據(jù)測試接口的實際功能進行分析,在符合業(yè)務邏輯的情況下進行邏輯組合排列,不要遺漏某些邊界值和錯誤點的數(shù)據(jù),這樣用例更容易發(fā)現(xiàn)問題。d)e)執(zhí)行操作:即對所測接口的調(diào)用。
預期結(jié)果:根據(jù)需求進行驗證,是衡量軟件是否達到預期的標準。應該著重細致,每個用例均需驗證,應該避免一個用例重復做相同的驗證,提高測試用例的效率。
11.具體測試用例的參考點: a)輸入?yún)?shù)測試:針對輸入?yún)?shù)進行的測試,也可以說是假定接口參數(shù)的不正確性進行的測試,確保接口對任意類型的輸入都做了相應的處理:輸入?yún)?shù)合法(不合法),輸入?yún)?shù)為空,為null,輸入?yún)?shù)超長等等; b)功能測試“接口是否滿足了所提供的功能,相當于正常情況測試,如果一個接口功能復雜時推薦對接口用例進行結(jié)構(gòu)劃分,這樣子用例覺有更好的可讀性和可維護性; c)邏輯測試:邏輯測試嚴格講應為單元測試,單元測試應保持內(nèi)部邏輯的正確性,可單元測試和接口測試的界限并不是那么清楚,所以我們也可以從給出的設計文檔中考慮內(nèi)部邏輯錯誤的分之情況和異常; d)異常情況測試:接口實現(xiàn)是否對清楚情況都進行了處理,接口輸入?yún)?shù)雖然合法,但是在接口實現(xiàn)中,也會出現(xiàn)異常,因為內(nèi)部的異常不一定是輸入的數(shù)據(jù)造成的,而有可能是其他邏輯造成的,程序需要對任何異常都進行處理。
題外
關(guān)于單元測試,接口測試和白盒測試
a)單元測試:針對具體代碼邏輯進行測試,主要測試被測代碼的一個很小,很明確的功能是否正確。即單元模塊的邏輯是否正確,對業(yè)務關(guān)注不大;
b)接口測試:針對程序內(nèi)部的或者外部的接口進行的測試一個接口方法可能包含多個單元模塊,并且,一個接口會有自己特定的業(yè)務定義:做接口測試更多的從業(yè)務的角度去考慮如何測試;
c)白盒測試:單元測試和接口測試都屬于白盒測試的一個階段
第二篇:醫(yī)保接口測試文檔
杭州創(chuàng)業(yè)軟件集團
2013-5-1 徐
醫(yī)
附
屬
醫(yī)
院
醫(yī)保接口測試文檔
編輯:沈國強
日期:2003-12-24
住院系統(tǒng)
1、運行住院系統(tǒng),并登錄住院系統(tǒng)
用于測試醫(yī)保初始化是否通過,主要包括以下幾項: 1)、檢測系統(tǒng)參數(shù)設置是否已經(jīng)設置; 2)、檢測本機是否使用醫(yī)保功能 3)、檢測本機是否需記錄醫(yī)保錯誤日志 4)、連接醫(yī)保數(shù)據(jù)庫
5)、自動更新醫(yī)保在院病人基本信息
2、退出住院系統(tǒng)
用于測試醫(yī)保退出時,是否正常釋放使用資源。
3、醫(yī)保入院登記處理,具體包括以下功能
1)、醫(yī)保性質(zhì)選擇,此時正常情況下應該自動打開醫(yī)保讀卡窗體(如圖3-1),等待用戶進行讀卡操作;
杭州創(chuàng)業(yè)軟件集團
2013-5-1
圖3-1 2)、性質(zhì)選擇完成后,輸入相關(guān)住院信息后,進行“保存”操作,此時將檢測如果為醫(yī)保病人,則將自動打開“費用控制”窗體(如圖3-2),當有預交款時,在“預交款總額”一欄中,將自動輸入且不能修改,“虛擬帳戶總額”一般根據(jù)醫(yī)院自行設定,可輸入0,“鎖定判別”用于將當前病人鎖定或未鎖定,鎖定時,將不能記費,只能退費。當按“取消”時,將不對病人進行費用控制處理。
圖3-2 3)、說明:在讀卡過程中,不要將醫(yī)??ㄌ嵩绯槌?,請在處理完成后再抽出。
4、對病人進行交預交款處理
在對醫(yī)保病人進行交款處理數(shù)據(jù)保存時,將自動處理欠費功能,如果病人交款后,仍處于欠費狀態(tài),則系統(tǒng)將自動將病人鎖定。
5、對病人進行退款處理
在對醫(yī)保病人進行退款處理時,將自動處理欠費功能,如果病人退款后,處于欠費狀態(tài),則系統(tǒng)將自動將病人鎖定。
6、對病人進行費用記帳
在費用記帳時,系統(tǒng)將對醫(yī)保病人進行欠費檢測,如果已經(jīng)欠費,則不允許將費用記入;如果未欠費,但此項費用已經(jīng)大于可用額度即自負金額加上本項目費用金額已經(jīng)超過預交款與虛擬帳戶的合計時,此項費用也不允許記入;只有當可用額度大于費用額時,方可記費;同時,對于醫(yī)保病人進行費用與藥品使用限制控制,即當費用或藥品存在于“護理費、治療費、器械費、另加器械費、消毒費、材料費、備皮材料費、靜脈輸液 杭州創(chuàng)業(yè)軟件集團
2013-5-1
7、進行出院結(jié)算處理
在出院結(jié)算選擇后,系統(tǒng)將自動打開醫(yī)保讀卡窗體,要求讀卡操作,并進行病人基本信息的更新;在“結(jié)算”時,系統(tǒng)將自動打開醫(yī)保結(jié)算窗體,同時進行醫(yī)保分段計算處理,顯示計算結(jié)果(如圖7-1),按“確定”后進行正式結(jié)算并打印住院發(fā)票,醫(yī)保病人發(fā)票可選擇打印,即在系統(tǒng)參數(shù)中進行選擇,即使用新發(fā)票或是舊發(fā)票打印,此功能只針對醫(yī)保病人。舊發(fā)票打印程序需修改,由于沒有實際項目,無法設定數(shù)據(jù),需修改。
新發(fā)票打印程序使用DataWindow套打,位置基本正確,其中有兩項數(shù)據(jù)未知,需確定,并修改程序。
圖7-1
8、發(fā)票作廢處理
在發(fā)票作廢病人選擇后,需進行讀卡操作,并自動更新病人信息,“作廢”時,將HIS端醫(yī)保結(jié)算相關(guān)表置作廢日期;并處理醫(yī)保功能,使當前病人卡處于在院狀態(tài)。
9、病人入院注銷
在病人未發(fā)生費用與交款時,可作入院注銷處理,“注銷”操作時需進行讀卡操作。
10、病人性質(zhì)轉(zhuǎn)換
病人可從非醫(yī)保性質(zhì)轉(zhuǎn)換為醫(yī)保性質(zhì),或從醫(yī)保性質(zhì)轉(zhuǎn)換到非醫(yī)保性質(zhì)。
第三篇:Java接口抽象類繼承總結(jié)
繼承
作用:子類通過繼承可以復用父類中的成員變量和方法 使用要求: 語法 class 類名
extends 父類名
子類最多只能繼承一個父類。特點:
* 1.繼承可依次進行,層次越低功能越強
* 2.java所有類都是object類的子類
* 3.開發(fā)時多使用jdk幫助文檔 抽象類
作用:當父類的一些方法不能確定時,可以用abstract來修飾該類 使用要求:
* 1.抽象類不能被實例化
* 2.抽象類可以沒有abstract方法,但一旦包含了abstract方法則該類必須
聲明為abstract * 3.抽象方法不能有主體(即沒有大括號)
abstract void cry();特點:當一個類繼承的父類是抽象的,需要我們把抽象類中的所有方法全部實現(xiàn) 接口
作用:接口的最主要的作用是達到統(tǒng)一訪問,接口就是給出一些沒有內(nèi)容的方法。封裝到一起,到某個要使用的時候再根據(jù)具體情況把這些方法寫出來 語法:
class 類名
implements 接口
{
方法;
變量;
} 特點:
1.接口是更加抽象的抽象的類,抽象類里的方法可以有方法體,接口里的所有方法都沒有方法體。
2.接口體現(xiàn)了程序設計的多態(tài)和高內(nèi)聚低偶合的設計思想 使用要求: 1.一個類可以實現(xiàn)多個接口
2.接口中可以有變量(常量)
a.接口中的變量本質(zhì)上都是static而且是final(用final修飾類、方法、變量時類、方法、變量不能被繼承、覆蓋、修改)
b.在java開發(fā)中,經(jīng)常把常用的變量,定義在接口中作為全局變量使用
訪問形式:接口名.變量名 3.接口不能繼承其他的類,但是可以繼承其他的接口
4.當一個類實現(xiàn)了一個接口,就要求該類把接口的所有方法統(tǒng)統(tǒng)實現(xiàn) 接口定義共有規(guī)范,而且定義的是強制性規(guī)范,繼承是擴展原有規(guī)范。
一般設計中,接口定義特性,抽象類做共有基本特性實現(xiàn),子類做獨有特性的擴展。
第四篇:DM8148 McASP接口調(diào)試總結(jié)
DM8148 McASP接口調(diào)試總結(jié)
基礎知識:
I2S協(xié)議——(Inter-IC Sound或Intergrated Interchip Sound)是飛利浦公司設計的一種用于IC間傳輸數(shù)字音頻信號的接口標準。標準的I2S協(xié)議由3條線構(gòu)成:幀時鐘、位時鐘和數(shù)據(jù)線。幀時鐘用于切換左右聲道的數(shù)據(jù)。位時鐘對應每一位數(shù)據(jù)。有時為了使系統(tǒng)間能夠更好的同步還需要另外傳輸一個信號MCLK,稱為主時鐘,也叫系統(tǒng)時鐘。
圖1 I2S協(xié)議時序
I2S采樣率、采樣位數(shù)和時鐘的關(guān)系:
位時鐘(串行時鐘)= 2*采樣頻率*采樣位數(shù) 幀時鐘 = 采樣頻率
主時鐘 = 采樣頻率的256倍或384倍(依據(jù)codec的配置)
McASP接口——復通道音頻接入接口,是TI公司的DSP的一種接入接口,是一種通用的音頻接入接口。采用的是時分復用的數(shù)據(jù)流形式。Mcasp使用I2S協(xié)議,也支持DIT協(xié)議。mcasp包括發(fā)射和接收兩部分,他們可以使用不同時鐘,不同的傳輸模式,工作完全獨立。發(fā)射和接收也能夠工作在同步狀態(tài)。mcasp的管腳都可以配置為通用I/O。
圖2 mcasp引腳介紹
DM8148共有6個Mcasp接口,其中mcasp0、1既有接收口(ACLKR、AFSR)也有發(fā)送口(ACLKX、AFSX),且可以設置為不同時鐘,即接收時鐘可以與發(fā)送時鐘同步,也可以選擇異步。而Mcasp2、3、4、5只有發(fā)送口(ACLKX、AFSX),因此接收時鐘必須與發(fā)送時鐘同步。
硬件連接: 方式一:
ACLKX——連接I2S的位時鐘輸入/輸出 AFSX——連接I2S的幀時鐘輸入/輸出 AXR——連接I2S的數(shù)據(jù)輸入/輸出
方式二:
ACLKR——連接I2S的位時鐘輸入/輸出 AFSR——連接I2S的幀時鐘輸入/輸出 AXR——連接I2S的數(shù)據(jù)輸入/輸出
兩種情況由于連接方式不同,在McASP時鐘配置時也有區(qū)別。在TI的DVRRDK_04.00.00.03提供的內(nèi)核中默認采用的是方式一(DM8148只有mcasp0和mcasp1同時具有發(fā)送口與接收口,mcasp2、3、4、5都只有發(fā)送口,因此所有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接收與發(fā)送時鐘配置 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, }, };以上結(jié)構(gòu)體添加了mcasp4的基地址以及EDMA通道,這些值如果沒有定義,需要在archarmplat-omapincludeplatasp.h中添加,查閱數(shù)據(jù)手冊。此外還要修改EDMA配置,否者會出現(xiàn)錯誤信息:
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接口的每個數(shù)據(jù)接收發(fā)送端口AXR的工作模式:RX_MODE(接收), TX_MODE(發(fā)送)和INACTIVE_MODE(無效)。本數(shù)組表示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結(jié)構(gòu)體連接起codec驅(qū)動與平臺驅(qū)動,內(nèi)核根據(jù)名字建立連接,要保證codec_name和codec驅(qū)動中的platform_driver中的名字相同;codec_dai_name和codec驅(qū)動中的snd_soc_dai_driver中的名字相同。此結(jié)構(gòu)體中成員的順序決定了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函數(shù)設定音頻為I2S或者DSP模式,以及位時鐘與幀時鐘的主從模式。(DSP_A模式與I2S模式?jīng)]有區(qū)別)。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已經(jīng)提供了部分驅(qū)動和代碼,當一個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中將接收與發(fā)送時鐘設置為異步: 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驅(qū)動配置:
需要注意codec驅(qū)動所支持的采樣率與格式要與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的配置腳本內(nèi)容:
#!/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錄取聲音。錄音的參數(shù)需要與芯片對應的配置相同。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 班 姓 名
學號
課 程 名 稱 微機接口技術(shù) 成 績
評 定
教師簽名 實 驗 時 間
2012 年 6 月 11 日 實驗四
綜合實驗 一、實驗目的1、了解 8253 定時器的硬件連接方法及時序關(guān)系,掌握 8253 工作方式以及編程方法。
2、了解 8255 芯片結(jié)構(gòu)及接口方式,掌握 8255 輸入、輸出的編程方法。
3、掌握 8088 中斷系統(tǒng)原理,掌握 8259A 擴展 8088 系統(tǒng)中斷的方法及編程。
二、實驗內(nèi)容
編程將 8253 定時器 0 設定為方式 3,定時器 1 設定在方式 2,每 5 秒產(chǎn)生一次中斷請求(共八次),用 8259 實現(xiàn)中,CPU 響應后,通過 8255 的 A 口讀取一次開關(guān)狀態(tài)(8 位),存入內(nèi)存單元中,讀入 8 個數(shù)據(jù)后,再通過 8255 的 B 口送到 LED 依次輸出顯示(1 亮,0滅)。
三、實驗要求
根據(jù)實驗內(nèi)容編寫一個程序,并在實驗儀上調(diào)試和驗證。
四、實驗說明和電路原理圖
本實驗需要用到 CPU 模塊(F3 區(qū))、8253 模塊(C4 區(qū))、8255 模塊、8259 模塊(C5區(qū))、頻率發(fā)生器模塊(E6 區(qū))、八位邏輯電平顯示模塊(B5 區(qū)),8253 電路原理圖參見圖 4-1。頻率發(fā)生器電路原理圖參見圖 4-2。8255 電路原理圖參見圖 4-3。8259 電路原理圖參見圖 4-4。
8253 是一種可編程計數(shù)器/定時器,它是用軟、硬技術(shù)結(jié)合的方法實現(xiàn)定時和計數(shù)控制。其主要有以下特點:
①有 3 個獨立的 16 位計數(shù)器,每個計數(shù)器均以減法計數(shù)。
②每個計數(shù)器都可按二進制計數(shù)或十進制(BCD 碼)計數(shù)。
③每個計數(shù)器都可由程序設置 6 種工作方式。
④每個計數(shù)器計數(shù)速度可以達 2MHz。
8259A 是專用控制中斷優(yōu)先級而設計的集成電路,可對中斷源的優(yōu)先級排隊、識別、及提供中斷矢量。單塊 8259A 可編程實現(xiàn) 8 級中斷管理,并可選擇優(yōu)先模式及中斷請求方式。另外由多片 8259A 級聯(lián),可構(gòu)成多達 64 級的矢量中斷系統(tǒng)。
中斷序號 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,接單次脈沖,中斷方式為邊沿觸發(fā)方式。
程序每按一次按鍵產(chǎn)生一次中斷,中斷服務程序使輸出狀態(tài)反轉(zhuǎn)一次。
8255 是可編程的并行輸入/輸出接口芯片,通用性強且使用靈活。8255 共有三個八位口,其中 A 口和 B 口是單純的數(shù)據(jù)口,供數(shù)據(jù) I/O 口使用。C 口可分為兩個 4 位端口(C 口 的上半部分和下半部),不僅可以作數(shù)據(jù) I/O 口使用,還能用作控制線,配合 A 口和 B 口使用。
圖4-1
8253
圖4-2
頻率發(fā)生器
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定時/計數(shù)器,8259中斷,8255并行輸入輸出實驗;接線:;
用導線連接CPU模塊的208H到8259的CS_8259;;
;
用導線連接CPU模塊的8000到8253模塊的CS_8253;;
頻率發(fā)生器模塊的153.6kHz接8253模塊的CLK0;;
8253模塊的CLK1接OUT0,;//***************************************************************
TIM_CTL
EQU
8003H
;8253 狀態(tài)/命令口地址 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 狀態(tài)/命令口地址 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系統(tǒng),自動結(jié)束中斷
OUT
DX,AL
MOV
AL,11111011B
;OCW1:開放Int-2
OUT
DX,AL
MOV
DX,CS8259
MOV
AL,20H
;OCW2:非特殊EOI結(jié)束中斷
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)系統(tǒng)各跳線器處在初始設置狀態(tài)。
用導線連接 CPU 模塊的 200 到 8253 模塊的 CS_8253; 頻率發(fā)生器模塊的 153.6kHz 接 8253 模塊的 CLK0; 8253 模塊的 CLK1 接 OUT0,CLK2 接 OUT1,GATE0、GATE1、GATE2 接+5V,OUT2 接 L0 燈。
2)啟動 PC 機,打開 THGMW-88 軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運行。
3)觀察發(fā)光二極管的顯示情況。
七、實驗現(xiàn)象和分析 實驗是為了輸入和顯示開關(guān)狀態(tài),并且通過 8253、8255、8259 來實現(xiàn)。實驗通過 8253 來實現(xiàn)定時的采樣,實驗中每 5 秒產(chǎn)生一次定時輸出;用 8259 來產(chǎn)生中斷,當定時時間到就產(chǎn)生一次高電平輸出,引起中斷,產(chǎn)生中斷后,CPU 對開關(guān)進行讀取,并輸出,通過發(fā)光二極管來顯示輸出結(jié)果;用 8255 來實現(xiàn)數(shù)據(jù)的輸入和輸出,輸入為讀取開關(guān)量,而輸出為結(jié)果的輸出到發(fā)光二極管,分別通過 8255 的 PA 口和 PB 口來實現(xiàn)。運行程序后,可以對開關(guān)進行撥動,在定時時間到后,可以看到發(fā)光二極管顯示的狀態(tài)的開關(guān)的狀態(tài)相同。由此,可以認為電路對開關(guān)狀態(tài)的輸入和輸出是正確的,實驗完成了預想的要求。
八、實驗總結(jié)
通過實驗基本上掌握了 8253、8255、8259 的使用方法。8253 為計數(shù)器,有三個計數(shù)通道,并且有六種工作方式,可以產(chǎn)生多種不同的波形輸出,實現(xiàn)不同長度的時間定時,通過方式命令字的設置可以設置不同計數(shù)器的不同方式。8255 為并行輸入輸出芯片,有三個輸入輸出口,可以實現(xiàn)三路的輸入輸出,并且有幾種工作方式,在實驗中,只用了方式 0,作為普通的輸入輸出口,工作時,可以通過方式命令字來設置三個口的工作狀態(tài)。而 8259 為中斷管理芯片,可以實現(xiàn) 8 路的中斷處理,他可以實現(xiàn)中斷的屏蔽,優(yōu)先級的設定,中斷號的產(chǎn)生等,他也可以通過設置方式命令字來設置它的工作方式。實驗還使自己掌握了,多芯片聯(lián)合工作的方法,這為以后的電路設計提供了很多的經(jīng)驗。