用CPLD實(shí)現(xiàn)DSP2407A與S3C4480的通信
在現(xiàn)代汽車(chē)電子中,一般有多個(gè)微控制器共同協(xié)調(diào)工作。dsp控制器采用哈佛結(jié)構(gòu),運(yùn)算速度快,所以在汽車(chē)電子中廣泛采用dsp芯片來(lái)實(shí)現(xiàn)汽車(chē)動(dòng)力系統(tǒng)的控制。arm是一種32位微控制器,有豐富的外擴(kuò)接口,因此在汽車(chē)電子中一般用arm來(lái)實(shí)現(xiàn)大容最的數(shù)據(jù)存儲(chǔ)和人機(jī)交互或gps全球定位系統(tǒng),故在dsp和arm之間需要進(jìn)行數(shù)據(jù)交換。
cpld(complex programmable logic device)是一種復(fù)雜的用戶(hù)可編程邏輯器件,由于采用硬件可編程技術(shù),從而使沒(méi)計(jì)硬件電路也像設(shè)計(jì)軟件一樣方便。dsp2407a是t1公司設(shè)計(jì)的一款專(zhuān)為滿足大范圍的數(shù)字電動(dòng)機(jī)控制應(yīng)用的微控制器。s3c4480是三星公司專(zhuān)為手持設(shè)備設(shè)計(jì)的高性?xún)r(jià)比的微榨制器。本設(shè)計(jì)以xilinx公司的xc95108為例,通過(guò)在cpld中開(kāi)辟2塊獨(dú)立的sram區(qū)域(各1字節(jié))來(lái)實(shí)現(xiàn)dsp2407a與s3c4480的并行通信。采用這種通信方式,數(shù)據(jù)傳輸準(zhǔn)確、高速,基本可以滿足dsp2407a與s3c4480總線接口實(shí)時(shí)通信的要求,從而將整車(chē)動(dòng)力控制和人機(jī)交互有機(jī)地統(tǒng)一起來(lái)。
1 整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
dsp2407a負(fù)責(zé)采集汽車(chē)所有的數(shù)據(jù),再將數(shù)據(jù)通過(guò)cpld發(fā)給s3c44b0進(jìn)行數(shù)據(jù)存儲(chǔ)和人機(jī)交互。有時(shí)s3c4480要接收觸摸屏命令,命令也通過(guò)cpld發(fā)給dsp2407a控制器,從而控制整臺(tái)汽車(chē)的動(dòng)作。對(duì)dsp2407a,要及時(shí)響應(yīng)由s3c44b0發(fā)過(guò)來(lái)的命令;而對(duì)于s3c4480,要隨時(shí)接收dsp2407a送來(lái)的數(shù)據(jù),這樣,雙方通信的實(shí)時(shí)性就要很強(qiáng)。因此在系統(tǒng)設(shè)計(jì)中,dsp2407a用中斷方式接收數(shù)據(jù),s3c44bo用查詢(xún)方式接收數(shù)據(jù)。
在dsp2407a中,[do~d7]是數(shù)據(jù)線,[a15~a12]是地址線,is是i/0空間選通引腳,當(dāng)訪問(wèn)外部的存儲(chǔ)器或i/o空間時(shí)為低電平。we是寫(xiě)使能,rd是讀使能。iopc7足通用i/o引腳,用來(lái)判斷dsp2407a是否可以往cpld寫(xiě)數(shù)據(jù)。當(dāng)iopc7為低電平時(shí),代表dsp2407a可以往cpld中寫(xiě)數(shù)據(jù);若為高電平,則表示cpld中已有數(shù)據(jù),這時(shí)dsp2407a不能往cpld中寫(xiě)數(shù)據(jù)。xint1是外部中斷,用來(lái)通知dsp2407a準(zhǔn)備讀取cpld中的數(shù)據(jù)。
在cpld中,用l片xc95l08來(lái)實(shí)現(xiàn)。xc95108共有108個(gè)宏單元,有足夠的空間來(lái)實(shí)現(xiàn)2個(gè)8位的sram區(qū);主要用來(lái)實(shí)現(xiàn)dsp2407a和s3c44b0之間的數(shù)據(jù)交換,沒(méi)置dsp2407a和s3c44b0讀/寫(xiě)控制的狀態(tài)位。在s3c44b0中’[d0~d7]是數(shù)據(jù)線,ngcsl是芯片選擇信號(hào),當(dāng)存儲(chǔ)器地址在相應(yīng)段的地址區(qū)域時(shí)芯片被激活。nwe是寫(xiě)允許信號(hào),noe是讀允許信號(hào)。iopf0是通用i/o口,用來(lái)監(jiān)視可否從cpld中讀取數(shù)據(jù):當(dāng)它為高電平時(shí),代表cpld中有數(shù)據(jù),可以讀取數(shù)據(jù);當(dāng)它為低電平時(shí)。表示cpld中無(wú)數(shù)據(jù)可讀取。iopf1是通用i/o口,用來(lái)監(jiān)視可否向cpld中寫(xiě)數(shù)據(jù):當(dāng)它為高電平時(shí),代表cpld中無(wú)數(shù)據(jù),可以向cpld中寫(xiě)數(shù)據(jù);當(dāng)它為低電平時(shí),代表cpld中已有數(shù)據(jù),s3c44b0不能向cpld中寫(xiě)數(shù)據(jù)。系統(tǒng)結(jié)構(gòu)如圖1所示。
2 cpld的設(shè)計(jì)
采用xilinx ise8.1為設(shè)計(jì)工具,用國(guó)際上通用的vhdl語(yǔ)言來(lái)編寫(xiě)源程序。
2.1 8位數(shù)據(jù)從dsp中傳送到arm中
當(dāng)[a15~a12]是1100時(shí),dsp2407a開(kāi)始向cpld中寫(xiě)數(shù)據(jù),并置dspsign_write和armsign_read為1;表示cpld中已經(jīng)有數(shù)據(jù)了,通知s3c4480可以讀取數(shù)據(jù)和dsp2407a暫時(shí)不能向cpld中寫(xiě)數(shù)據(jù);同時(shí)將數(shù)據(jù)寫(xiě)入鎖存器sraml中。
當(dāng)arm發(fā)出讀取數(shù)據(jù)信號(hào),開(kāi)始將數(shù)據(jù)從sraml中讀出,并且置dspsign_write和armsign_read為0時(shí),表示cpld中沒(méi)有數(shù)據(jù)了,dsp2407a可以向cpld中重新寫(xiě)數(shù)據(jù)。
2.2 8位數(shù)據(jù)從83ca480中傳送到dsp2407a中
當(dāng)s3c4480向cpld寫(xiě)數(shù)據(jù)時(shí),將數(shù)據(jù)寫(xiě)入到鎖存器sram2中,同時(shí)置dsp_int為0,通知dsp2407a產(chǎn)生一個(gè)外部中斷,可以從cpld中取數(shù)據(jù);置armsign_write為0,表示cpld中已有數(shù)據(jù),s3c4480不能再向cpld中寫(xiě)數(shù)據(jù)。
當(dāng)[a15~12]是1101時(shí),dsp2407a向cpld中發(fā)出一個(gè)讀取信號(hào),數(shù)據(jù)從鎖存器sram2傳送給dsp2407a中,并且置dsp_int為1,armsign_write為l,表示數(shù)據(jù)已被dsp2407a讀走,s3c4480可以繼續(xù)向cpld中寫(xiě)數(shù)據(jù)。
3 s3c4480和dsp2407a通信軟件設(shè)計(jì)
在本程序中,dsp2407a采用中斷方式接收數(shù)據(jù),s3c4480采用查詢(xún)端口方式接收數(shù)據(jù)。
(1)dsp2407a程序
(2)s3c44b0程序