應廣單片機PADAUK開發環境V0.81版本是一個專為PADAUK系列微控制器設計的集成開發環境(IDE),適用于嵌入式系統開發者
PADAUK單片機,作為應廣科技(Winbond Electronics)旗下的一款重要產品,確實在電子行業中占據了重要位置,尤其是在那些對成本、能效和可靠性有較高要求的領域。下面是對PADAUK單片機及其開發環境更詳細的介紹:
應廣科技PADAUK單片機特點
- 高效能與低功耗:PADAUK單片機設計時就考慮到了在保持高性能的同時降低功耗,這對于延長電池壽命、減少能源消耗具有重要意義,特別是在便攜式設備和電池供電的應用中。
- 成本效益:相較于其他品牌的同類產品,PADAUK單片機以其合理的價格提供了豐富的功能和較高的性能,使得它們在價格敏感型市場(如消費電子產品)中非常受歡迎。
- 廣泛應用:由于上述特點,PADAUK單片機被廣泛應用于智能家居(如智能門鎖、環境監測)、工業控制(如自動化生產線、電機控制)、汽車電子(如車載系統、傳感器接口)等多個領域。
- 靈活性和可擴展性:PADAUK單片機系列提供了多種型號,每種型號都有其特定的功能集和性能參數,從而能夠滿足不同應用場景的需求。
應廣科技PADAUK開發環境
PADAUK的開發環境是一個集成了多種開發工具的軟件套件,旨在幫助開發者高效地開發針對PADAUK單片機的應用程序。該環境通常包括以下幾個核心組件:
- 編譯器:將開發者編寫的源代碼(通常是C或C++語言)轉換為目標單片機可執行的機器代碼。PADAUK的編譯器經過優化,以確保生成的代碼既高效又緊湊。
- 調試器:允許開發者在單片機上運行程序時暫停、單步執行、查看和修改內存和寄存器內容,從而定位和解決程序中的錯誤。PADAUK的調試器通常與IDE(集成開發環境)緊密集成,提供直觀的調試界面。
- 模擬器:在沒有實際硬件的情況下,模擬單片機運行程序的工具。這對于快速原型設計和初步測試非常有用。
- 項目管理功能:幫助開發者組織和管理項目文件、設置編譯選項、跟蹤更改歷史等。這些功能有助于提高開發效率并降低出錯率。
- 文檔和示例代碼:提供詳細的開發文檔和豐富的示例代碼,幫助開發者快速上手并理解如何使用PADAUK單片機的各種功能。
總之,PADAUK單片機及其開發環境為開發者提供了一個強大而靈活的平臺,用于創建高效、可靠且成本效益高的電子應用程序。
應廣單片機PADAUK開發環境V0.81版本是一個專為PADAUK系列微控制器設計的集成開發環境(IDE),適用于嵌入式系統開發者
應廣單片機燒錄器軟件界面
MCU_IDE_0.81.exe 文件很可能是這個開發環境的安裝程序。運行這個文件,用戶可以安裝PADAUK V0.81版本的開發環境,然后開始創建和管理他們的項目。IDE中的編譯器是至關重要的,因為它將程序員用高級語言編寫的源代碼轉化為單片機可以執行的機器碼。這個特定版本的編譯器可能具有特定的語法特性、庫函數或者優化選項,以適應當時芯片的特性和需求。
在使用這個開發環境時,開發者可以利用其內建的調試工具來定位和修復代碼中的錯誤,這通常包括斷點設置、變量查看、步進執行等功能。此外,IDE可能還支持代碼編輯器的語法高亮、自動完成等提高開發效率的特性。
應廣PADAUK開發環境V0.81版本是一個專門為PADAUK微控制器設計的集成開發環境,包含了一個編譯器和其他必要的開發工具。這個版本的備份對于那些需要對老款PADAUK芯片進行維護和開發的工程師來說是寶貴的資源,能夠幫助他們繼續支持和更新現有項目,而不受官方最新版本變動的影響。
1. FPPA 說明: FPPA 為 IC 的一個執行核心。依不同系列 IC,可分為多核、雙核、單雙核、單核。 2. FPPA 指令執行速度:
PADAUK IC 分類 | FPPA 執行速度 | 代表型號 |
---|---|---|
多 核 | 依 PMODE 指令設定 | PDK8xxx |
雙 核 | System Clock / 2 | P2xxx |
單 核 | System Clock | PMC1xx |
單雙核 | 由 Code Option 決定單/雙核 | PMC2xx |
IHRC (ILRC/EOSC) 通過 CLKMD 緩存器設定,輸出 System Clock; System Clock 經由上表的設定,輸出 FPPA Clock。 大部份指令只須要一個 FPPA Clock 就可以完成,底下是不為 1T 的指令。
FPPA 數目 | 2 T 指令 | 2T/1T 指令(當 Skip Next 發生時為 2T) |
---|---|---|
雙核以上 | IDXM, PUSHW, POPW, LDTABx | --- |
單 核 | GOTO, CALL, IDXM, PCADD, RETx | CEQSN, CNEQSN, T0SN, T1SN, IZSN, DZSN |
3. FPPEN: 雙核以上的 IC 皆有一個 FPPEN 緩存器。FPPEN 控制著每一個 FPPA 的執行與停止。 預設為 FPPA0 是執行,其他 FPPA 為停止。 此一緩存器的設定不影響每個 FPPA 執行的速度。
緩存器介紹
1). 一般 IO 架構圖:
一般 IO 輸出入表:(以 PA 為例)
PAC.x | PA.x | PAPH.x | |
---|---|---|---|
Output High | 1 | 1 | X |
Output Low | 1 | 0 | X |
Input + Pull High | 0 | X | 1 |
Input | 0 | X | 0 |
PAC.x PA.x PAPH.x Output High 1 1 X Output Low 1 0 X Input + Pull High 0 X 1 Input 0 X 0
Pull High 在 Output Low 時,是自動被關閉的。
至于 Output High 時,有無 Pull High,影響不大。
(3). 簡易 IO 語法,請參考如下范例:
$ PA.0 Out, High; // PA.0 輸出 High
$ PA.1 Out, Low, In; // PA.1 輸出 Low 后,再切為 Input
$ PA.2 In, Pull; // PA.2 輸入 并 Pull High
$ PA.3 NoPull; // PA.3 的 Pull High 關掉
【一般注意事項】
(1). 未使用的 IO 腳:
如果 IO 腳沒有使用,請將它設為固定準位,如:
Output High 或 Output Low 或 Input + Pull High 或 模擬輸入腳。
如 IO 腳只能當作單純 Input 腳 (如有些型號的 PA5),請將它接到 VDD 或 GND。
(2). Pull High 的注意事項:
一般在 5V 時,Pull High 電阻約在 80K 附近,
不同的 IC、電壓、溫度,都會使 Pull High 電阻不同,
如果你想利用它來做一般按鍵的 Pull High,是足夠的,
但如果作通訊用的 Pull High (如 I2C 接口),卻是不行的。
很多系列的 PAPH、PBPH 是 Write Only,所以你不可以對它們作
SET0、SET1、SWAPC、TOG、XOR 指令。
因為以上指令的運作原理,是先讀回 IO 的值,然后作
AND(SET0) / OR(SET1) / MOV(SWAPC) / XOR(TOG) 運算,
等設定相對應的 BIT 后,再整個 Byte 寫回 IO。
那既然 PAPH、PBPH 是 Write Only,所以,就無法讀回 IO 的值,也就無法使用了。
(3). Open Drain 的注意事項:
并不是所有系列都支持 Open Drain Mode,它可以被 I/O 的三態取代。
若 IO 口設為 Open Drain,當輸出為 Open 時,
從 IO 口讀回的值,將是 1,而不是 Input 的值。
如果你想作 I2C 的傳輸,建議你可從 Code Generate 中得到 I2C 的 Sample Code。
不過在 Sample Code 中,只用輸出/輸入切換完成 I2C 的傳輸,而不使用 Open Drain。
(4). 過電壓的輸入保護:
如果你的 IO 輸入口,有高于 VCC 的電壓輸入,而又無法避免時,
請在 IO 口串連上一個電阻。
建議的電阻值為: 電壓差(Volt.) × 100KΩ。
以下為例,VCC=5V,外部有一個 15V 的電源訊號到 IO 口,所以需接保護電阻:
電壓差 (15V - 5V = 10V) × 100KΩ = 1MΩ 電阻。
(5). IO 的輸入阻抗有多大 ?
由于一般三用電表只能量測到 20 M 的電阻,所以 IO 的輸入阻抗,大到無法量測。
【共享其他功能】
(1). IO 與 Reset 共享時的注意事項:
在 IO 口中的 PA.5,并不存在 Pull High 的功能,也無法 Drive High。
當 PA.5 為輸入腳時,如果沒有使用,建議接到 VDD 或 GND。
只有 PAC.5 = 0 (Input) 時,才可以從 PA.5 讀回輸入腳,
當 PAC.5 = 1 (Output) 時,是無法讀回輸入腳。
我們可以利用切換 CLKMD.0,使 PA.5 成為 IC 的外界重置訊號源。
SET0 CLKMD.0 // 設定 PA5 是輸入腳,這是系統默認值。
SET1 CLKMD.0 // 設定 PA5 是外界的重置訊號源。
附注: (1): 至于其它的 IO 口,都有輸出入切換與選擇 Pull High 的功能。
(2): 有些系列的 IC (如 P234/..),增加了 PA5 Output Low 的功能。
(2). IO 與 External Crystal 共享時的注意事項:
當硬件的 EOSCR.7 設為 1 時,IO 口的 PA.6 / PA.7 會用來起振 Crystal。
為了兼容性起見,使用 Crystal 時,需設定 PA.6 / PA.7 為 Input + No Pull High。
請參考范例 【PDK82系列 & Crystal】。
【PDK22系列 & Crystal】。
【P234 / P201A 系列 & Crystal】。
在使用 ICE 時,請注意版子上 SW3 的切換。
在使用 PA.6 / PA.7 作一般 I/O 口時,請將版子上的 SW3 切為 ON。
在使用 Crystal 時,請將版子上的 SW3 切為 Off,以隔離外部訊號的干擾。
(3). IO 與 ADC 共享時的注意事項:
當你將 IO 用于 ADC 的轉換時,請記得要設為 輸入狀態 與 致能模擬輸入腳。
( ADCDI / PBDIDR / … 的功能主要在切斷輸入端的耗電,使 ADC 的準確度提升)。
范例: 將 PB 的 7~4 設成 AD 輸入端,其余為輸出端。
PBC = 0x0F; // PB 的 7~4 設為輸入狀態。
ADCDI = 0xF0; // (a) 切斷 PB 的 7~4 的輸入端的耗電。
或
PBDIDR = 0xF0; // (b) 切斷 PB 的 7~4 的輸入端的耗電。
(附注: 由于不同系列 IC,造成同一功能有(a)(b)不同名稱,十分抱歉。)
【SET0/1 IO.bit 的注意事項】
當對 IO 口作 SET0/1、SWAPC、TOG、XOR 指令,運作的原理,是先讀回 IO 口的值,
然后作 AND(SET0) / OR(SET1) / MOV(SWAPC) / XOR(TOG) 運算,等設定相對應的 BIT 后,
再整個 Byte 寫回 IO 口。
以下為范例:
PA.0 = 0; // (*1) PA.0 的 Data = 0;
…
PAC.0 = 0; // (*2) PA.0 -> Input Mode
…
… // (*3) PA.0 的外界訊號為 High or Low ??
…
PA.1 = 0; // (*4) 也影響了 PA.0 的 Data
…
PAC.0 = 1; // (*5) PA.0 -> Output High or Low ??
(*1) 一開始雖然設定 PA.0 的 Data = 0,
(*2) 但只要中途 PAC.0 改設成 Input Mode,
(*3) 而且 PA.0 的 Pin 因外界訊號影響,而成為 High,
(*4) 只要 PA.1 = 0 的指令被執行時,
PA 先被讀回,數值為 0Bxxxx_xxx1,
作 AND Bit 1 運算,動作為 ( &= 0B1111_1101 ),
最后寫回 PA (Data Register) 為 0Bxxxx_xx01,
所以,PA.1 的 Data = 0,PA.0 的 Data = 1,
(*5) 當 PAC.0 = 1 又設回 Output Mode 時,
PA.0 將意外成為輸出 High (Data = 1)。
這種現象在大部份的 MCU 皆存在,一般要將 IO 口從 Input 改為 Output High / Low,
都是先設定 PA (Data Register),再改變 PAC (Control Register)。
PAC.0 = 0; // PA.0 -> Input Mode
…
PA.0 = 0; PAC.0 = 1; // PA.0 -> Output Low
不過在 FPPA 中,須注意有以下例外。如下例,FPPA0 使用 PA0,FPPA1 使用 PA1,
假設 PA0 為 Input Mode,且因外界訊號影響而為 High。
而此時,你想將 PA.0 設為 Output Low。不過 FPPA1 正好也在設定 PA1。
時序 FPPA0 FPPA1
1 SET0 PA.0
2 TOG PA.1
3 SET1 PAC.0
FPPA0 原以為在 時序 1 時將 PA.0 的 Data 設為 0,
結果 時序 2 時,FPPA1 的 TOG 指令,讓 PA.0 的 Data 又更新為 1,
結果 時序 3 時,PA.0 輸出為 High 了。
如果改成如下程序:
時序 FPPA0 FPPA1
1 TOG PA.1
2 SET1 PAC.0
3 …
4 SET0 PA.0
此時 PA.0 正確的輸出為 Low;但在 時序 2 時,卻不知 PA.0 的 Data 值為何,
所以在時序 2 ~ 4 時,可能輸出一個短暫的 High Pulse。
也有人改寫成如下程序:
時序 FPPA0 FPPA1
1 …
2 SET0 PA.0
3 TOG PA.1
4 SET1 PAC.0
5 …
6 SET0 PA.0
FPPA0 在 時序 2 時,初始了 PA.0 的 Data,
所以大部份的機率,PA.0 都會正確的從 Input 轉成 Output Low;
但是如果在 時序 3 時,FPPA1 正好執行 SET0/1、TOG… 的指令,
還是有可能使 PA.0 在 時序 4 ~ 6 時,輸出一個短暫的 High Pulse。
所以,如果你有可能多個 FPPA 共享一個 IO 口,并且你要作 Input/Output 切換,記?。?br />
先設定 Control Register,再設定 Data Register。
在實際應用的例子上,I2C 的 Data Pin,是屬于 In/Out 切換的模式,可不要忘記這規則。
以下為實際范例,假設你有一個 FPPA 須要對 PA 的兩個 IO 腳要作 In / Out 切換:
BIT pin_IO_S0 : PA.0;
BIT pin_IO_S1 : PA.1;
(a) 如果其它 FPPA 不會對 PA 有 SET0/1、SWAPC、TOG、XOR 等指令,程序可如下撰寫:
$ pin_IO_S0 IN; // 設定為 Input
$ pin_IO_S1 IN;
…
$ pin_IO_S0 LOW, OUT; // 設定為 Output Low
$ pin_IO_S1 HIGH, OUT; // 設定為 Output High
(b) 如果其它 FPPA 也會對 PA 有 SET0/1、SWAPC、TOG、XOR 等指令,程序可如下撰寫:
$ pin_IO_S0 IN; // 設定為 Input
$ pin_IO_S1 IN;
…
$ pin_IO_S0 LOW, OUT, LOW; // 設定為 Output Low
$ pin_IO_S1 HIGH, OUT, HIGH;// 設定為 Output High
總結來說,最建議的寫法,是如上的紅色范例最好。
【IO共享的注意事項】
當不同的 FPPA,共享同一個 IO 口時,總會遇到許多困擾。
除了共享單一 Pin,可用 SET0/1 IO.bit 解決外,
對于同一個 IO 口的多個 Pin 要同時被設定,就得用設立臨界區的技巧來解決。
BIT Enable : GDIO.0;
void Get_Enable (void)
{ // 要更改 IO 前,須先進入循環,且等到 CF == 1 才可離開。
CF = 0;
do
{ // SWAPC => 在一個指令周期內,作完
swapc Enable; // CF = Enable,Enable = 0。
} while (! CF); // if (CF == 1) then can return
}
void FPPA0 (void)
{
// … // 程序一開始,
Enable = 1; // 須先初始 致能旗標 = 1;
// …
{
Get_Enable (); // 進入臨界區后,
PA = xxx; // 方可更改 IO,
… // 離開臨界區前,
Enable = 1; // 歸還 致能旗標。
}
// …
}
void FPPA1 (void)
{
// …
{
Get_Enable (); // 進入臨界區時,
PA = xxx; // 才可更改 IO,
… // 離開臨界區后,
Enable = 1; // 歸還 致能旗標。
}
// …
}
這個方法的優點是進入臨界區后,IO 口可隨意更改,
缺點則是取得進入臨界區的時間不固定。
在有些系列的 IC,新增加了指令 XOR A, IO / XOR IO, A,
也很適用于 IO 共享。