十年專注單片機方案開發的方案公司英銳恩,分享dsPIC30F6010單片機的原理及應用。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
摘要:Microchip公司推出的dsPIC30F系列單片機是一種集16位單片機控制特點和DSP功能于一身的新型芯片。文中介紹了dsPIC30F6010的基本特點、硬件結構和指令特點,分析了dsPIC30F6010在編程開發應用上的技術特點,并給出了一段具體的編程示例。
關鍵詞:DSP;dsPIC30F6010;PIC單片機
1 前言
隨著電子技術的發展以及集成電路規模的不斷擴大,工業等各應用領域對于核心芯片的要求越來越苛刻。因而,計算機芯片也朝著高速化、專業化、模塊化、功能化、低功耗、低電壓工作等方向不斷地發展、更新。
Microchip公司的PIC系列單片機以其內置Flash以及精簡指令集等技術特點成為中低檔8位單片機的主流產品,但是在一些復雜系統應用中,它仍存在一些缺陷和不足。為此,Microchip公司新推出了dsPIC30F系列16位單片機。它是一種具有單片機和DSP綜合功能的16位CPU,不但保留了單片機的基本性能、豐富了外圍模塊,還兼具DSP的高速運算能力,是嵌入式系統設計的最佳解決方案之一。由于集多種功能于單一芯片,從而大大節省了電路板空間。目前開發的dsPIC30F產品主要分為通用系列、電機控制和電源變換系列、傳感器系列等。其中dsPIC30F6010以其豐富的外圍模塊、I/O接口、可支持多種電機控制等特點,廣泛應用于電機控制、開關電源控制等領域。該單片機在許多應用中優于32位控制器。dsPIC30F6010的主要特點有:
●Flash程序空間容量大,外圍部件豐富;
●強大的中斷能力,可靈活處理中斷;
●編程開發能力強大,可支持C編譯,并可方便地與PIC系列單片機結合使用;
●強大的DSP演算能力,與其它DSP的指令集相比,dsPIC30F6010只有84個基本指令且多為單周期指令,從而大大簡化了編程效率;
●內嵌SPI、UART、CAN等多種通訊模塊,且具有適合于電機控制的8通道PWM以及正交編碼接口器;
●內含10位高速A/D和16位深度結果緩沖區,有多種數據方式;可在睡眠方式下進行轉換;同時具有多種時鐘模式;
●寬范圍工作電壓(2.5V~5.5V),大大優于其它單片機的5V工作電壓和DSP的3.3V工作電壓。
2 dsPIC30F6010的結構特點
2.1 CPU結構
dsPIC30F6010采用改進型哈佛結構,CPU核具有24位寬指令字。dsPIC30F6010的硬件結構框圖如圖1所示。它的PC指針為23位寬(最低位恒為“0”),可尋址4M×24位程序存儲器空間。除了跳轉、表格等指令外,所有的指令均在一個周期內完成。指令采用流水線操作方式,分為MCU和MAC等級指令,適合C編譯。dsPIC30F6010擁有16個16位工作寄存器(W0~W15),可作為數據、地址或地址偏移量寄存器,其中W15還可作為CALL指令或中斷的軟件堆棧指針。dsPIC30F6010共有54個中斷源和8個不可屏蔽陷阱,每個中斷源有7個中斷優先級,可通過狀態寄存器進行軟件編寫,故可靈活控制中斷,中斷控制器可支持5個外部中斷(INT0~INT4)請求。
dsPIC30F6010與PIC單片機最大的區別在于其內嵌一個DSP高速引擎,從而提高了CPU核的運算能力。DSP引擎包括一個17×17乘法器、一個40位AGU、兩個40位飽和累加器、一個40位雙向桶形移位器。DSP引擎的引入可以方便單片機快速、高效地進行一些數據處理,以提高整個系統的實時性。
2.2 數據RAM結構
dsPIC30F6010的數據存儲器為16位寬,共32K字。圖2是整個數據存儲器映射圖,其中特殊功能寄存器共2kB,地址為0x0000~0x07FF,主要包括CPU和外圍設備的控制或狀態寄存器。RAM地址從0x8000開始,分為X數據存儲器和Y數據存儲器,可分開作為2個單獨的數據空間(相對于一些DSP指令而言),也可合并作為線性數據空間(相對于MCU指令而言)。每個存儲器都有自己的AGU地址發生單元。雙源DSP操作的MAC等級指令可對 X和Y數據存儲器進行操作,從而把數據空間分成兩部分以分別存放兩個操作數。MCU指令只能通過X存儲器的AGU來尋址整個寄存器的數據空間,以便以W寄存器作為地址指針來進行讀/寫操作。數據存儲器頂部的32kB數據可任意映射到16k字程序空間中。dsPIC30F6010的大部分指令都能夠進行數據存儲器的讀/寫、工作寄存器(數據)讀、程序存儲器讀3個操作。對于DSP指令,用W8和W9可執行X存儲器空間內的儲存器讀寫,若指向Y存儲器,則返回“0”,如果指向未執行的地址,將產生錯誤的地址捕捉。同理,W10和W11作為Y存儲器的地址指針。8kB的近似數據空間可以直接通過工作寄存器指令形成的13位絕對地址來存取。
2.3 程序存儲器結構
圖3所示的程序存儲器映射圖分為兩部分:用戶程序空間和用戶配置空間。用戶程序空間包括復位矢量、中斷矢量表、程序存儲器和數據EEPROM存儲器;配置空間包括一些設備配置寄存器以及器件的ID位等。PC指針最低位恒為“0”,增量為2。
訪問4M×24位程序存儲器的方法有三種,第一種是通過23位PC指針;第二種是通過特殊的表格讀/寫指令(TBLRDL、TBLWTL、TBLRDH和TBLWTH),第三種是通過PSV操作模式(程序空間可見)把16k字程序空間頁面映射到數據存儲器地址空間的高32kB。
dsPIC30F6010的外圍模塊比PIC豐富許多。首先,通信模式增加了CAN模塊接口,其它通信模塊的數量也增加了,因而可適應大系統的設計需求。其次,dsPIC30F6010有5個16位timer模塊,其中TMR2和TMR3、TMR4和TMR5可以分別組合成32位定時器,程序員可以選擇多種工作方式,例如16位/32位定時器、32位同步計時器、門控等
模式。此外,dsPIC30F6010還增加了電機控制PWM模塊以及積分編碼模塊。
3 指令特點
dsPIC30F系列單片機在增加了DSP功能后,其指令也只有84條,因此,和其它DSP相比,可大大簡化編程難度。dsPIC30F6010在指令上的主要特點有:
(1)dsPIC30F6010的指令格式有別于PIC單片機,它的格式為: 操作符 源操作數 目的操作數,此外還增加了許多三操作數指令;
(2)dsPIC30F6010為16位CPU,因而在指令操作上有字操作和字節操作兩種模式,可實現8位和16位操作;
(3)dsPIC30F6010除了保留有PIC單片機的大部分指令功能外,還增加了許多傳送、數學運算、邏輯運算指令;相比PIC單片機,它的最大優點是增加了乘除法指令,因而可大大減少編程難度并優化程序。為了適應字操作,相應增加了減2、加2等指令;
(4)增加了相應的DSP功能指令,如DSP指令、程序流指令等;
(5)由于有多種堆棧形式,因而也就增加了不同形式的堆棧指令。
4 編程示例
dsPIC30F6010可支持C編譯、匯編以及混合編譯等多種模式,用戶可根據自身能力選擇不同的編程方式。
4.1 C編譯
dsPIC30F6010的編程模式基本上和C語言及其它單片機或DSP的C編譯相似,下面以A/D采樣為例給出其編程應用,設計時需要注意的是:
(1)寄存器必須大寫;
(2) 直接對某些位進行操作時,可在該寄存器后加bits,如ADCON1bits.ADON=1;
(3) 牢記先定義后使用的原則,調用的數學函數必須由編譯軟件庫函數所支持。
int main (void) ;主程序
{ portinitial();
adinitial();
ADCON1bits.ADON=1;
ADCON1bits.SAMP=1;
delay();
ADCON1bits.SAMP=0;
… … … …
}
void portinitial() ;初始化I/O口
{
TRISE=0x0000;
PORTE=0x0000;
}
void adinitial() ;AD初始化子程序
{ ADCON1=0x2208;
ADCON2=0x0000;
ADCON3=0x0000;
ADCHS=0x0000;
ADCSSL=0x0000;
ADPCFG=0x0000;
IFS0bits.ADIF=0;
IEC0bits.ADIE=1;
}
void delay() ;延時子程序
{
for (j=1000;--j;) continue
}
4.2 混編技術
在C語言中調用匯編語言時,只要在C匯編中定義一個extern型變量或函數并在其前面加一前綴( )即可。如在C程序中:
… … … …
extern void modulo(unsigned int *, unsigned int *, unsigned int);聲明函數類型
… … … …
int main (void)
{… … … …
modulo( array1, array2, PRODLEN-1);在C程序中調用
… … … …
}
在匯編中調用:
.global_modulo ;定義全局變量
_modulo:
… … … …
.end
5 結束語
在某些應用場合,綜合了16位單片機和DSP功能的dsPIC30F器件要大大優于32位單片機,而且可降低成本,同時,C代碼效率也降低了對存儲器的需求,從而緩解了16位單片機和低端數字信號處理器DSP存在的性能差。由于它本身的DSP功能大大提高了運算和響應能力,因而提高了系統的實時性,可完全適應現代工業控制技術發展的要求。豐富的外圍模塊以及I/O設備,必然使得dsPIC30F在未來的DSP市場中占有重要地位。目前,該產品已經開始在電機控制、網絡連接、語音和音響、電源變換和監視、傳感器控制、汽車控制等領域中開發應用??梢灶A見,隨著dsPIC30F系列產品的不斷開發和完善,以及開發工具、開發軟件的不斷豐富,dsPIC30F必將得到廣大用戶的青睞。