專利名稱:微型計算機的制作方法
背景技術:
發明領域本發明涉及有多個外圍電路的微型計算機。
現有技術微型計算機包括中央處理單元(CPU)和各種外圍電路,比如數據和程序存儲器、輸入/輸出端口和定時器-計數器。微型計算機被劃分成專用和通用模型,其中的專用模型常常叫做ASIC(專用集成電路)。
對于專用微型計算機,它的外圍電路是根據具體應用來設計的,因此能夠獲得良好的處理性能。另一方面,為它新設計的部分需要額外的開發時間,因此開發時間緊的時候,有時候不可能為其中包括微型計算機的裝置及時地開發這樣的微型計算機。
設計通用微型計算機的目的是對它加以廣泛應用,因此微型計算機具有各種功能。但是,這些功能和性能并不總是能夠滿足具體應用中所需要的指標。因此,首先需要選擇滿足所需指標的一種模型。但是很難判斷模型的功能是否滿足所需指標,模型選擇不當可能會在程序的設計過程中需要改變要使用的微型計算機的模型,或者改變應用的指標。不管是哪一種方式,微型計算機的模型選擇不當都會導致應用程序開發的延遲。
通用微型計算機通過多個外圍電路的相互協作能夠實現一定的智能。例如,有一種功能叫做“輸入捕獲”,它是通過定時器-計數器和輸入/輸出端口互相協作來實現的。
這一功能使得每次檢測到外部輸入信號的上升沿或者下降沿的時候,都將定時器的計數值儲存在一個專用寄存器中。這樣,這一功能能夠用于測量外部輸入信號維持高電平或者低電平的時間長度。
下面將參考圖21描述如何測量外部輸入信號的周期,例如其中的定時器工作在4MHz的系統時鐘頻率上,作為外部輸入信號,輸入一個脈沖,它維持1.5微秒的高電平,0.5微秒的低電平。每次外部輸入信號EXT_IN電平上升或者下降的時候,定時器的計數值T都被存入一個專用寄存器R,然后計數值T被復位,接下來定時器再一次開始計數。
除此以外,每次外部輸入信號EXT_IN電平上升或者下降的時候,都發出一個中斷請求。在流程圖如圖22所示,由于外部輸入信號EXT_IN而導致中斷請求的時候所執行的軟件程序中,首先檢查(S801)這個中斷請求是不是由一個外部輸入信號EXT_IN的上升沿引起的。
如果原因是外部輸入信號EXT_IN的一個上升沿(S801中的“對”),就將寄存器R中的值作為周期(以后叫做“低電平周期”)儲存起來,在這一段時間內外部信號EXT_IN保持低電平(S802)。如果不是(S801中的“否”),就將寄存器R中的值作為外部輸入信號EXT_IN維持高電平的周期(以后叫做“高電平周期”)儲存起來(S803)。
在這里,定時器的計數值被反復地寫入同一個寄存器,因此有必要在寄存器被一個新值覆蓋之前保存這個寄存器中的值。在下面討論的實例中,對于外部輸入信號的高電平周期只有0.5微秒的時間用來保存。它們對應于系統時鐘頻率是4MHz的中央處理單元的兩種狀態,在這兩種狀態中,不可能跳到軟件中斷子程序的地址并執行完這個子程序。
在這種情況下,為了能夠進行測量,有必要使用兩個輸入捕獲功能。具體而言,要測量的信號被輸入給兩個輸入/輸出端口,每個都有一個輸入捕獲功能,用兩個定時器來測量兩個時間。下面將通過參考圖23來描述這一點。
在輸入它的外部信號EXT_IN1的每個上升沿或者是下降沿,一個輸入捕獲功能將一個定時器的計數值T1保存在一個寄存器R1中,然后計數值T1復位,定時器又開始計數。在輸入它的外部輸入信號EXT_IN2的每個下降沿,另外一個輸入捕獲功能將另一個定時器的計數值T2存入寄存器R2,然后計數值T2復位,定時器又開始計數。
此外,在外部輸入信號EXT_IN1的每個上升沿或者下降沿,以及在外部輸入信號EXT_IN2的每個下降沿,都發出一個中斷請求。發出中斷請求的時候執行的軟件程序的流程圖在圖24和25中畫出。
因為外部輸入信號EXT_IN1發出中斷請求的時候,如果導致中斷請求的是外部輸入信號EXT_IN1的上升沿(S901中的“對”),就將相應寄存器R1中的值作為低電平周期保存起來(S902)。另一方面,因為外部輸入信號EXT_IN2而發出中斷請求的時候,從對應的寄存器R2的值減去寄存器R1中保存的低電平周期的值得到的值被作為高電平周期保存起來(S1001)。
但是在這種方法中,除了一個外部定時器以外還需要另外一個輸入/輸出端口。除此以外,在專用微型計算機中,來自單個終端的信號可以被饋入不同的電路塊。更加重要的是程序員需要很長的時間來想到這一方法。
即使程序員想到了這一方法,也需要有另外一個有輸入捕獲功能的空閑輸入輸出端口。在采用微型計算機的裝置的開發過程中,在開發微型計算機程序的時候,在多數情況下電路,包括微型計算機的設計都已經確定。
由于這些原因,如果在程序的設計過程中需要改變微型計算機具有特殊功能的輸入/輸出端口的分配,就會影響整個裝置的開發計劃。此外,在選擇微型計算機模型的階段,很難預見對信號進行測量將需要具有這種特殊功能的兩個輸入/輸出端口。
通過這種方式,將通用微型計算機用于包括特殊操作的裝置的時候,會碰到難以預計的困難,它常常會導致裝置的整個開發過程被拖延。
此外,沒有足夠的時間用于開發專用微型計算機的時候,很難判斷通用微型計算機的外圍電路功能是否能夠滿足這個裝置作為最終產品的指標,如同日本專利申請公布號H5-127913所公開的一樣,可以通過使用可編程門陣列來同時開發所需要的外圍電路功能和所需要的程序。
但是,正是因為作為可編程門陣列的基礎的原理,用一個來實現外圍電路功能會使得電路面積比其它情況下更大。此外,事先并不知道所需要的外圍電路功能,因此有必要預留一些門。這樣做比專用微型計算機的成本更高。此外,可編程門陣列的制造需要特殊工藝,因此將它跟其它裝置一起做在單獨一個芯片上需要特殊技術。因此,到目前為止還沒有將微型計算機結合到裝置中這樣的工藝能夠進入實用。
如上所述,專用微型計算機需要很長的開發時間。另一方面,如果采用通用微型計算機,常常很難判斷是否能夠提供滿足裝置指標的外圍電路功能。所以,在程序的開發過程中人們發現通用微型計算機不滿足裝置的指標,因此不可避免地要改變通用微型計算機的模型,或者改變裝置的指標。
即使程序員想到一種方法,通過利用通用微型計算機的有限外圍電路功能能夠滿足這個裝置所要求的指標,不能總是保證只是通過編程來實現,可能需要改變整個裝置的電路。除此以外,程序員需要很長的時間才能想到這樣一個特殊解決方案。在這兩種情況下,裝置的整個開發周期都會發生拖延。
更進一步,在設計裝置的時候,從制造成本的角度來看,在多數情況之下通用微型計算機模型的選擇范圍都是有限的。然而,如果只有用更高價格才能使模型滿足裝置所要求的指標,那么就沒有選擇余地。這樣會導致成本更高。
發明簡述本發明的一個目的是提供具有智能化外圍電路功能的一種微型計算機,比如專用微型計算機而不是通用微型計算機,而不需要在專用微型計算機的開發過程中采用特殊制造技術和工藝,也不需要花費很長的時間。
為了以上目的,本發明提供有多個外圍電路的一種微型計算機,它有一個連接電路,能夠將外圍電路互相連接起來,通過執行一個程序來控制它們。
在這種結構中,通過執行程序利用連接電路將一個一個的基本外圍電路互相連接起來,就能夠實現那些單個基本外圍電路不能實現的智能功能。這樣就能夠象采用通用微型計算機那種情形一樣避免選擇具有冗余功能的模型。此外,只要微型計算機中結合進預計必不可少的基本外圍電路,就沒有必要仔細地設計外圍電路。這樣能夠縮短整個裝置的開發周期。但是除此以外,在專用外圍電路中的微型計算機里,軟件程序的開發需要一個面包板,本發明中的微型計算機允許在調試軟件程序的時候確定外圍電路。這樣做也會縮短開發周期。
簡而言之,本發明中的微型計算機能夠實現智能外圍電路功能,就象專用微型計算機中那樣,而不是通用微型計算機那樣,不需要使用特殊的制造技術和工藝,也不需要在開發專用微型計算機的時候花費很長時間。除此以外,可以在設計軟件程序的時候改變外圍電路,從而提高效率。
附圖簡述通過以下描述,同時參考優選實施方案和附圖,會更加了解本發明的這些和其它目的和特征。在這些附圖中
圖1是采用本發明的微型計算機的一個框圖;圖2說明構成第一個定時器的一個向下計數器;圖3說明構成第二個定時器的一個向下計數器;圖4說明邏輯電路的結構;圖5說明構成輸入寄存器的閂鎖電路;圖6說明構成輸出寄存器的閂鎖電路;圖7說明構成連接電路的一部分選擇器;圖8說明構成連接電路的其它選擇器;圖9說明輸入圖7所示選擇器端子的信號和所選端子的信號的狀態之間的關系;圖10是構造具有預定功能外圍電路的一個程序實例的流程圖;圖11說明通過執行圖10所示程序構造的外圍電路的結構;圖12是控制圖1所示外圍電路的一個實例的流程圖;圖13是控制圖11所示外圍電路另外一個程序實例的流程圖;圖14說明圖11所示外圍電路的工作過程;圖15是構造具有預定功能的外圍電路另外一個程序實例的流程圖;圖16說明通過執行圖15所示程序構造的外圍電路的結構;圖17是控制圖16所示外圍電路一個程序實例的流程圖;圖18是控制圖16所示外圍電路另外一個程序實例的流程圖;圖19是控制圖16所示外圍電路再一個程序實例的流程圖;圖20說明圖16所示外圍電路的工作過程;圖21說明現有技術中測量外部輸入信號的高電平周期和低電平周期的操作實例;圖22是圖21所示操作所需要的程序實例的一個流程圖;圖23是現有技術中測量外部輸入信號的高電平周期和低電平周期的另外一個操作實例;
圖24是圖23所示操作所需程序實例的一個流程圖;和圖25是圖23所示操作所需要的另外一個程序實例的流程圖。
優選實施方案在這以后,將參考附圖來描述本發明的一個實施方案。圖1是采用本發明的微型計算機的一個框圖。在這個圖中,引用數字1代表一個中央處理單元,引用數字2代表一個輸入寄存器,引用數字3代表一個輸出寄存器,引用數字4代表一個連接電路,引用數字5代表第一個定時器,引用數字6代表第二個定時器,引用數字7代表一個邏輯電路,引用數字8代表一條數據總線。
如圖2和圖3所示,屬于外圍電路的第一個定時器5和第二個定時器6中的每一個都包括一個向下計數器。向下計數器按照以下方式工作。
計數值按照時鐘信號同步地下降1(沒有畫出)。計數是在輸入到端子“開始”的信號的上升沿啟動的,在輸入到端子“停止”的信號的上升沿停止的。從端子OUT0~OUT7輸出的8比特信號代表當前計數值。當計數值發生溢出的時候(也就是說當計數值等于00(十六進制)的時候),端子“溢出”的輸出轉變成高電平。在本說明書中,(Hex)表示一個十六進制數。
在輸入端子“復位”信號的上升沿進行復位。具體而言,計數值被設置成等于輸入給端子IN0~IN7的8比特信號代表的值,從端子“溢出”輸出的信號變成低電平。此外,只要輸入端子“復位”的信號維持高電平,就忽略給端子“開始”的輸入(也就是說,即使上升沿出現在端子“開始”的輸入端的時候,也不開始計數)。
在這個實施方案中有一個電路,當第一個定時器5發生溢出的時候它發出一個中斷請求,還有一個電路,當第二個定時器6發生溢出的時候,它也發出一個中斷請求。
如圖4所示,屬于外圍電路基本組成之一的邏輯電路7包括一個三輸入或門701、一個觸發器702、一個反相器703、一個與門704、一個與門705、一個或門706和一個反相器707。
或門701接收輸入信號IN1、IN2和IN3。觸發器702在它的數據輸入端D接收從它的反相端Q’輸出的信號,在它的時鐘信號端CK接收從或門701輸出的信號,在它的復位端R接收輸入信號D_RESET。反相器703接收輸入信號TRG。
與門704接收從或門701輸出的信號,以及從反相器703輸出的信號。與門705從觸發器702的反相端Q’接收輸入信號TRG和輸出信號。
或門706從與門704接收輸出信號,以及從與門705輸出的信號。從或門706輸出的信號作為一個輸出信號OUT1輸出,并且通過反相器707作為一個輸出信號OUT2輸出。
在以上邏輯電路圖7中當輸入信號TRG是低電平的時候,輸出信號OUT1和OUT2反映了從或門701輸出的信號。具體而言,如果有任何輸入信號IN1、IN2和IN3是高電平,輸出信號OUT1就是高電平,輸出信號OUT2是低電平;如果所有輸入信號IN1、IN2和IN3都是高電平,輸出信號OUT1就是低電平,輸出信號OUT2就是高電平。
相反,當輸入信號TRG是高電平的時候,如果輸入信號D_RESET是高電平,輸出信號OUT1就是高電平,輸出信號OUT2是低電平;如果輸入信號D_RESET是低電平,輸出信號OUT1和OUT2就在輸入信號IN1、IN2和IN3中的任何一個從它們都是低電平的狀態轉變成高電平的時候被反相。
如圖5所示,是一個外圍電路的輸入寄存器2包括一個32比特閂鎖電路。輸入寄存器2將32比特的信號INREG0讀入INREG31,按照時鐘信號(沒有畫出)輸入它的端子D0~D31,并且當中央處理單元1準備從預先確定的特定地址讀出的時候從一個地址譯碼器輸出的信號CPU_RD是高電平的時候,從它的輸出端子O0~O31將信號INREG0~INREG31的最新讀出值輸入給數據總線8。具體而言,當信號CPU_RD是高電平的時候,數據總線8上面32比特信號CPU_BUS0~CPU_BUS31的值變成等于輸入寄存器2最新讀出的信號INREG0~INREG31的值。
給輸入存儲器2分配一個地址F00000000(16進制)作為中央處理單元1的存儲器區。當程序中中央處理單元1讀分配的這個地址的時候,信號CPU_RD轉變成高電平。
如圖6所示,是一個外圍電路的輸出寄存器3包括一個32比特的閂鎖電路。中央處理單元1要寫入預先確定的特定地址的時候,如果從地址譯碼器輸出的信號CPU_WR是高電平,輸出寄存器3就按照時鐘信號(沒有畫出)通過它的端子D0~D31讀取數據總線8上面的32比特信號CPU_BUS0~CPU_BUS31,從它的輸出端O0~O31輸出最新讀出的值。從輸出寄存器3的端子O0~O31輸出的32比特信號OUTREG0~OUTREG31被輸入給連接電路4。
給輸出寄存器3分配一個地址F0000004(十六進制),作為中央處理單元1的存儲器區域。當中央處理單元1在程序中向分配的這個地址進行寫入的時候,信號CPU_WR轉變成高電平。當信號CPU_WR是低電平的時候,從輸出寄存器3端子O0~O31輸出的信號OUTREG0~OUTREG31保持不變。
連接電路4包括選擇器401~412,如圖7所示,還包括選擇器413~416,如圖8所示。在每個選擇器401~412中,按照輸入端子S0、S1和S2的信號狀態,選擇端子D0、D1、D2、D3、D4和D5之一,輸入給所選端子的信號從端子OUT輸出。圖9說明輸入給端子的信號和選中的信號的狀態之間的關系。在這個圖中,“1”表示高電平,“0”表示低電平。
但是如果輸入給端子CS的信號是低電平,即是當輸入給端子S0、S1和S2的信號的狀態發生改變的時候,從端子D0、D1、D2、D3、D4和D5中間的選擇保持不變。換句話說,從端子OUT的輸出保持不變。
每個選擇器401~412都在其端子D0、D1、D2、D3、D4和D5分別接收從第一個定時器的端子“溢出”輸出的信號OVERFLOW1、從第二個定時器6的端子“溢出”輸出的信號OVERFLOW2、邏輯電路7的輸出信號OUT1和OUT2以及從微型計算機外面送進來,引起中斷的外部輸入信號EXT_IN/INT。在這里,引起中斷的外部輸入信號表示上升沿和下降沿在電路中導致中斷請求的信號。
選擇器401、402、...、412分別在它們的端子D4接收從輸出寄存器3的端子O16輸出的信號OUTREG16,從它的端子O17輸出的信號OUTREG17,……,以及從它的端子O27輸出的信號OUTREG27。
選擇器401分別在它的端子S0、S1和S2接收數據總線上的信號CPU_BUS0、CPU_BUS1和CPU_BUS2。選擇器402分別在它的端子S0、S1和S2接收數據總線上的信號CPU_BUS3、CPU_BUS4和CPU_BUS5。
選擇器403分別在它的端子S0、S1和S2上接收數據總線8上的輸出信號CPU_BUS6、CPU_BUS7和CPU_BUS8。選擇器404分別在它的端子S0、S1和S2上接收數據總線8上的信號CPU_BUS9、CPU_BUS10和CPU_BUS11。
選擇器405分別在它的端子S0、S1和S2上接收數據總線8上的輸出信號CPU_BUS12、CPU_BUS13和CPU_BUS14。選擇器406分別在它的端子S0、S1和S2上接收數據總線8上的信號CPU_BUS15、CPU_BUS16和CPU_BUS17。
選擇器407分別在它的端子S0、S1和S2上接收數據總線8上的輸出信號CPU_BUS18、CPU_BUS19和CPU_BUS20。選擇器408分別在它的端子S0、S1和S2上接收數據總線8上的信號CPU_BUS21、CPU_BUS22和CPU_BUS23。
選擇器409分別在它的端子S0、S1和S2上接收數據總線8上的輸出信號CPU_BUS24、CPU_BUS25和CPU_BUS26。選擇器410分別在它的端子S0、S1和S2上接收數據總線8上的信號CPU_BUS27、CPU_BUS28和CPU_BUS29。
選擇器411分別在它的端子S0、S1和S2上接收數據總線8上的輸出信號CPU_BUS0、CPU_BUS1和CPU_BUS2。選擇器412分別在它的端子S0、S1和S2上接收數據總線8上的信號CPU_BUS3、CPU_BUS4和CPU_BUS5。
選擇器401~410都在它的端子CS上接收CPU 1地址譯碼器的信號CPU_WR_S1。選擇器411~412都在它的端子CS上接收CPU 1地址譯碼器輸出的信號CPU_WR_S2。
選擇器401~410被分配一個地址F000008(十六進制),作為中央處理單元1的存儲器區域。當程序中中央處理單元1對分配的這個地址進行寫操作的時候,信號CPU_WR_S1轉變成高電平。
選擇器411和412被分配一個地址F00000C(十六進制),作為中央處理單元1的存儲器區域。當程序中中央處理單元1對分配的這個地址進行寫操作的時候,信號CPU_WR_S2轉變成高電平。
從選擇器401的端子OUT輸出的信號被用作信號START1,輸入給第一個定時器5的端子“開始”。從選擇器402的端子OUT輸出的信號被用作信號RESET1,輸入給第一個定時器5的端子“復位”。從選擇器403的端子OUT輸出的信號被用作信號STOP1,輸入給第一個定時器5的端子“停止”。
從選擇器404的端子OUT輸出的信號被用作信號START2,輸入給第二個定時器6的端子“開始”。從選擇器405的端子OUT輸出的信號被用作信號RESET2,輸入給第二個定時器6的端子“復位”。從選擇器406的端子OUT輸出的信號被用作信號STOP2,輸入給第二個定時器6的端子“停止”。
從選擇器407、408、409、410和411的端子OUT輸出的信號分別被用作給邏輯電路7的輸入信號IN1、IN2、IN3、TRG和D_RESET。從選擇器412的端子OUT輸出的信號被用作信號EXT_OUT輸入微型計算機。
每個選擇器413~416都按照輸入其端子S0的信號在端子D1_0、D1_1、……和D1_7的組合跟它的端子D2_0、D2_1、……和D2_7的組合之間選擇和輸出從它的輸出端子O0~O7輸入端子的所選組合的8比特信號。
具體而言,當送給端子S0的信號是低電平的時候,選擇端子的組合D1_0、D1_1、……、和D1_7,當送給端子S0的信號是高電平的時候,選擇它的端子D2_0、D2_1、……、和D2_7的組合。如果輸入端子CS的信號是低電平,即使輸入端子S0的信號的狀態發生改變,對端子的兩個組合的選擇仍然保持不變。
選擇器413和414分別在它們的端子D1_0、D1_1、……、D1_7、D2_0、D2_1、……和D2_7接收從輸出寄存器OUTREG0、OUTREG1、……OUTREG7、OUTREG8、OUTREG9、……和OUTREG15輸出的低16位信號。
選擇器415和416分別在它們的端子D1_0~D1_7接收從第一個定時器5輸出端子OUT0~OUT7輸出的8比特信號DOUT1_0~DOUT1_7,分別在它們的端子D2_0~D2_7接收從第二個定時器6輸出端OUT0~OUT7輸出的信號DOUT2_0~DOUT2_7。
選擇器413、414、415和416分別在它們的端子S0接收數據總線8上面的信號CPU_BUS0、CPU_BUS1、CPU_BUS2和CPU_BUS3。
選擇器413~416都在它們的端子CS接收從中央處理單元1的地址譯碼器輸出的信號CPU_WR_S3。選擇器413~416被分配一個地址F0000010(十六進制)作為中央處理單元1的存儲器區域。當中央處理單元1在程序中對分配的地址進行寫操作的時候,信號CPU_WR_S3轉變成高電平。
從選擇器413的端子O0~O7輸出的信號被用作信號DIN1_0~DIN1_7,輸入給第一個定時器5的端子IN0~IN7。從選擇器414的端子O0~O7輸出的信號被用作信號DIN2_0~DIN2_7,輸入給第二個定時器6的端子IN0~IN7。
從選擇器415的端子O0~O7輸出的信號被用作信號INREG0~INREG7,輸入給輸入寄存器2的端子D0~D7。從選擇器416的端子O0~O7輸出的信號被用作信號INREG8~INREG15,輸入給輸入寄存器2的端子D8~D15。
程序采用32比特的寄存器Reg0~Reg31(沒有畫出)跟數據總線8交換數據。具體而言,當寄存器Reg0中的位是“1”的時候,數據總線8上面的信號CPU_BUS0就是高電平,當寄存器Reg0變成“0”的時候,它就變成低電平。數據總線8上面的信號CPU_BUS0是高電平的時候寄存器Reg0中的值就是“1”,數據總線8上面的信號CPU_BUS0是低電平的時候就是“0”。寄存器Reg1和數據總線8上面的信號CPU_BUS1之間的關系相同,寄存器Reg2和數據總線8上面的信號CPU_BUS2之間的關系也相同,……,寄存器Reg31和數據總線8上面的信號CPU_BUS31也相同。
圖10是一個程序流程圖,這個程序用于構造具有預定功能的外圍電路。首先,按照以下方式設置寄存器Reg0~Reg29Reg0=1,Reg1=1,Reg2=0,Reg3=0,Reg4=0,Reg5=1,Reg6=0,Reg7=1,Reg8=0,Reg9=0,Reg10=1,Reg11=0,Reg12=0,Reg13=0,Reg14=1,Reg15=1,Reg16=1,Reg17=0,Reg18=1,Reg19=0,Reg20=1,Reg21=0,Reg22=0,Reg23=1,Reg24=0,Reg25=0,Reg26=1,Reg27=0,Reg28=0,以及Reg29=1(S101)。
下一步,要訪問的地址在連接電路4的選擇器401~410中設置。具體而言,對地址F000008(十六進制)進行寫入訪問(S102)。這樣使得輸入選擇器401~410端子CS的信號CPU_WR_S1變成高電平,從而切換選擇器401~410選中的信號。
下一步,按照以下方式設置寄存器Reg0~Reg2Reg0=0,Reg1=0,Reg2=1(S103)。接下來,要訪問的地址在連接電路4的選擇器411中設置。具體而言,對地址F00000C(十六進制)進行寫入訪問(S104)。這就使得輸入選擇器411端子CS的信號CPU_WR_S2變成高電平,從而切換選擇器411選中的信號。
作為S101~S104中操作的結果,邏輯電路7的反相器707輸出的信號OUT2、輸出寄存器3的端子O17輸出的信號OUTREG17以及邏輯電路7的或門706輸出的信號OUT1,被分別用作第一個定時器5的端子“開始”的輸入信號START1、端子“復位”的輸入信號RESET1和端子“停止”的輸入信號STOP1。
除此以外,邏輯電路7或門706的輸出信號OUT1、輸出寄存器3端子O20的輸出信號OUTREG20以及邏輯電路7反相器707的輸出信號OUT2被分別用作給第二個定時器6的端子“開始”的輸入信號START2、給端子“復位”的輸入信號RESET2和端子“停止”的輸入信號STOP2。
除此以外,外部輸入信號EXT_IN/INT、輸出寄存器3端子O23的輸出信號OUTREG23和端子O24的輸出信號OUTREG24、端子O25的輸出信號OUTREG25和端子O26的輸出信號OUTREG26被分別用作邏輯電路7或門701的輸入信號IN1、IN2和IN3、反相器703和與門705的輸入信號TRG以及觸發器702端子R的輸入信號D_RESET。
下面按照以下方式來設置寄存器Reg0~Reg3Reg0=0,Reg1=1,Reg2=0,Reg3=1(S105)。接下來將要訪問的地址設置在連接電路4的選擇器413~416中。具體而言,對地址F0000010(十六進制)進行寫入訪問(S106)。這樣就將輸入選擇器413~416的端子CS的信號CPU_WR_S3變成高電平,作為S105和S106中的操作結果,現在將輸入寄存器3的端子O0~O7輸出的信號OUTREG0~OUTREG7用作給第一個定時器5的端子IN0~IN7的輸入信號DIN1_0~DIN1_7,將輸出寄存器3的端子O8~O15輸出的信號OUTREG8~OUTREG15用作給第二個定時器6的端子O8~O15的輸入信號DIN2_0~DIN2_7,將第一個定時器5的端子OUT0~OUT7的輸出信號DOUT1_1~DOUT1_7用作給輸入寄存器2的端子D0~D7的輸入信號INREG0~INREG7,第二個定時器6的端子OUT0~OUT7的輸出信號DOUT2_1~DOUT2~7被用作輸入寄存器2的端子D8~D15的輸入信號INREG8~INREG15。這樣就構成了圖11所示的外圍電路。
下一步將寄存器Reg0~Reg7的值全部設置為“1”,寄存器Reg8~Reg15的值全部設置成“1”,寄存器Reg17的值設置成“1”,寄存器Reg20的值設置成“1“”,寄存器R23的值設置成“0”,寄存器R25的值設置成“0”,寄存器R26的值設置成“1”(S107)。
下一步將要訪問的地址設置在輸出寄存器3中。具體而言,對地址F0000004(十六進制)進行寫入操作(S108)。它使得給輸出寄存器3的輸入信號CPU_WR變成高電平,使輸出寄存器3在數據總線8上讀取信號。
作為S107和S108中進行的操作的結果,在第一個和第二個定時器5和6中,給端子IN0~IN7的輸入全部是高電平,給端子“復位”的輸入是高電平。此外,在邏輯電路7中,或門701的兩個輸入端而不是外部輸入信號EXT_IN都是低電平,給觸發器702的端子R的輸入是高電平,給反相器703的輸入和給與門705的一個輸入是高電平。
這樣,每次外部信號EXT_IN/INT上升的時候,給第一個定時器5的端子“開始”的輸入以及給第二個定時器6的端子“停止”的輸入也上升。此外,每次外部信號EXT_IN/INT下降的時候,給第一個定時器5的端子“停止”的輸入以及給第二個定時器6的端子“開始”的輸入也上升。
但是,由于給第一個定時器5的端子“復位”的輸入以及給第二個定時器6的端子“復位”的輸入都是高電平,第一個和第二個定時器5和6都是復位狀態,因而不會進行計數。
圖12畫出了這個程序的一個流程圖,這個程序用于測量外部輸入信號EXT_IN/INT的高低電平周期。首先將寄存器中Reg17的值設置為“0”,寄存器Reg20中的值設置成“0”,寄存器Reg23中的值設置成“0”,寄存器Reg24中的值設置成“0”,寄存器Reg25中的值設置成“0”,寄存器Reg26中的值設置成“1”(S201)。下一步,要訪問的地址被設置在輸出寄存器3中。具體而言,對地址F0000004(十六進制)進行寫入訪問(S202)。
作為這一操作的結果,在邏輯電路7中,給或門701的兩個輸入而不是外部輸入信號EXT_IN是低電平,給觸發器702端子R的輸入是高電平,給反相器703的輸入和與門705的一個輸入是高電平。此外,對第一個和第二個定時器5和6的端子“復位”的輸入是低電平,這樣第一個和第二個定時器5和6從復位狀態恢復過來。
這樣,第一個定時器5進入一種狀態,它在外部輸入信號EXT_IN/INT的下降沿從計數值FF(十六進制)開始計數,在外部輸入信號EXT_IN/INT的上升沿停止計數。一方面,第二個定時器6進入一種狀態,它在外部輸入信號EXT_IN/INT的上升沿從計數值FF(十六進制)開始計數,在外部輸入信號EXT_IN/INT的下降沿停止計數。
圖13說明開始測量外部輸入信號EXT_IN/INT的高低電平周期以后,在外部輸入信號EXT_IN/INT的上升沿或者下降沿發出中斷請求的時候,要執行的程序的一個流程圖。首先,在輸入寄存器2中設置要訪問的地址。具體而言,對地址F0000000(十六進制)進行讀訪問(S301)。下一步,檢查中斷請求是不是外部信號EXT_IN/INT的上升沿(S302)。
如果在步驟S302中發現一個上升沿(S302中的“對”),就將寄存器Reg0~Reg7中的值保存在執行軟件程序的時候使用的RAM之類中(S303)。接下來,寄存器Reg0~Reg7中的值全部設置成“1”,寄存器Reg17中的值設置成“1”,寄存器Reg20中的值設置成“0”,寄存器Reg23中的值設置成“0”,寄存器Reg24中的值設置成“0”,寄存器Reg25中的值設置成“0”,寄存器Reg26中的值設置成“1”(S304)。
下面在輸出寄存器3中設置要訪問的地址。具體而言,對地址F0000004(十六進制)進行寫入訪問(S305)。接下來將寄存器Reg17中的值設置為“0”(S306)。再將要訪問的地址設置在輸出寄存器3中(S311)。
相反,如果在S302中出現一個上升沿(S302中的“否”),寄存器Reg8~Reg15中的值就被保存到執行軟件程序的時候要使用的RAM之類中(S307)。下一步,寄存器Reg8~Reg15中的值全部被設置成“1”,寄存器Reg17中的值被設置成“0”,寄存器Reg20中的值被設置成“1”,寄存器Reg23中的值被設置成“0”,寄存器Reg24中的值的設置成“0”,寄存器Reg25中的值被設置成“0”,寄存器Reg26中的值的設置成“1”(S308)。
下面將要訪問的地址設置在輸出寄存器3中。具體而言,對地址F0000004(十六進制)進行寫入訪問(S309)。寄存器Reg20中的值被設置成“0”(S310)。要訪問的地址被設置在輸出寄存器3中(S311)。
執行上述程序的時候,第一個定時器5的計數值T1,第二個定時器6的計數值T2,寄存器Reg0~Reg7中的值和寄存器Reg8~Reg15中的值隨著外部輸入信號EXT_IN/INT變化,如圖14所示。在這里假設外部輸入信號EXT_IN/INT的低電平周期是0.5微秒,它的高電平周期是1.5微秒,第一個和第二個定時器5和6工作在時鐘頻率4MHz上。
具體而言,當外部輸入信號EXT_IN/INT上升的時候,第一個定時器5的計數值T1被存入寄存器Reg0~Reg7,然后保存寄存器Reg0~Reg7中的值,接下來暫時讓第一個定時器5復位,使它的計數值T1等于FF(十六進制)。在這里,在外部輸入信號EXT_IN/INT的上升沿,第一個定時器5停止計數,第二個定時器6從計數值FF(十六進制)開始計數。
相反,當外部輸入信號EXT_IN/INT的電平下降的時候,第二個定時器6的計數值T2被存入寄存器Reg8~Reg15,然后保存寄存器Reg8~Reg15中的值,計算第二個定時器6被暫時復位,將它的計數值T2設置成FF(十六進制)。在外部輸入信號EXT_IN/INT的下降沿,第二個定時器6停止計數,第一個定時器5從計數值FF(十六進制)開始計數。
在上面描述的工作過程中,外部輸入信號EXT_IN/INT電平上升的時候保存的值是低電平周期,外部輸入信號EXT_IN/INT電平下降的時候保存的值是高電平周期。
如上所述,在這個實施方案中的微型計算機里,通過執行一個程序將一個一個的基本外圍電路(也就是第一個定時器5、第二個定時器6和邏輯電路7)利用連接電路4互相連接起來,就能夠測量外部輸入信號EXT_IN的高低電平周期。
在這里,用兩個定時器來測量外部輸入信號EXT_IN的高低電平周期,但這兩個定時器是用具有中斷功能的單獨一個輸入端口來控制的。也就是說,不需要多個輸入端口來測量單個信號。
此外,跟前面參考圖21描述的現有技術相比,儲存在寄存器中的測量結果由于處理時間不夠而被下一個測量結果覆蓋的風險較小。從這兩點能夠看出,能夠構造具有智能功能的外圍電路而沒有能夠跟專用微型計算機的外圍電路相比擬的最小冗余。
圖15是構成具有預定功能外圍電路程序流程圖的另外一個實例。首先,按照以下方式設置寄存器Reg0~Reg29Reg0=1,Reg1=1,Reg2=0,Reg3=0,Reg4=0,Reg5=1,Reg6=0,Reg7=0,Reg8=1,Reg9=0,Reg10=0,Reg11=0,Reg12=0,Reg13=0,Reg14=1,Reg15=0,Reg16=0,Reg17=1,Reg18=0,Reg19=0,Reg20=0,Reg21=1,Reg22=0,Reg23=0,Reg24=0,Reg25=0,Reg26=1,Reg27=0,Reg28=0,以及Reg29=1(S401)。
下一步將要訪問的地址設置在連接電路4的選擇器401~410中。具體而言,對地址F0000008(十六進制)進行寫入訪問(S402)。這樣就將輸入選擇器401端子CS的信號CPU_WR_S1變成高電平,切換選擇器401~410選擇的信號。
下一步按照以下方式設置寄存器Reg0~Reg5Reg0=0,Reg1=0,Reg2=1,Reg3=0,Reg4=1,Reg5=0(S403)。接下來在連接電路4的選擇器411和412中設置要訪問的地址。具體而言,對地址F000000C(十六進制)進行寫入訪問(S404)。這就使輸入選擇器411和412端子CS的信號CPU_WR_S2變成高電平,切換選擇器411和412選中的信號。
作為S401~404中操作的結果,邏輯電路7反相器707的輸出信號OUT2和輸出寄存器3端子O17和O18的輸出信號OUTREG17和OUTREG18被分別用作第一個定時器5端子“開始”的輸入信號START1、端子“復位”的輸入信號RESET1和端子“停止”的輸入信號STOP1。
此外,第一個定時器5端子“溢出”的輸出信號OVERFLOW1、輸出寄存器3的端子O20的輸出信號OUTREG20和端子O21的輸出信號OUTREG21被分別用于第二個定時器6端子“開始”的輸入信號START2、端子“復位”的輸入信號RESET2和端子“停止”的輸入信號STOP2。
此外,第一個定時器5端子“溢出”的輸出信號OVERFLOW1、第二個定時器6端子“溢出”的輸出信號OVERFLOW2、輸出寄存器3端子O24的輸出信號OUTREG24、端子O25的輸出信號OUTREG25和端子O26的輸出信號OUTREG26被分別用于邏輯電路7或門701的輸入信號IN1、IN2和IN3、反相器703和與門705的輸入信號TRG以及觸發器702端子R的輸入信號D_RESET。此外,邏輯電路7或門706的輸出信號OUT1被用作外部輸出信號EXT_OUT。
接下來,寄存器Reg0和Reg1被按照以下方式設置Reg0=0和Re0g1=1(S405)。然后,在連接電路4的選擇器413~416中設置要訪問的地址。具體而言,對地址F0000010(十六進制)進行寫入訪問(S406)。這樣就將輸入給選擇器413~416的端子的信號CPU_WR_3變成高電平,切換選擇器413~416選中的信號。
作為S405和S406中的操作結果,輸出寄存器3端子O0~O7的輸出信號OUTREG0~OUTREG7被用作第一個定時器5端子IN0~IN7的輸入信號DIN1_0~DIN1_7,輸出寄存器3端子O8~O15的輸出信號OUTREG8~OUTREG15被作為第二個定時器6端子IN0~IN7的輸入信號DIN2_0~DIN2_7。這樣就構成了圖16所示的外圍電路。
下一步,寄存器Reg0~Reg7的值被設置成06(十六進制),寄存器Reg8~Reg15中的值被設置成02(十六進制),寄存器Reg17中的值被設置成“1”,寄存器Reg18中的值被設置成“0”,寄存器Reg20中的值被設置成“1”,寄存器Reg21中的值被設置成“0”,寄存器Reg24中的值被設置成“0”,寄存器Reg25中的值被設置成“1”,寄存器Reg26中的值被設置成“1”(S407)。
下一步在輸出寄存器3中設置要訪問的地址。具體而言,對地址F0000004(十六進制)進行寫入訪問(S408)。這樣就將輸入寄存器3的輸入信號CPU_WR變成高電平,并且使輸出寄存器3讀取數據總線8上的信號。
作為S407~S408中的操作結果,在它們的端子IN0~IN7分別接收值06(十六進制)和02(十六進制)的第一個和第二個定時器5和6,它們的端子“復位”的輸入變成高電平。此外,在邏輯電路7中,或門701的三個輸入都是低電平,觸發器702端子R的輸入是高電平,反相器703的輸入和與門705的一個輸入都是高電平。于是,第一個和第二個定時器5和6是復位狀態,它們的計數值分別設置在06(十六進制)和02(十六進制)。此外,外部輸出信號EXT_OUT保持高電平。
圖17是一個程序流程圖,這個程序用于開始輸出具有預定高低電平周期的脈沖,作為輸出信號EXT_OUT。首先,將寄存器Reg17中的值設置為“0”,寄存器Reg18中的值設置成“0”,寄存器Reg20中的值設置成“0”,寄存器Reg21中的值設置成“0”,寄存器Reg24中的值設置成“1”,寄存器Reg25中的值設置成“1”,寄存器Reg26中的值設置成“0”(S501)。
下一步在輸出寄存器3中設置要訪問的地址。具體而言,對地址F0000004(十六進制)進行寫入訪問(S502)。接下來,將寄存器Reg24中的值設置成“0”(S503)。然后在輸出寄存器3中設置要訪問的地址(S504)。
作為這些操作的結果,第一個和第二個定時器5和6端子“復位”的輸入被反相成低電平,這樣第一個和第二個定時器5和6從復位狀態恢復過來。此外,在邏輯電路7中,給或門701的一個輸入被翻轉成高電平,然后返回低電平,另外觸發器702端子R的輸入被翻轉成低電平。這樣,外部輸出信號EXT_OUT被翻轉成低電平。另外,第一個定時器5端子“開始”的輸入被翻轉成高電平,這樣就使得第一個定時器5從計數值06(十六進制)開始計數。
在那以后,第一個定時器5的計數值發生溢出的時候,第一個定時器5端子“溢出”的輸出翻轉成高電平,第二個定時器6端子“開始”的輸入和邏輯電路7或門701的一個輸入翻轉成高電平。這樣,第二個定時器6從計數值02(十六進制)開始計數。另外,外部輸出信號EXT_OUT翻轉成高電平,第一個定時器5的端子“開始”的輸入翻轉成低電平。
第一個定時器5的溢出會導致中斷請求。出現中斷請求的時候,執行流程圖如圖18所示的程序。首先,寄存器Reg0~Reg7中的值被設置成04(十六進制),寄存器Reg17中的值被設置成“1”,寄存器Reg18中的值被設置成“0”,寄存器Reg20中的值被設置成“0”,寄存器Reg21中的值被設置成“0”,寄存器Reg24中的值被設置成“0”,寄存器Reg25中的值被設置成“1”,寄存器Reg26中的值被設置成“01”(S601)。
下一步,在輸出寄存器3中設置要訪問的地址。具體而言,對地址F0000004(十六進制)進行寫入訪問(S602)。下一步,寄存器Reg17中的值被設置成“0”(S603)。接下來,在輸出寄存器3中設置要訪問的地址(S604)。
作為這些操作的結果,在第一個定時器5中,將輸入給端子IN0~IN7的值保持在04(十六進制),端子“復位”的輸入變成高電平然后又變成低電平。這樣,第一個定時器5暫時復位,于是它的計數值被設置成04(十六進制)。另外,第一個定時器5的端子“溢出”的輸出被翻轉為低電平,這樣就將邏輯電路7或門701的所有三個輸入變成低電平。
在那以后,當第二個定時器6的計數值發生溢出的時候,第二個定時器6端子“溢出”的輸出翻轉成高電平,邏輯電路7或門701的一個輸入翻轉成高電平。結果,外部輸出信號EXT_OUT翻轉成低電平。另外,第一個定時器5端子“開始”的輸入翻轉成高電平,這樣就使得第一個定時器5從計數值04(十六進制)開始計數。
第二個定時器6的溢出導致一個中斷請求。發生中斷請求的時候,執行流程圖如圖19所示的程序。首先,寄存器Reg8~Reg15中的值被設置成0A(十六進制),寄存器Reg17中的值被設置成“0”,寄存器Reg18中的值被設置成“0”,寄存器Reg20中的值被設置成“1”,寄存器Reg21中的值被設置成“0”,寄存器Reg24中的值被設置成“0”,寄存器Reg25中的值被設置成“1”,寄存器Reg26中的值被設置成“0”(S701)。
接下來,在輸出寄存器3中設置要訪問的地址。具體而言,對地址F0000004(十六進制)進行寫入訪問(S702)。下一步將寄存器Reg20中的值設置成“0”(S703)。在輸出寄存器3中設置要訪問的地址(S704)。
作為這些操作的結果,在第二個定時器6中,將輸入給端子IN0~IN7的值保持為0A(十六進制),端子“復位”的輸入變成高電平,然后又變回低電平。這樣,第二個定時器6暫時復位,使它的計數值被設置成0A(十六進制)。另外,第二個定時器6端子“溢出”的輸出翻轉成低電平,這樣就將邏輯電路7或門701的所有三個輸入變成低電平。
執行上述程序的時候,第一個定時器5的計數值T1,第二個定時器6的計數值T2,寄存器Reg0~Reg7的值,寄存器Reg8~Reg15的值,外部輸出信號EXT_OUT按照圖20所示的方式改變。在這里假設第一個和第二個定時器5和6工作在時鐘頻率4MHz上。
首先,在剛剛執行圖15所示程序的初始狀態中,外部輸出信號EXT_OUT保持高電平。此外,第一個和第二個定時器是復位狀態,它們的計數值分別設置在06(十六進制)和02(十六進制)。執行圖17所示的程序的時候,見圖20中的字母“A”,外部輸出信號EXT_OUT翻轉成低電平,第一個定時器5從計數值06(十六進制)開始計數。
1.5微秒以后,第一個定時器5發生溢出。這樣,執行圖18所示的程序,結果,如圖20中的字母“B”所示,外部輸出信號EXT_OUT翻轉成高電平。此外,第二個定時器6從計數值02(十六進制)開始計數。另外,第一個定時器5復位,它的計數值設置為04(十六進制)。
0.5微秒以后,第二個定時器6發生溢出。這樣,執行圖19所示的程序,結果,如同圖20中的字母“C”所示,外部輸出信號EXT_OUT翻轉成低電平。此外,第一個定時器5從計數值04(十六進制)開始計數。另外,第二個定時器6復位,它的計數值設置為0A(十六進制)。
1.0微秒以后,第一個定時器5發生溢出。于是執行圖18所示的程序,結果,如同圖20中的字母“D”所示,外部輸出信號EXT_OUT翻轉成高電平。此外,第二個定時器6從計數值0A(十六進制)開始計數。另外,第一個定時器5復位,它的計數值被設置為04(十六進制)。
2.5微秒以后,第二個定時器6發生溢出。于是執行圖19所示的程序,結果,如同圖20中的字母“E”所示,外部輸出信號EXT_OUT翻轉成低電平。此外,第一個定時器5從計數值04(十六進制)開始計數。另外,第二個定時器6復位,它的計數值設置為0A(十六進制)。
如上所述,在這個實施方案中的微型計算機里,通過執行一個程序用連接電路4將一個一個的基本外圍電路(也就是第一個定時器5、第二個定時器6和邏輯電路7)連接起來,就能夠產生具有預定高低電平周期的脈沖作為外部輸出信號EXT_OUT。
在這個實施方案中,提供了基本外圍電路第一個定時器5、第二個定時器6和邏輯電路7。但是,也可以用其它的通用外圍電路替換它們,或者添加其它外圍電路。除此以外,還可以改變從外圍電路讀/寫數據的電路的個數、比特長度、地址轉換形式等。更進一步,也可以改變通過利用連接電路從外圍電路選擇輸入/輸出,例如輸入/輸出端子的個數和比例,地址變換的形式,比特組等等。
權利要求
1.一種有多個外圍電路的微型計算機,包括一個連接電路,它能夠將多個外圍電路互相連接起來,通過執行一個程序來控制。
2.權利要求1的微型計算機,其中的連接電路包括一個選擇器,從多個輸入中選擇一個,然后按照程序給出的數據輸出選中的輸入。
3.權利要求1的微型計算機,其中通過執行程序將數據輸入寫入外圍電路的電路是作為外圍電路之一提供的。
4.權利要求1的微型計算機,其中通過執行程序從外圍電路讀取數據輸出的電路是作為外圍電路之一提供的。
5.權利要求1的微型計算機,其中從微型計算機外面輸入信號的電路是作為外圍電路之一提供的。
6.權利要求1的微型計算機,其中將微型計算機內部產生的信號輸出給外界的電路是作為外圍電路之一提供的。
7.權利要求1的微型計算機,還包括通過利用連接電路控制多個外圍電路之間的互相連接,來實現預先確定的外圍電路功能的裝置。
全文摘要
包括多個外圍電路的一種微型計算機有一個連接電路,它能夠通過執行一個程序來控制這些外圍電路的互連。這樣做能夠實現智能外圍電路功能,比如跟專用微型計算機而不是通用微型計算機有關的那些,而不需要特殊制造技術或者工藝,或者花費很長的時間來開發專用微型計算機。
文檔編號G06F15/78GK1362674SQ01143298
公開日2002年8月7日 申請日期2001年12月26日 優先權日2000年12月26日
發明者后呂忠廣 申請人:夏普公司