本發(fā)明涉及一種軟件算法模擬同步總線產(chǎn)生時(shí)鐘信號(hào)的方法。
背景技術(shù):
在電子產(chǎn)品中,有大量需要主處理器將處理好的數(shù)據(jù)發(fā)給外設(shè)的操作。在進(jìn)行信息傳遞時(shí),采用的數(shù)據(jù)總線方式有兩種:同步總線方式與異步總線方式。同步總線方式需要CLK時(shí)鐘信號(hào)來同步傳輸,例如SDIO接口有1根CLK線,4根數(shù)據(jù)線;LCM接口有1根CLK線。一般這些CLK線都是通過物理芯片控制并產(chǎn)生的。通過硬件的物理接口,數(shù)據(jù)從處理器傳送給外部設(shè)備,從而實(shí)現(xiàn)外部設(shè)備的驅(qū)動(dòng)。
隨著電子產(chǎn)品的不斷發(fā)展,產(chǎn)品功能的不斷增加,現(xiàn)有的硬件平臺(tái)的接口往往是不夠的。例如,有手機(jī)需要支持2個(gè)屏幕,就需要2個(gè)顯示模塊;有的相機(jī)需要2個(gè)存儲(chǔ)卡,就需要2個(gè)SDIO模塊;為了解決上述硬件平臺(tái)接口不夠用的問題,現(xiàn)有的做法是重新設(shè)計(jì)芯片或者更換硬件平臺(tái),這將導(dǎo)致成本大幅增加。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是,克服上述背景技術(shù)的不足,提供一種可有效節(jié)約成本的軟件算法模擬同步總線產(chǎn)生時(shí)鐘信號(hào)的方法。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案是,一種軟件算法模擬同步總線產(chǎn)生時(shí)鐘信號(hào)的方法,包括以下步驟:
(1)初始化算法的變量值,重置算法存儲(chǔ)數(shù)組buff的初始值;
(2)獲取需要傳輸?shù)脑紨?shù)據(jù)的長度Dlen以及原始數(shù)據(jù)的起始地址Data[];
(3)根據(jù)原始數(shù)據(jù)的長度Dlen,啟動(dòng)循環(huán)操作,根據(jù)循環(huán)步進(jìn)次數(shù)i和原始數(shù)據(jù)的起始地址Data[],獲取原始數(shù)據(jù)中的第i個(gè)數(shù)據(jù)Data[i];將10000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,生成一個(gè)新的16位長的數(shù)據(jù)Data1;將00000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,再次生成一個(gè)新的16位長的數(shù)據(jù)Data2;
(4)將Data1左移16位,將左移16后的結(jié)果與Data2進(jìn)行邏輯或操作,生成一個(gè)新的32位長的數(shù)據(jù),然后存儲(chǔ)到算法存儲(chǔ)數(shù)組buff中;
(5)利用循環(huán)操作,依次對原始數(shù)據(jù)中的每個(gè)數(shù)據(jù)進(jìn)行步驟(3)、(4)的操作;直至循環(huán)結(jié)束;
(6)啟動(dòng)系統(tǒng)的DMA傳輸功能,將算法存儲(chǔ)數(shù)組buff中存儲(chǔ)的數(shù)據(jù)傳輸出去,即得到所需的時(shí)鐘信號(hào)。
進(jìn)一步, 步驟(6)中,先將算法存儲(chǔ)數(shù)組buff中存儲(chǔ)的數(shù)據(jù)寫入LCM接口或者并行接口的寫地址中,再傳輸給外部設(shè)備。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)如下:通過算法將數(shù)據(jù)進(jìn)行加工改造,控制數(shù)據(jù)流規(guī)律輸出0,1,0,1,0,1,0,1的序列,模擬輸出時(shí)鐘信號(hào),輸出的時(shí)鐘信號(hào)可模擬同步總線驅(qū)動(dòng)外部器件,極大程度上拓展硬件功能接口,能夠外接基于同步總線的外部設(shè)備,成本較低。
附圖說明
圖1是本發(fā)明實(shí)施例的輸出時(shí)鐘信號(hào)波形示意圖。
圖2是本發(fā)明實(shí)施例的方法流程圖。
具體實(shí)施方式
下面結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)描述。
本實(shí)施例包括以下步驟:
(1)建立好硬件環(huán)境,軟件環(huán)境,初始化算法的變量值,變量包括i、Dlen、Data1和Data2,重置算法存儲(chǔ)數(shù)組buff的初始值;
(2)獲取需要傳輸?shù)脑紨?shù)據(jù)的長度Dlen以及原始數(shù)據(jù)的起始地址Data[];
(3)根據(jù)原始數(shù)據(jù)的長度Dlen,啟動(dòng)循環(huán)操作,根據(jù)循環(huán)步進(jìn)次數(shù)i和原始數(shù)據(jù)的起始地址Data[],獲取原始數(shù)據(jù)中的第i個(gè)數(shù)據(jù)Data[i];將10000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,生成一個(gè)新的16位長的數(shù)據(jù)Data1;將00000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,再次生成一個(gè)新的16位長的數(shù)據(jù)Data2;
(4)將Data1左移16位,將左移16后的結(jié)果與Data2進(jìn)行邏輯或操作,生成一個(gè)新的32位長的數(shù)據(jù),然后存儲(chǔ)到算法存儲(chǔ)數(shù)組buff中;
步驟(4)的目的在于將兩個(gè)16位長數(shù)據(jù)(Data1和Data2)拼接為一個(gè)32位長的數(shù)據(jù),以利用 32位DMA(Direct Memory Access,直接內(nèi)存存?。┛偩€的帶寬。
(5)利用循環(huán)操作,依次對原始數(shù)據(jù)中的每個(gè)數(shù)據(jù)進(jìn)行步驟(3)、(4)的操作;直至循環(huán)結(jié)束;
(6)啟動(dòng)系統(tǒng)的DMA傳輸功能,將算法存儲(chǔ)數(shù)組buff中存儲(chǔ)的數(shù)據(jù)傳輸出去,即得到所需的時(shí)鐘信號(hào),時(shí)鐘信號(hào)如圖1所示;傳輸起始地址為算法存儲(chǔ)數(shù)組buff的起始地址,目的地址為LCM (LCD Module,液晶模塊)接口的寫地址,或者其他的并行接口(如:SDIO接口)的寫地址,LCM接口或并行接口的一個(gè)信號(hào)線連接到外部設(shè)備的CLK端,這個(gè)信號(hào)線上將產(chǎn)生連續(xù)0,1高低電平規(guī)律變化的數(shù)據(jù),
寫地址收到數(shù)據(jù)后,會(huì)立即通過信號(hào)線發(fā)送給外部設(shè)備,外部設(shè)備即接收到時(shí)鐘信號(hào)。
本實(shí)施通過一個(gè)16位的并行接口輸出數(shù)據(jù),其中Data0~Data7為傳輸數(shù)據(jù)端口,D15為模擬時(shí)鐘信號(hào)端口。通過本發(fā)明方法模擬,傳輸?shù)臅r(shí)鐘信號(hào)與物理芯片產(chǎn)線的信號(hào)一致。
DMA是目前芯片中較為常見的功能,主要特點(diǎn)就是不通過CPU而直接與系統(tǒng)內(nèi)存交換數(shù)據(jù)的接口技術(shù);為滿足某些外部設(shè)備特殊的時(shí)序要求,特別是指定頻率的要求,本發(fā)明使用DMA來傳輸數(shù)據(jù),調(diào)節(jié)DMA的參數(shù),控制數(shù)據(jù)流的讀寫速度,實(shí)現(xiàn)外部設(shè)備的頻率要求。
相對于硬件同步總線來說,一個(gè)完整時(shí)鐘信號(hào)需要2個(gè)信號(hào)來模擬完成(一個(gè)數(shù)據(jù)0,一個(gè)數(shù)據(jù)1組合)。因此要在總線上傳輸?shù)拇螖?shù)及數(shù)據(jù)量也相應(yīng)的翻倍。
DMA傳輸?shù)臄?shù)據(jù)需要處理器在數(shù)據(jù)緩沖區(qū)內(nèi)先進(jìn)行填寫,目前主流的處理器都是32位總線,我們在算法上根據(jù)同一時(shí)鐘內(nèi)兩次16位數(shù)據(jù)的相關(guān)性,能夠一次生成32位的數(shù)據(jù)。這樣可以用32位總線的方法來存儲(chǔ)DMA的緩沖區(qū)數(shù)據(jù),這樣一次處理可以存儲(chǔ)2個(gè)模擬總線的數(shù)據(jù),這個(gè)處理能抵消算法產(chǎn)生的2次16位數(shù)據(jù)存儲(chǔ)操作,降低雙倍數(shù)據(jù)量增加導(dǎo)致的耗時(shí)后果,而DMA輸出仍然為16位總線,從而達(dá)到與硬件同步總線同樣的效率。
參照圖2,本實(shí)施例的具體流程如下:
S1:初始化算法變量值;重置算法存儲(chǔ)數(shù)組buff的初始值;
S2:獲取需要傳輸?shù)脑紨?shù)據(jù)的長度Dlen;獲取原始數(shù)據(jù)的起始地址Data[];
S3:判定傳輸參數(shù)是否合法,若是,轉(zhuǎn)到步驟S4;若否,結(jié)束算法運(yùn)行;
S4:設(shè)置步進(jìn)變量i,開始for循環(huán)依次取待傳輸數(shù)據(jù);
S5:判定待傳輸數(shù)據(jù)是否全部處理完,若是,轉(zhuǎn)到步驟S9;若否,轉(zhuǎn)到步驟S6;
S6:將取出的數(shù)據(jù)進(jìn)行以下邏輯運(yùn)算操作:0x80<<8|data[i];0x00<<8|data[i];0x80<<8|data[i];0x00<<8|data[i]的含義為:將10000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,生成一個(gè)新的16位長的數(shù)據(jù)Data1;將00000000B左移8位,將左移8位后的結(jié)果與Data[i]進(jìn)行邏輯或操作,再次生成一個(gè)新的16位長的數(shù)據(jù)Data2;
S7:將步驟S6中的Data1和Data2再次邏輯運(yùn)算拼接成32位數(shù)據(jù):buff[i]=(0x80<<8|data[i])<<16|(0x00<<8|data[i]);
buff[i]=(0x80<<8|data[i])<<16|(0x00<<8|data[i])的含義為:將Data1左移16位,將左移16后的結(jié)果與Data2進(jìn)行邏輯或操作,生成一個(gè)新的32位長的數(shù)據(jù),然后存儲(chǔ)到算法存儲(chǔ)數(shù)組buff中;
S8:步進(jìn)變量加1;返回步驟S5;
S9:配置DAM傳輸參數(shù),啟動(dòng)DAM將buff中生成的數(shù)據(jù)寫入LCM接口或者其他并行接口的寫地址中;
S10:外部設(shè)備接收寫地址中的數(shù)據(jù)。
本發(fā)明通過算法將數(shù)據(jù)進(jìn)行加工改造,控制數(shù)據(jù)流規(guī)律輸出0,1,0,1,0,1,0,1的序列,模擬輸出時(shí)鐘信號(hào),輸出的時(shí)鐘信號(hào)可模擬同步總線驅(qū)動(dòng)外部器件,極大程度上拓展硬件功能接口,能夠外接基于同步總線的外部設(shè)備,成本較低。
本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
說明書中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。