版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、合肥工業(yè)大學DSP及MSP430實驗室 MSP430單片機原理與應(yīng)用單片機原理與應(yīng)用 http:/ MSP430單片機片內(nèi)控制模塊片內(nèi)控制模塊是指MSP430單片機具有內(nèi)部控制功能且不與外部器件直接相連的內(nèi)部集成模塊。本章重點講述Flash控制器、RAM控制器、DMA控制器及硬件乘法控制器的結(jié)構(gòu)、原理及功能,并針對各個控制器給出簡單的程序例程。Flash控制器控制器8.1RAM控制器控制器8.2DMA控制器控制器8.3硬件乘法控制器硬件乘法控制器8.48.1 Flash控制器8.1.1 Flash存儲器的分段結(jié)構(gòu)MSP430單片機的存儲器采用馮諾依曼結(jié)構(gòu),RAM和Flash在同一尋址空間內(nèi)統(tǒng)一
2、編址,沒有代碼空間和數(shù)據(jù)空間之分。實際上,MSP430F5xx/6xx系列單片機的地址總線為20位,總尋址空間可達到1MB。但是,不同型號的MSP430單片機所具有的Flash空間大小不同,具體請參考相關(guān)芯片的數(shù)據(jù)手冊。MSP430F5529單片機具有128kB Flash程序存儲空間,其存儲器的分段結(jié)構(gòu)示意圖如圖8.1.1所示。圖8.1.1 Flash存儲器分段結(jié)構(gòu)示意圖 8.1.2 Flash控制器介紹MSP430單片機的Flash控制器主要用來實現(xiàn)對Flash存儲器的燒寫程序、寫入數(shù)據(jù)和擦除功能,可對Flash存儲器進行字節(jié)/字/長字(32位)的尋址和編程。Flash存儲器和控制器的結(jié)構(gòu)
3、框圖如圖8.1.2所示。Flash控制器模塊包括4個部分:控制寄存器和地址/數(shù)據(jù)鎖存器、時序發(fā)生器、編程電壓發(fā)生器及Flash存儲器??刂萍拇嫫髦饕脕砜刂艶lash存儲器的擦除和寫入,地址/數(shù)據(jù)鎖存器用來實現(xiàn)擦除與編程時執(zhí)行鎖存操作,時序發(fā)生器用來產(chǎn)生擦除與編程所需所有時序控制信號,編程電壓產(chǎn)生器用來產(chǎn)生Flash寫入和擦除操作所需的較高電壓。圖8.1.2 Flash存儲器和控制器結(jié)構(gòu)框圖Flash控制器具有以下特性: 內(nèi)置編程電壓發(fā)生器; 可字節(jié)、字、長字編程; 超低功耗操作; 段擦除、扇區(qū)擦除和塊擦除; 邊沿0和邊沿1讀模式; 當程序在其他扇區(qū)中執(zhí)行時,其余的扇區(qū)可以單獨擦除。8.1 F
4、lash控制器8.1.3 Flash存儲器操作Flash存儲器默認情況下為讀模式。在讀模式下,F(xiàn)lash存儲器不能進行擦除或?qū)懖僮?,F(xiàn)lash時序發(fā)生器和電壓發(fā)生器也將被關(guān)閉。Flash存儲器有不止一個扇區(qū)可用,在擦除的同時可以對其他扇區(qū)進行讀取操作。當正在對Flash存儲器的段、扇區(qū)或塊進行編程或擦除操作時,禁止對該部分Flash存儲器進行讀或?qū)懖僮?。Flash存儲器可通過BLKWRT、WRT、MERAS和ERASE控制位選擇以下任何一種寫入/擦除模式:字節(jié)/字/長字寫入、塊寫入、段擦除、扇區(qū)擦除(僅在主存儲器部分)、塊擦除、當擦除扇區(qū)時讀(除了從當前扇區(qū)讀)。1. Flash存儲器擦除操作
5、擦除后Flash存儲器內(nèi)的每一位值均為1,要往Flash中寫入數(shù)據(jù),只需將相應(yīng)的位改為0即可。但是,要將其重新編程從0到1,則需要擦除操作。Flash存儲器的最小擦除單元是段,通過ERASE和MERAS控制位可選擇3種擦除模式,具體配置如表8.1.1所示。MERASERASE擦 除 模 式01段擦除10扇區(qū)擦除11塊擦除(所有主存儲器的4個扇區(qū)都被擦除,信息存儲器AD及BSL引導裝載程序段AD不被擦除)表8.1.1 擦除模式設(shè)置列表8.1 Flash控制器(1)擦除周期對需要擦除的段地址范圍內(nèi)執(zhí)行一次空寫操作(寫入0)將啟動一次擦除,擦除周期時序如圖8.1.3所示。擦除開始時,F(xiàn)lash控制器
6、需要產(chǎn)生適當?shù)臅r序信號和正確的編程電壓,然后由時序發(fā)生器控制整個擦除過程,擦除完畢,編程電壓撤銷。注意:在空寫后(擦除開始后),BUSY標志位立即置位,并且在整個擦除周期內(nèi)保持置位,當擦除完成后BUSY、MERAS和ERASE標志位自動清除。圖8.1.3 擦除周期時序圖8.1 Flash控制器(2)擦除各存儲器方式主存儲器包含一個或多個扇區(qū),每個扇區(qū)可以采用扇區(qū)擦除模式進行單獨擦除,也可以通過塊擦除模式擦除主存儲器下的所有扇區(qū)。信息存儲段AD及BSL引導裝載程序段AD只可采用段擦除模式擦除,若采用扇區(qū)擦除或塊擦除模式,將不能擦除這些存儲器。(3)擦除操作編程步驟MSP430單片機的Flash存
7、儲器的擦除操作可以從Flash中啟動,也可以從RAM中啟動(即擦除操作指令執(zhí)行所在空間)。當從Flash中啟動擦除操作時,被執(zhí)行的代碼不能存放在需要擦除的扇區(qū)中,在擦除期間,CPU會停止運行且狀態(tài)保持不變,擦除完畢后,CPU才會恢復活動狀態(tài),繼續(xù)執(zhí)行程序代碼。但是,從RAM中啟動擦除工作時,CPU不會停止運行,能繼續(xù)執(zhí)行存儲在RAM中的程序代碼,BUSY忙標志位用于判斷擦除周期是否結(jié)束。在CPU訪問任何Flash地址時,必須保證擦除周期完成,即BUSY=0,否則對Flash的訪問操作將是非法的,ACCVIFG(非法訪問中斷標志位)置位,且擦除結(jié)果是不確定的。MSP430單片機的程序存儲空間可通
8、過CCS工程文件下的CMD文件進行更改,默認情況下存放在Flash中,一般情況下在執(zhí)行程序時直接從Flash中取指令。有時為了加快程序執(zhí)行速度或進行目標段Flash擦寫時,也可將程序從Flash中搬到RAM中執(zhí)行。但是,在RAM中執(zhí)行的指令掉電后會消失。 8.1 Flash控制器【例8.1.1】 編寫擦除單段數(shù)據(jù)的函數(shù)。/* * 名 稱:FlashErase() * 功 能:擦除單段數(shù)據(jù) * 入口參數(shù):擦除段的首地址 * 出口參數(shù):無 */void FlashErase(unsigned int adr) unsigned char *p0=(unsigned char *)adr; / 定義
9、字節(jié)型指針指向目標段 while(FCTL3 & BUSY); / 如果處于忙,則等待 FCTL3 = FWKEY; / 清除Flash鎖定位 FCTL1 = FWKEY + ERASE; / 使能單段擦除操作 _DINT(); / Flash操作期間不允許中斷,否則將導致不可預計的錯誤 *p0 = 0; / 向段內(nèi)地址寫0,即空寫入,啟動擦除操作 while(FCTL3 & BUSY); / 等待擦除完成 _EINT(); / 啟動全局中斷 FCTL1 = FWKEY; / Flash退出擦除模式 FCTL3 = FWKEY + LOCK; / 恢復Flash的鎖定位,保護數(shù)
10、據(jù)8.1 Flash控制器2. Flash存儲器寫操作BLKWRTWRT寫 模 式01字節(jié)/字寫入10長字寫入11長字塊寫入Flash存儲器的寫模式可通過WRT和BLKWRT控制位進行選擇,具體配置如表8.1.2所示。表8.1.2 寫模式配置列表(1)字節(jié)/字和長字寫入模式字節(jié)/字和長字寫入模式的寫入周期時序圖如圖8.1.4所示。在寫入過程中,BUSY忙標志位一直置位。這兩種寫入模式均可以從Flash中啟動,也可以從RAM中啟動,與擦除操作相同,從Flash中啟動時,CPU停止;從RAM中啟動時,CPU可繼續(xù)運行。 圖8.1.4 字節(jié)/字和長字寫入周期時序圖8.1 Flash控制器【例8.1.
11、2】 編寫向目的地址寫入1字節(jié)的函數(shù)。/* * 名 稱:FlashWB() * 功 能:向目的地址寫入1字節(jié) * 入口參數(shù):Adr:寫入地址 DataB:寫入的字節(jié) * 出口參數(shù):無*/void FlashWB(unsigned int Adr,unsigned char DataB) FCTL3 = FWKEY; FCTL1 = FWKEY+ERASE; / 設(shè)置擦除控制位 _DINT(); / Flash操作期間不允許中斷,否則將導致不可預計的錯誤 *(unsigned char *)Adr) = 0; / 向段內(nèi)地址寫0,即空寫入,啟動擦除操作 while(FCTL3 & BUS
12、Y); / 等待擦除完成 FCTL1 = FWKEY+WRT; / 設(shè)置字節(jié)/字寫控制位 *(unsigned char *)Adr)=DataB; / 向目的地址寫入數(shù)據(jù) while(FCTL3 & BUSY); / 等待寫入完成 _EINT(); / 啟動全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY + LOCK; / 恢復Flash的鎖定位,保護數(shù)據(jù)8.1 Flash控制器【例8.1.3】 編寫程序向Flash信息存儲器D段寫入一個長字。#include void main(void) unsigned long * Flash_p
13、trD; / 定義指向信息存儲器D段的指針 unsigned long value; WDTCTL = WDTPW+WDTHOLD; / 關(guān)閉看門狗 Flash_ptrD = (unsigned long *) 0 x1800; / 初始化指針 value = 0 x12345678; / 初始化需寫入的長字 FCTL3 = FWKEY; / 清除Flash鎖定位 FCTL1 = FWKEY+ERASE; / 設(shè)置擦除控制位 _DINT(); / Flash操作期間不允許中斷,否則將導致不可預計的錯誤 *Flash_ptrD = 0; / 向段內(nèi)地址寫0,即空寫入,啟動擦除操作 while(F
14、CTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+BLKWRT; / 使能長字寫入操作 *Flash_ptrD = value; / 將長字寫入目的Flash段 while(FCTL3 & BUSY); / 等待寫入操作完成 _EINT(); / 啟動全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復Flash的鎖定位,保護數(shù)據(jù) while(1); / 主循環(huán),可在此處設(shè)置斷點查看內(nèi)存空間8.1 Flash控制器(2)長字塊寫入模式當有許多連續(xù)的字節(jié)或字需要編程寫入時,長字塊寫入模式能夠
15、提高Flash的寫入速度。長字塊寫入模式周期時序圖如圖8.1.5所示。長字塊寫入模式不能從Flash存儲器中啟動,只能從RAM中啟動。在整個塊寫入的過程中,BUSY忙標志位置位。以一個長字(4字節(jié))為單位地寫入,每個長字之間必須檢查WAIT標志位,當WAIT標志位置位時,表示已完成前一個長字的寫入,可以寫入后一個長字。在當前塊數(shù)據(jù)寫完之后,BLKWRT控制位必須清零,且在一個塊的寫入之前必須置位。當BUSY標志位清零后,表示當前塊已完成寫入操作,可以對下一塊執(zhí)行寫入操作。圖8.1.5 長字塊寫入周期時序圖8.1 Flash控制器3. Flash控制器中斷Flash控制器有兩個中斷源:KEYV和
16、ACCVIFG。當產(chǎn)生非法訪問時,ACCVIFG標志位置位。當Flash寫入或擦除操作之后,使能ACCVIE控制位時,ACCVIFG標志位將產(chǎn)生中斷請求,ACCVIE控制位位于特殊功能寄存器SFRIE1內(nèi),且ACCVIFG標志位來源于不可屏蔽中斷(NMI)向量,所以當ACCVIFG請求中斷時,GIE控制位無須置位。當利用錯誤的密碼配置Flash控制器寄存器時,將置位KEYV密鑰錯誤標志位,此時將立即產(chǎn)生PUC復位信號,系統(tǒng)將會被復位。8.1 Flash控制器4. Flash存儲器編程方法對MSP430 Flash型單片機有3種燒寫程序的方法:通過JTAG接口編程、通過BSL引導加載程序編程和通
17、過用戶自定義方式編程,所有方式都支持在線編程。MSP430單片機CPU對Flash存儲器的在線和外部用戶自定義寫入方式如圖8.1.6所示。用戶可以選擇通過UART、SPI等方式進行編程。用戶可以自行開發(fā)軟件用于接收數(shù)據(jù)或?qū)lash存儲器進行編程。由于這種編程方式是由用戶定義開發(fā)的,所以它完全能夠用戶化,從而符合用戶編程、擦除或者更新Flash存儲器的實際應(yīng)用需求。圖8.1.6 用戶自定義編程方式示意圖8.1 Flash控制器8.1.4 Flash控制器寄存器Flash控制器寄存器列表如表8.1.3所示。FCTLx控制寄存器是一個16位具有密碼保護的讀/寫寄存器。在讀或?qū)懺L問時,必須使用字指令
18、。在寫操作時,高字節(jié)必須寫入密碼0A5h。若對FCTLx控制寄存器高位寫入0A5h以外的其他值,將引起密鑰錯誤,KEYV標志將置位并產(chǎn)生一個PUC復位信號。讀取FCTLx控制寄存器的高字節(jié)的結(jié)果為096h。寄存器縮寫讀/寫類型偏移地址初始狀態(tài)Flash控制寄存器1FCTL1讀/寫0000h9600hFlash控制寄存器3FCTL3讀/寫0004h9658hFlash控制寄存器4FCTL4讀/寫0006h9600h表8.1.3 Flash控制器寄存器列表(基址:0140h)8.1 Flash控制器8.1.5 Flash控制器應(yīng)用舉例【例8.1.4】 信息段C、D的擦除和寫入操作舉例:將信息段C的
19、內(nèi)容復制到信息段D內(nèi)。#include char value; / 聲明一個8位變量void write_SegC(char value);void copy_C2D(void);void main(void) WDTCTL = WDTPW+WDTHOLD; / 關(guān)閉看門狗 value = 0; / 給變量一個初始值 while(1) write_SegC(value+); / 寫信息段C copy_C2D(); / 將信息段C的內(nèi)容復制到信息段D內(nèi) 8.1 Flash控制器/寫信息段C函數(shù)void write_SegC(char value)unsigned int i;char * Fla
20、sh_ptr; / Flash指針Flash_ptr = (char *) 0 x1880; / 初始化Flash指針 FCTL3 = FWKEY; / 清除鎖定控制位 FCTL1 = FWKEY+ERASE; / 段擦除 _DINT(); / Flash操作期間不允許中斷,否則將導致不可預計的錯誤 *Flash_ptr = 0; / 空寫,啟動擦除 while(FCTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+WRT; / 采用字節(jié)/字寫入模式 for (i = 0; i 128; i+) / 循環(huán)寫信息段C的128字節(jié) *Flash_ptr+ = va
21、lue; / 向信息段C寫數(shù)據(jù) while(FCTL3 & BUSY); / 等待寫操作完成 _EINT(); / 啟動全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復Flash鎖定位,保護數(shù)據(jù)8.1 Flash控制器/將信息段C的內(nèi)容復制到信息段D內(nèi)void copy_C2D(void) unsigned int i; char *Flash_ptrC; char *Flash_ptrD; Flash_ptrC = (char *) 0 x1880; / 初始化信息段C指針 Flash_ptrD = (char *)
22、0 x1800; / 初始化信息段D指針 FCTL3 = FWKEY; / 清除鎖定控制位 FCTL1 = FWKEY+ERASE; / 段擦除 _DINT(); / Flash操作期間不允許中斷,否則將導致不可預計的錯誤 *Flash_ptrD = 0; / 空寫,啟動擦除 while(FCTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+WRT; / 采用字節(jié)/字寫入模式 for (i = 0; i 128; i+) *Flash_ptrD+ = *Flash_ptrC+; / 將信息段C的內(nèi)容復制到信息段D內(nèi) while(FCTL3 & BUSY
23、); / 等待寫除操作完成 _EINT(); / 啟動全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復Flash鎖定位,保護數(shù)據(jù)8.1 Flash控制器8.2 RAM控制器8.2.1 RAM控制器介紹RAM存儲器一般可分為4段,每段最小2kB。MSP430F5529單片機的RAM共8kB,另外還有一段2kB的UAB RAM空間。每個段可通過RAM控制寄存器RCCTL0中的RCRSxOFF控制位進行控制。RCCTL0寄存器由密碼保護,只有在字寫入模式下寫入正確的密碼后,才可以修改RCCTL0寄存器的內(nèi)容。8.2.2 RAM控制器操
24、作1. 活動模式在活動模式下,RAM存儲器可以隨時進行讀/寫。如果某段的RAM地址需要保存一些數(shù)據(jù),那么不能關(guān)閉該RAM段。2. 低功耗模式在低功耗模式下,CPU處于關(guān)閉狀態(tài)。一旦CPU被關(guān)閉,RAM立即進入待機模式以減少漏電流。3. RAM關(guān)閉模式RAM存儲器內(nèi)的每一段都可以通過置位各自的RCRSxOFF控制位獨立關(guān)閉。讀取關(guān)閉的RAM段,返回的數(shù)據(jù)是0。即使該段被重新上電,之前存儲在關(guān)閉的RAM段內(nèi)的所有數(shù)據(jù)都會丟失,無法讀取。4. 堆棧指針RAM段程序堆棧位于RAM空間,如果需要執(zhí)行中斷服務(wù)程序,不能關(guān)閉保存堆棧的RAM段,否則將進入低功耗模式。5. USB緩沖區(qū)在具有USB模塊的MSP
25、430單片機中,USB緩沖區(qū)在RAM內(nèi)。第7段RAM是專門為USB緩沖使用的。如果不需要USB操作或在正常操作中沒有使用時,可以通過置位RCRS7OFF控制位關(guān)閉這個RAM段。8.2.3 RAM控制器寄存器RAM控制器僅具有一個控制寄存器RCCTL0,為16位寄存器,初始狀態(tài)為8900h,具體介紹如下:15141312111098RCKEY 讀出是為96h,寫入時必須為5Ah76543210RCRS7OFFRCRS6OFFRCRS5OFFRCRS4OFFRCR37OFFRCRS2OFFRCRS1OFFRCRS0OFF RCKEY:第815位,RAM控制器密鑰。讀取的結(jié)果為96h,寫入必須為5A
26、h,否則此次操作將被忽略。 RCRSxOFF:第07位,RAM段開關(guān)控制位。置位相應(yīng)控制位將關(guān)閉相應(yīng)RAM段,關(guān)閉后,該RAM段內(nèi)保存的數(shù)據(jù)將丟失。8.2 RAM控制器8.3 DMA控制器8.3.1 DMA控制器介紹DMA控制器的特性包括: 最高可達8個獨立的傳輸通道,不同系列的MSP430單片機所具有的DMA傳輸通道不同,本節(jié)介紹具有3通道的DAM控制器結(jié)構(gòu); DMA通道優(yōu)先級可配置; 每次傳輸僅需要兩個MCLK時鐘周期; 具有字節(jié)、字、字節(jié)和字混合傳輸能力; 塊方式傳輸可達65536個字或字節(jié); 可選擇配置觸發(fā)源; 觸發(fā)方式可選邊沿觸發(fā)或電平觸發(fā); 4種傳輸尋址方式固定地址到固定地址、固定
27、地址到塊地址、塊地址到固定地址及塊地址到塊地址; 具有單個、塊或者突發(fā)塊傳輸模式。DMA控制器的結(jié)構(gòu)框圖如圖8.3.1所示。圖8.3.1 DMA控制器結(jié)構(gòu)框圖8.3 DMA控制器8.3.2 DMA控制器操作1. DMA控制器的尋址方式DMA控制器有4種尋址模式,分別為固定地址到固定地址、固定地址到塊地址、塊地址到固定地址和塊地址到塊地址,如圖8.3.2所示。對于每個DMA通道來說,其尋址模式都可獨立配置,例如,通道0可以配置成在兩個固定地址間傳輸,而通道1則可配置成在兩個塊地址間傳輸。尋址模式的配置可通過DMASRCINCR和DMADSTINCR控制位實現(xiàn),DMASRCINCR控制位可選擇每次
28、數(shù)據(jù)傳輸完成后源地址增大、減小或不變,DMADSTINCR控制位可選擇每次數(shù)據(jù)傳輸完成后目標地址增大、減少還是不變。圖8.3.2 DMA尋址方式8.3 DMA控制器2. DMA傳輸模式DMA控制器可通過DMADT控制位選擇6種傳輸模式,具體配置如表8.3.1所示,每個通道都可獨立配置其傳輸模式。DMA傳輸模式和尋址方式是分別定義的,任何尋址方式都可用于任何傳輸模式。通過DMAxCTL控制寄存器的DSTBYTE和SRCBYTE控制位可以選擇源地址和目標地址之間傳輸?shù)臄?shù)據(jù)類型:字、字節(jié)或字節(jié)和字組合。DMADT傳 輸 模 式描 述000單次傳輸每次傳輸都需要單獨觸發(fā)。DMAxSZ規(guī)定的傳輸完畢后,
29、DMAEN位自動清零001塊傳輸一次觸發(fā)可以傳輸整個數(shù)據(jù)塊,塊傳輸結(jié)束后,DMAEN位自動清零010,111突發(fā)塊傳輸CPU和塊傳輸交叉運行。突發(fā)塊傳輸結(jié)束后,DMAEN位自動清零100重復單次傳輸每次傳輸需要一次觸發(fā),傳輸結(jié)束后,DMAEN 仍保持使能101重復塊傳輸一次觸發(fā)傳輸整個塊數(shù)據(jù),傳輸結(jié)束后,DMAEN位仍保持使能110,111重復突發(fā)塊傳輸CPU和塊傳輸交叉運行,傳輸結(jié)束后,DMAEN位仍保持使能表8.3.1 DMA傳輸模式列表8.3 DMA控制器(1)單次傳輸在單次傳輸中,每次傳輸都需要一次單獨觸發(fā),單次傳輸狀態(tài)示意圖如圖8.3.3所示。圖8.3.3 單次傳輸狀態(tài)示意圖8.3
30、DMA控制器(2)塊傳輸模式在塊傳輸模式中,每次觸發(fā)可以傳輸一個數(shù)據(jù)塊。當一個塊傳輸完成后,DMAEN位被復位。如果需要再次傳輸,必須將DMAEN置位。在傳輸某個塊數(shù)據(jù)期間,其他的塊傳輸請求將被忽略。塊傳輸狀態(tài)示意圖如圖8.3.4所示。圖8.3.4 塊傳輸狀態(tài)示意圖8.3 DMA控制器(3)突發(fā)塊傳輸模式在突發(fā)塊傳輸模式中,數(shù)據(jù)傳輸與CPU活動交叉進行。在該模式下,當塊傳輸4字節(jié)或字后,CPU將可以運行2個MCLK時鐘周期,而不是等待整個塊傳輸完畢后才恢復工作。在突發(fā)塊傳輸模式下,CPU的利用率為20%。在突發(fā)塊傳輸結(jié)束之后,DMAEN將被清除,CPU的利用率可達100%。當一個突發(fā)塊傳輸被觸
31、發(fā)后,將忽略塊數(shù)據(jù)傳輸過程中產(chǎn)生的其他觸發(fā)信號。突發(fā)塊傳輸模式狀態(tài)示意圖如圖8.3.5所示。圖8.3.5 突發(fā)塊傳輸模式狀態(tài)示意圖8.3 DMA控制器 3. DMA傳輸初始化 每個DMA通道都可通過DMAxTSEL控制位獨立配置觸發(fā)源。只有當DMACTLx寄存器中的DMAEN控制位為0時,才可以修改DMAxTSEL位,否則可能會產(chǎn)生不可預料的DMA觸發(fā)事件。4. DMA傳輸事件觸發(fā)方式MSP430單片機的DMA控制器支持兩種信號觸發(fā)方式。(1)邊沿觸發(fā)方式當DMALEVEL控制位復位時,觸發(fā)信號的上升沿可以觸發(fā)DMA操作。(2)電平觸發(fā)方式當DMALEVEL控制位置位時,為高電平觸發(fā)方式。當控
32、制位DMALEVEL和DMAEN被置位,并且觸發(fā)信號源也為高電平時,才能觸發(fā)DMA操作。在電平觸發(fā)方式下,為了完成塊或突發(fā)塊傳輸,在傳輸過程中觸發(fā)信號必須始終保持高電平。如果觸發(fā)信號變低,DMA控制器將停止傳輸并保持當前狀態(tài);當觸發(fā)信號重新變高或者軟件修改了DMA寄存器,DMA控制器將從觸發(fā)信號變低時的狀態(tài)繼續(xù)傳輸。當DMALEVEL=1時,建議操作模式選擇控制位DMADTx=0,1,2,3,因為在觸發(fā)DMA操作后,DMAEN位能夠自動復位。需要注意的是,只有應(yīng)用外部觸發(fā)源DMAE0時,才需要采用電平觸發(fā)方式,其余觸發(fā)事件應(yīng)采用邊沿觸發(fā)方式。8.3 DMA控制器5. 停止DMA傳輸有兩種方法可
33、以停止正在進行的DMA傳輸:置位ENNMI控制位,通過不可屏蔽中斷事件可以停止DMA傳輸;通過清除DMAEN位來停止突發(fā)塊傳輸模式。6. DMA通道優(yōu)先級默認的DMA通道優(yōu)先級為DMA0DMA1DMA2,如果有多個DMA傳輸請求同時發(fā)生,有最高優(yōu)先級的通道最先完成傳輸操作,然后是第二優(yōu)先級的通道,再然后是第三優(yōu)先級的通道。在傳輸?shù)倪^程中,如果觸發(fā)了更高優(yōu)先級的通道,當前正在傳輸?shù)耐ǖ酪膊粫V?,等到當前傳輸操作結(jié)束后,具有較高優(yōu)先級的通道才開始傳輸。DMA通道優(yōu)先級可以通過ROUNDROBIN控制位來配置。當ROUNDROBIN=1時,DMA控制器工作在循環(huán)優(yōu)先級模式下,正在進行傳輸?shù)耐ǖ缊?zhí)行
34、完畢之后,優(yōu)先級降為最低,其他通道的優(yōu)先級順序保持不變,如表8.3.3所示。DMA優(yōu)先級正在進行傳輸?shù)耐ǖ纻鬏斖瓿芍蟮膬?yōu)先級DMA0DMA1DMA2DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0表8.3.3 DMA優(yōu)先級8.3 DMA控制器7. DMA傳輸周期在各種DMA傳輸模式下,DMA開始傳輸之前都需要1個或2個MCLK時鐘來實現(xiàn)同步,同步之后每個字節(jié)或字的傳輸僅需要2個MCLK時鐘周期,每次傳輸結(jié)束都要有1個周期的等待時間。因為DMA使用的是MCLK,所以DMA的周期決定于MSP430單片
35、機的工作模式和系統(tǒng)時鐘設(shè)置。如果MCLK時鐘源處于活動狀態(tài),而CPU關(guān)閉,則DMA傳輸直接使用MCLK時鐘源而無須重新激活CPU。如果MCLK時鐘源也被關(guān)閉,那么DMA會臨時用DCOCLK啟動MCLK時鐘源,傳輸結(jié)束后CPU仍處于關(guān)閉階段,MCLK時鐘源也將被關(guān)閉。在各種模式下,DMA傳輸最大周期如表8.3.4所示,其中額外的5ms是啟動DCOCLK所用的時間。CPU工作模式時 鐘 源DMA傳輸最大周期活動狀態(tài)MCLK=DCOCLK4MCLK周期活動狀態(tài)MCLK=LFXT1CLK低功耗模式LPM0/1MCLK=DCOCLK5MCLK周期低功耗模式LPM3/45MCLK+5ms低功耗模式LPM0
36、/1MCLK=LFXT1CLK5MCLK低功耗模式LPM3低功耗模式LPM45MCLK+5ms表8.3.4 DMA傳輸最大周期表8.3 DMA控制器8. DMA與中斷(1)DMA與系統(tǒng)中斷系統(tǒng)中斷不能打斷DMA傳輸,系統(tǒng)中斷直到DMA傳輸結(jié)束后才能被響應(yīng)。如果ENNMI置位,NMI中斷可以打斷DMA傳輸。DMA事件可以打斷中斷處理程序。如果中斷處理程序或其他程序不希望被中途打斷,應(yīng)該將DMA控制器關(guān)閉,這樣才能得到優(yōu)先響應(yīng)。(2)DMA控制器中斷每個DMA通道都有自己的中斷標志位DMAIFG。在任何傳輸模式下,只要DMAxSZ寄存器減計數(shù)到零,則相應(yīng)通道的中斷標志位就被置位。如果與之對應(yīng)的DM
37、AIE和GIE置位,則可以產(chǎn)生中斷請求。9. ADC12模塊使用DMA控制器內(nèi)部集成了DMA控制器的MSP430單片機能夠自動地將ADC12MEMx寄存器的數(shù)據(jù)傳輸?shù)狡渌胤健MA傳輸不需要CPU參與,獨立于任何低功耗模式。DMA控制器增加了ADC12模塊的吞吐量,在數(shù)據(jù)傳輸過程中CPU也能繼續(xù)保持低功耗模式。DMA傳輸能夠被任何ADC12IFGx標志位觸發(fā)。當CONSEQx=0,2時,ADC12MEMx對應(yīng)的ADC12IFGx標志位能夠觸發(fā)DMA傳輸。當CONSEQx=1,3時,序列中最后一個ADC12MEMx對應(yīng)的ADC12IFGx標志位觸發(fā)DMA傳輸。當DMA控制器訪問相應(yīng)的ADC12
38、MEMx時,ADC12IFGx標志位會自動清除。8.3 DMA控制器8.3.3 DMA控制器寄存器3通道DMA控制器共有16個寄存器,包括3個DMA控制寄存器、每個通道有4個控制寄存器和1個中斷向量寄存器。8.3.4 DMA控制器應(yīng)用舉例【例8.3.1】 利用DMA0通道采用重復塊傳輸模式將大小為16字的數(shù)據(jù)塊從1C00h1C1Fh單元傳輸?shù)?C20h1C3Fh。程序中每次傳輸時P1.0都為高電平,之后通過置位DMAREQ控制位啟動DMA塊傳輸,傳輸完畢后將P1.0設(shè)置為低電平,程序代碼如下:#include void main(void) WDTCTL = WDTPW+WDTHOLD; /
39、關(guān)閉看門狗 P1DIR |= 0 x01; / 將P1.0設(shè)為輸出 _ _data16_write_addr(unsigned short) &DMA0SA,(unsigned long) 0 x1C00); / 設(shè)置源地址8.3 DMA控制器 _ _data16_write_addr(unsigned short) &DMA0DA,(unsigned long) 0 x1C20); / 設(shè)置目標地址 DMA0SZ = 16; / 設(shè)置傳輸塊大小 DMA0CTL = DMADT_5+DMASRCINCR_3+DMADSTINCR_3; / 重復塊傳輸、源地址和目標地址自動增計數(shù)
40、模式 DMA0CTL |= DMAEN; / 使能DMA通道0 while(1) P1OUT |= 0 x01; / 置位P1.0 DMA0CTL |= DMAREQ; / 啟動塊傳輸 P1OUT &= 0 x01; / 拉低P10 【例8.3.2】 利用DMA0通道采用重復單次傳輸模式將ADC12的A0通道采樣的數(shù)據(jù)保存到全局變量中。ADC12采樣觸發(fā)信號由TB0定時器定時產(chǎn)生,ADC12IFG0標志位觸發(fā)DMA傳輸,程序代碼如下:#include unsigned int DMA_DST; / 定義全局變量用于存儲A0采樣結(jié)果void main(void) WDTCTL = WDT
41、PW+WDTHOLD; / 關(guān)閉看門狗 P1DIR |= BIT0; / P1.0設(shè)為輸出 P1OUT &= BIT0; / P1.0輸出低電平 P5SEL |= BIT7; / P5.7設(shè)為定時器TB輸出功能 P5DIR |= BIT7; / P5.7設(shè)為輸出8.3 DMA控制器 P6SEL |= BIT0; / 使能A0輸入通道 TBCCR0 = 0 xFFFE; TBCCR1 = 0 x8000; TBCCTL1 = OUTMOD_3; / CCR1工作在置位/復位模式 TBCTL = TBSSEL_2+MC_1+TBCLR; / 參考時鐘為SMCLK,TB工作在增/減計數(shù)模式下
42、 ADC12CTL0 = ADC12SHT0_15+ADC12MSC+ADC12ON;/ 打開ADC,設(shè)置采樣時間 ADC12CTL1 = ADC12SHS_3+ADC12CONSEQ_2; / TBOUT作為采樣觸發(fā)信號,單通道多次采樣 ADC12MCTL0 = ADC12SREF_0+ADC12INCH_0; / V+=AVcc V-=AVss, ADC12CTL0 |= ADC12ENC; DMACTL0 = DMA0TSEL_24; / DMA觸發(fā)事件選擇ADC12IFGx DMACTL4 = DMARMWDIS; DMA0CTL &= DMAIFG; DMA0CTL = DM
43、ADT_4+DMAEN+DMADSTINCR_3+DMAIE; / DMA工作在重復單次傳輸模式,使能DMA傳輸,目標地址自動增,使能DMA中斷 DMA0SZ = 1; / 傳輸大小為1個字 _ _data16_write_addr(unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0); / 設(shè)置源地址8.3 DMA控制器 _ _data16_write_addr(unsigned short) &DMA0DA,(unsigned long) &DMA_DST); / 設(shè)置目標地址 _ _bis_SR_regis
44、ter(LPM0_bits + GIE); / 進LPM0并使能全局中斷#pragma vector=DMA_VECTOR / DMA中斷服務(wù)程序_ _interrupt void DMA_ISR(void) switch(_ _even_in_range(DMAIV,16) case 0: break; case 2: / DMA0IFG = DMA Channel 0 P1OUT = BIT0; / 可在此處設(shè)置斷點,查看ADC采樣的數(shù)據(jù)和DMA_DST變量的值 break; case 4: break; / DMA1IFG = DMA Channel 1 default: break;
45、8.3 DMA控制器8.4 硬件乘法控制器8.4.1 硬件乘法控制器概述1. 硬件乘法控制器支持的運算 無符號數(shù)乘法; 有符號數(shù)乘法; 無符號數(shù)乘加; 有符號數(shù)乘加; 8位、16位、24位和32位操作數(shù); 飽和模式; 小數(shù)模式; 與16位硬件乘法控制器兼容的8位和16位操作; 不需要符號擴展指令的8位和24位乘法操作。2. 32位硬件乘法控制器的結(jié)構(gòu)框圖32位硬件乘法控制器的結(jié)構(gòu)框圖如圖8.4.1所示。硬件乘法控制器的結(jié)構(gòu)可分為4個部分:操作數(shù)輸入模塊(圖中)、乘加運算模塊(圖中)、運算結(jié)果輸出模塊(圖中)及控制寄存器模塊(圖中)。圖8.4.1 硬件乘法控制器的結(jié)構(gòu)框圖8.4 硬件乘法控制器8
46、.4.2 硬件乘法控制器操作硬件乘法控制器支持8位、16位、24位、32位的無符號數(shù)乘法、無符號數(shù)乘加、有符號數(shù)乘法、有符號數(shù)乘加操作。操作數(shù)的大小由寫入操作數(shù)地址的數(shù)據(jù)確定,操作類型則由第一個寫入的操作數(shù)類型決定。1. 操作數(shù)寄存器硬件乘法控制器有兩個32位操作數(shù)寄存器,如圖8.4.1中所示,分別為操作數(shù)OP1和OP2。操作數(shù)OP1定義了12個寄存器,詳細介紹如表8.4.1所示,通過操作數(shù)寄存器可將數(shù)據(jù)載入乘法器中并選擇乘法器的工作模式。當對給定地址寫入第一個低字操作數(shù)(前16位數(shù)據(jù))時,就選擇了乘法運算的類型,但是,并不開始任何操作。當向后綴為32H的高字寄存器寫入第二個字時,乘法器就認為
47、OP1是32位,否則就認為是16位。在寫入OP2之前寫入的最后一個地址定義了第一個操作數(shù)的長度。OP2寄存器代表第二個寄存器,當?shù)诙€寄存器寫入完畢,乘法運算就開始。一般在取出結(jié)果之前需插入12條指令,以確保運算的完成。8.4 硬件乘法控制器2. 結(jié)果寄存器乘法操作的結(jié)果存儲在64位結(jié)果寄存器中,如圖8.4.1中所示,分別為RES0、RES1、RES2和RES3。為了兼容1616的硬件乘法控制器,可以通過RESLO、RESHI和SUMEXT這3個寄存器訪問8位或16位操作的32位結(jié)果。RESLO寄存器保存計算結(jié)果的低16位,RESHI寄存器保存高16位,在使用和訪問計算結(jié)果方面,RES0、RE
48、S1分別與RESLO和RESHI相同。結(jié)果擴展寄存器SUMEXT的內(nèi)容取決于乘法器的操作模式,具體描述如表8.4.2所示。MPYC標志位反映了乘法器的進位,如果沒有選擇小數(shù)模式或飽和模式,則該位可以作為乘法運算結(jié)果的第33位或第65位,詳細說明見表8.4.2。乘法器模式SUMEXT內(nèi)容及含義MPYC內(nèi)容及含義MPYSUMEXT總是為0000hMPYC總是為0MPYS0000h:運算結(jié)果為正或零0:運算結(jié)果為正或零0FFFFh:運算結(jié)果為負1:運算結(jié)果為負MAC0000h:運算結(jié)果沒有進位0:運算結(jié)果沒有進位0001h:運算結(jié)果有進位1:運算結(jié)果有進位MACS0000h:運算結(jié)果為正或零0:運算
49、結(jié)果沒有進位0FFFFh:運算結(jié)果為負1:運算結(jié)果有進位表8.4.2 SUMEXT及MPYC內(nèi)容及含義列表8.4 硬件乘法控制器3. 小數(shù)模式硬件乘法控制器支持“小數(shù)”相乘運算。首先介紹硬件乘法控制器所支持的“小數(shù)”表示方法:Q格式。圖8.4.2表示的為Q15格式,其表示的為有符號16位數(shù)據(jù)格式,最高有效位是符號位,小數(shù)點后第一位為1/2,之后每一位比前一位的值減小一半。最小的負數(shù)為08000h,最大的正數(shù)是07FFFh。因此,16位有符號的Q15格式可以表示從-1.00.999969482的數(shù)??梢酝ㄟ^如圖8.4.3所示的右移小數(shù)點法來增大小數(shù)表示的范圍。16位有符號的Q14格式可以表示-2
50、.01.999938965的數(shù)。當MPY32CTL0控制寄存器中的MPYFRAC控制位為1時,硬件乘法控制器小數(shù)模式使能。兩個16位Q15格式數(shù)據(jù)相乘,結(jié)果以16位Q15格式存儲在RES1結(jié)果寄存器中,這個結(jié)果并不是最終的小數(shù)相乘運算結(jié)果,最終的運算結(jié)果需要將RES1寄存器左移一位;兩個32位Q31格式的數(shù)據(jù)相乘,其結(jié)果可以通過讀取RES2和RES3結(jié)果寄存器獲得。圖8.4.2 Q15格式表示圖圖8.4.3 Q14格式標示圖8.4 硬件乘法控制器4. 飽和模式在一般有符號數(shù)運算模式下,硬件乘法控制器不會自動檢測上溢和下溢的發(fā)生。當兩個負數(shù)的和產(chǎn)生正數(shù)范圍內(nèi)的結(jié)果時,發(fā)生下溢;當兩個正數(shù)的和產(chǎn)生
51、負數(shù)范圍內(nèi)的結(jié)果時,產(chǎn)生上溢。但是,在飽和模式下,硬件乘法控制器可以防止有符號數(shù)操作結(jié)果的上溢或下溢。若控制寄存器MPY32CTL0中的MPYSAT控制位被置位,將使能飽和模式。如果發(fā)生上溢,運算結(jié)果將被設(shè)置成正的最大有效值;如果發(fā)生下溢,運算結(jié)果將被設(shè)置成負的最大有效值。15141312111098保留MPYDLY32MPYDLYWRTEN76543210MPYOP2_32MPYOP1_32MPYMxMPYSATMPYFRAC保留MPYC5. 硬件乘法控制器控制寄存器硬件乘法控制器具有一個控制寄存器MPY32CTL0,其在硬件乘法控制器結(jié)構(gòu)框圖中的位置如圖8.4.1中所示。下面將詳細介紹硬件
52、乘法控制器控制寄存器各控制位的含義。8.4 硬件乘法控制器 MPYDLY32:第9位,寫操作延遲控制位。 0:寫操作延遲直到64位運算結(jié)果(RES0RES3)可用; 1:寫操作延遲直到32位運算結(jié)果(RES0RES1)可用。 MPYDLYWRTEN:第8位,延遲寫操作控制位。若給控制位置位,所有對MPY32寄存器的寫操作都要延遲到64位(MPYDLY32=0)或32位(MPYDLY32=1)運算結(jié)果完成之后。 0:寫操作不延遲; 1:寫操作延遲。 MPYOP2_32:第7位,硬件乘法控制器操作數(shù)2的寬度控制位。 0:16位; 1:32位。 MPYOP1_32:第6位,硬件乘法控制器操作數(shù)1的寬
53、度控制位。 0:16位; 1:32位。 MPYMx:第45位,乘法器模式選擇控制位。 00:MPY無符號數(shù)乘法; 01:MPYS有符號數(shù)乘法; 10:MAC無符號數(shù)乘加; 11:MACS有符號數(shù)乘加。 MPYSAT:第3位,飽和模式使能控制位。 0:飽和模式禁止; 1:飽和模式使能。 MPYFRAC:第2位,小數(shù)模式使能控制位。 0:小數(shù)模式禁止; 1:小數(shù)模式使能。MPYC:第0位,硬件乘法控制器進位標志位。如果未選擇飽和模式或小數(shù)模式,該標志位可作為乘法運算結(jié)果的第33位或第65位,因為當切換到飽和模式或小數(shù)模式時該標志位不變化。該標志位置位表示運算結(jié)果有進位,否則清零表示運算結(jié)果沒有進位。8.4 硬件乘法控制器8.4.3 硬件乘法控制器程序舉例【例8.4.1】 編程實現(xiàn)1616無符號乘法運算。#include void main(void) WDTCTL = WDTPW+WDTHOLD; / 關(guān)閉看門狗 MPY = 0 x1234; / 載入第一個無符號操作數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年恒豐銀行上海分行社會招聘備考題庫及1套參考答案詳解
- 3D打印膽道支架的通暢性長期觀察
- 小學數(shù)學教學中游戲化學習與思維發(fā)展的關(guān)聯(lián)課題報告教學研究課題報告
- 3D打印導板在神經(jīng)外科手術(shù)中的精準設(shè)計與精準實踐
- 2025年岱東鎮(zhèn)下屬企業(yè)公開招聘工作人員備考題庫及一套參考答案詳解
- 漸變風商業(yè)計劃書寵物行業(yè)
- 2025年信息資源管理學院教師崗位招聘備考題庫及答案詳解1套
- 2025年西安市灞橋區(qū)中醫(yī)醫(yī)院腦病科住院醫(yī)師招聘備考題庫及參考答案詳解1套
- 貴陽市烏當區(qū)水東實驗學校2025年教師招聘備考題庫及一套答案詳解
- 深圳市龍崗區(qū)第五人民醫(yī)院2025年第五批公開招聘備考題庫及參考答案詳解
- 噴繪安裝合同范本
- 2026年湖南食品藥品職業(yè)學院單招職業(yè)適應(yīng)性測試題庫帶答案詳解
- 《AQ 4272-2025鋁鎂制品機械加工粉塵防爆安全規(guī)范》專題研究報告
- 2025年度威海文旅發(fā)展集團有限公司招聘工作人員25人筆試參考題庫附帶答案詳解(3卷)
- T-CNHC 4-2025 昌寧縣低質(zhì)低效茶園改造技術(shù)規(guī)程
- 2025年手術(shù)室護理實踐指南試題(含答案)
- 2025年山東省政府采購專家入庫考試真題(附答案)
- 2025兵團連隊職工試題及答案
- 2025年煤礦安全規(guī)程題庫(附答案)
- 雨課堂學堂云在線《人工智能原理》單元測試考核答案
- GB/T 30340-2025機動車駕駛員培訓機構(gòu)業(yè)務(wù)條件
評論
0/150
提交評論