第8章MSP430單片機(jī)片內(nèi)控制模塊_第1頁
第8章MSP430單片機(jī)片內(nèi)控制模塊_第2頁
第8章MSP430單片機(jī)片內(nèi)控制模塊_第3頁
第8章MSP430單片機(jī)片內(nèi)控制模塊_第4頁
第8章MSP430單片機(jī)片內(nèi)控制模塊_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、合肥工業(yè)大學(xué)DSP及MSP430實(shí)驗(yàn)室 MSP430單片機(jī)原理與應(yīng)用單片機(jī)原理與應(yīng)用 http:/ MSP430單片機(jī)片內(nèi)控制模塊片內(nèi)控制模塊是指MSP430單片機(jī)具有內(nèi)部控制功能且不與外部器件直接相連的內(nèi)部集成模塊。本章重點(diǎn)講述Flash控制器、RAM控制器、DMA控制器及硬件乘法控制器的結(jié)構(gòu)、原理及功能,并針對各個(gè)控制器給出簡單的程序例程。Flash控制器控制器8.1RAM控制器控制器8.2DMA控制器控制器8.3硬件乘法控制器硬件乘法控制器8.48.1 Flash控制器8.1.1 Flash存儲(chǔ)器的分段結(jié)構(gòu)MSP430單片機(jī)的存儲(chǔ)器采用馮諾依曼結(jié)構(gòu),RAM和Flash在同一尋址空間內(nèi)統(tǒng)一

2、編址,沒有代碼空間和數(shù)據(jù)空間之分。實(shí)際上,MSP430F5xx/6xx系列單片機(jī)的地址總線為20位,總尋址空間可達(dá)到1MB。但是,不同型號(hào)的MSP430單片機(jī)所具有的Flash空間大小不同,具體請參考相關(guān)芯片的數(shù)據(jù)手冊。MSP430F5529單片機(jī)具有128kB Flash程序存儲(chǔ)空間,其存儲(chǔ)器的分段結(jié)構(gòu)示意圖如圖8.1.1所示。圖8.1.1 Flash存儲(chǔ)器分段結(jié)構(gòu)示意圖 8.1.2 Flash控制器介紹MSP430單片機(jī)的Flash控制器主要用來實(shí)現(xiàn)對Flash存儲(chǔ)器的燒寫程序、寫入數(shù)據(jù)和擦除功能,可對Flash存儲(chǔ)器進(jìn)行字節(jié)/字/長字(32位)的尋址和編程。Flash存儲(chǔ)器和控制器的結(jié)構(gòu)

3、框圖如圖8.1.2所示。Flash控制器模塊包括4個(gè)部分:控制寄存器和地址/數(shù)據(jù)鎖存器、時(shí)序發(fā)生器、編程電壓發(fā)生器及Flash存儲(chǔ)器。控制寄存器主要用來控制Flash存儲(chǔ)器的擦除和寫入,地址/數(shù)據(jù)鎖存器用來實(shí)現(xiàn)擦除與編程時(shí)執(zhí)行鎖存操作,時(shí)序發(fā)生器用來產(chǎn)生擦除與編程所需所有時(shí)序控制信號(hào),編程電壓產(chǎn)生器用來產(chǎn)生Flash寫入和擦除操作所需的較高電壓。圖8.1.2 Flash存儲(chǔ)器和控制器結(jié)構(gòu)框圖Flash控制器具有以下特性: 內(nèi)置編程電壓發(fā)生器; 可字節(jié)、字、長字編程; 超低功耗操作; 段擦除、扇區(qū)擦除和塊擦除; 邊沿0和邊沿1讀模式; 當(dāng)程序在其他扇區(qū)中執(zhí)行時(shí),其余的扇區(qū)可以單獨(dú)擦除。8.1 F

4、lash控制器8.1.3 Flash存儲(chǔ)器操作Flash存儲(chǔ)器默認(rèn)情況下為讀模式。在讀模式下,F(xiàn)lash存儲(chǔ)器不能進(jìn)行擦除或?qū)懖僮?,F(xiàn)lash時(shí)序發(fā)生器和電壓發(fā)生器也將被關(guān)閉。Flash存儲(chǔ)器有不止一個(gè)扇區(qū)可用,在擦除的同時(shí)可以對其他扇區(qū)進(jìn)行讀取操作。當(dāng)正在對Flash存儲(chǔ)器的段、扇區(qū)或塊進(jìn)行編程或擦除操作時(shí),禁止對該部分Flash存儲(chǔ)器進(jìn)行讀或?qū)懖僮?。Flash存儲(chǔ)器可通過BLKWRT、WRT、MERAS和ERASE控制位選擇以下任何一種寫入/擦除模式:字節(jié)/字/長字寫入、塊寫入、段擦除、扇區(qū)擦除(僅在主存儲(chǔ)器部分)、塊擦除、當(dāng)擦除扇區(qū)時(shí)讀(除了從當(dāng)前扇區(qū)讀)。1. Flash存儲(chǔ)器擦除操作

5、擦除后Flash存儲(chǔ)器內(nèi)的每一位值均為1,要往Flash中寫入數(shù)據(jù),只需將相應(yīng)的位改為0即可。但是,要將其重新編程從0到1,則需要擦除操作。Flash存儲(chǔ)器的最小擦除單元是段,通過ERASE和MERAS控制位可選擇3種擦除模式,具體配置如表8.1.1所示。MERASERASE擦 除 模 式01段擦除10扇區(qū)擦除11塊擦除(所有主存儲(chǔ)器的4個(gè)扇區(qū)都被擦除,信息存儲(chǔ)器AD及BSL引導(dǎo)裝載程序段AD不被擦除)表8.1.1 擦除模式設(shè)置列表8.1 Flash控制器(1)擦除周期對需要擦除的段地址范圍內(nèi)執(zhí)行一次空寫操作(寫入0)將啟動(dòng)一次擦除,擦除周期時(shí)序如圖8.1.3所示。擦除開始時(shí),F(xiàn)lash控制器

6、需要產(chǎn)生適當(dāng)?shù)臅r(shí)序信號(hào)和正確的編程電壓,然后由時(shí)序發(fā)生器控制整個(gè)擦除過程,擦除完畢,編程電壓撤銷。注意:在空寫后(擦除開始后),BUSY標(biāo)志位立即置位,并且在整個(gè)擦除周期內(nèi)保持置位,當(dāng)擦除完成后BUSY、MERAS和ERASE標(biāo)志位自動(dòng)清除。圖8.1.3 擦除周期時(shí)序圖8.1 Flash控制器(2)擦除各存儲(chǔ)器方式主存儲(chǔ)器包含一個(gè)或多個(gè)扇區(qū),每個(gè)扇區(qū)可以采用扇區(qū)擦除模式進(jìn)行單獨(dú)擦除,也可以通過塊擦除模式擦除主存儲(chǔ)器下的所有扇區(qū)。信息存儲(chǔ)段AD及BSL引導(dǎo)裝載程序段AD只可采用段擦除模式擦除,若采用扇區(qū)擦除或塊擦除模式,將不能擦除這些存儲(chǔ)器。(3)擦除操作編程步驟MSP430單片機(jī)的Flash存

7、儲(chǔ)器的擦除操作可以從Flash中啟動(dòng),也可以從RAM中啟動(dòng)(即擦除操作指令執(zhí)行所在空間)。當(dāng)從Flash中啟動(dòng)擦除操作時(shí),被執(zhí)行的代碼不能存放在需要擦除的扇區(qū)中,在擦除期間,CPU會(huì)停止運(yùn)行且狀態(tài)保持不變,擦除完畢后,CPU才會(huì)恢復(fù)活動(dòng)狀態(tài),繼續(xù)執(zhí)行程序代碼。但是,從RAM中啟動(dòng)擦除工作時(shí),CPU不會(huì)停止運(yùn)行,能繼續(xù)執(zhí)行存儲(chǔ)在RAM中的程序代碼,BUSY忙標(biāo)志位用于判斷擦除周期是否結(jié)束。在CPU訪問任何Flash地址時(shí),必須保證擦除周期完成,即BUSY=0,否則對Flash的訪問操作將是非法的,ACCVIFG(非法訪問中斷標(biāo)志位)置位,且擦除結(jié)果是不確定的。MSP430單片機(jī)的程序存儲(chǔ)空間可通

8、過CCS工程文件下的CMD文件進(jìn)行更改,默認(rèn)情況下存放在Flash中,一般情況下在執(zhí)行程序時(shí)直接從Flash中取指令。有時(shí)為了加快程序執(zhí)行速度或進(jìn)行目標(biāo)段Flash擦寫時(shí),也可將程序從Flash中搬到RAM中執(zhí)行。但是,在RAM中執(zhí)行的指令掉電后會(huì)消失。 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é)型指針指向目標(biāo)段 while(FCTL3 & BUSY); / 如果處于忙,則等待 FCTL3 = FWKEY; / 清除Flash鎖定位 FCTL1 = FWKEY + ERASE; / 使能單段擦除操作 _DINT(); / Flash操作期間不允許中斷,否則將導(dǎo)致不可預(yù)計(jì)的錯(cuò)誤 *p0 = 0; / 向段內(nèi)地址寫0,即空寫入,啟動(dòng)擦除操作 while(FCTL3 & BUSY); / 等待擦除完成 _EINT(); / 啟動(dòng)全局中斷 FCTL1 = FWKEY; / Flash退出擦除模式 FCTL3 = FWKEY + LOCK; / 恢復(fù)Flash的鎖定位,保護(hù)數(shù)

10、據(jù)8.1 Flash控制器2. Flash存儲(chǔ)器寫操作BLKWRTWRT寫 模 式01字節(jié)/字寫入10長字寫入11長字塊寫入Flash存儲(chǔ)器的寫模式可通過WRT和BLKWRT控制位進(jìn)行選擇,具體配置如表8.1.2所示。表8.1.2 寫模式配置列表(1)字節(jié)/字和長字寫入模式字節(jié)/字和長字寫入模式的寫入周期時(shí)序圖如圖8.1.4所示。在寫入過程中,BUSY忙標(biāo)志位一直置位。這兩種寫入模式均可以從Flash中啟動(dòng),也可以從RAM中啟動(dòng),與擦除操作相同,從Flash中啟動(dòng)時(shí),CPU停止;從RAM中啟動(dòng)時(shí),CPU可繼續(xù)運(yùn)行。 圖8.1.4 字節(jié)/字和長字寫入周期時(shí)序圖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操作期間不允許中斷,否則將導(dǎo)致不可預(yù)計(jì)的錯(cuò)誤 *(unsigned char *)Adr) = 0; / 向段內(nèi)地址寫0,即空寫入,啟動(dòng)擦除操作 while(FCTL3 & BUS

12、Y); / 等待擦除完成 FCTL1 = FWKEY+WRT; / 設(shè)置字節(jié)/字寫控制位 *(unsigned char *)Adr)=DataB; / 向目的地址寫入數(shù)據(jù) while(FCTL3 & BUSY); / 等待寫入完成 _EINT(); / 啟動(dòng)全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY + LOCK; / 恢復(fù)Flash的鎖定位,保護(hù)數(shù)據(jù)8.1 Flash控制器【例8.1.3】 編寫程序向Flash信息存儲(chǔ)器D段寫入一個(gè)長字。#include void main(void) unsigned long * Flash_p

13、trD; / 定義指向信息存儲(chǔ)器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操作期間不允許中斷,否則將導(dǎo)致不可預(yù)計(jì)的錯(cuò)誤 *Flash_ptrD = 0; / 向段內(nèi)地址寫0,即空寫入,啟動(dòng)擦除操作 while(F

14、CTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+BLKWRT; / 使能長字寫入操作 *Flash_ptrD = value; / 將長字寫入目的Flash段 while(FCTL3 & BUSY); / 等待寫入操作完成 _EINT(); / 啟動(dòng)全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復(fù)Flash的鎖定位,保護(hù)數(shù)據(jù) while(1); / 主循環(huán),可在此處設(shè)置斷點(diǎn)查看內(nèi)存空間8.1 Flash控制器(2)長字塊寫入模式當(dāng)有許多連續(xù)的字節(jié)或字需要編程寫入時(shí),長字塊寫入模式能夠

15、提高Flash的寫入速度。長字塊寫入模式周期時(shí)序圖如圖8.1.5所示。長字塊寫入模式不能從Flash存儲(chǔ)器中啟動(dòng),只能從RAM中啟動(dòng)。在整個(gè)塊寫入的過程中,BUSY忙標(biāo)志位置位。以一個(gè)長字(4字節(jié))為單位地寫入,每個(gè)長字之間必須檢查WAIT標(biāo)志位,當(dāng)WAIT標(biāo)志位置位時(shí),表示已完成前一個(gè)長字的寫入,可以寫入后一個(gè)長字。在當(dāng)前塊數(shù)據(jù)寫完之后,BLKWRT控制位必須清零,且在一個(gè)塊的寫入之前必須置位。當(dāng)BUSY標(biāo)志位清零后,表示當(dāng)前塊已完成寫入操作,可以對下一塊執(zhí)行寫入操作。圖8.1.5 長字塊寫入周期時(shí)序圖8.1 Flash控制器3. Flash控制器中斷Flash控制器有兩個(gè)中斷源:KEYV和

16、ACCVIFG。當(dāng)產(chǎn)生非法訪問時(shí),ACCVIFG標(biāo)志位置位。當(dāng)Flash寫入或擦除操作之后,使能ACCVIE控制位時(shí),ACCVIFG標(biāo)志位將產(chǎn)生中斷請求,ACCVIE控制位位于特殊功能寄存器SFRIE1內(nèi),且ACCVIFG標(biāo)志位來源于不可屏蔽中斷(NMI)向量,所以當(dāng)ACCVIFG請求中斷時(shí),GIE控制位無須置位。當(dāng)利用錯(cuò)誤的密碼配置Flash控制器寄存器時(shí),將置位KEYV密鑰錯(cuò)誤標(biāo)志位,此時(shí)將立即產(chǎn)生PUC復(fù)位信號(hào),系統(tǒng)將會(huì)被復(fù)位。8.1 Flash控制器4. Flash存儲(chǔ)器編程方法對MSP430 Flash型單片機(jī)有3種燒寫程序的方法:通過JTAG接口編程、通過BSL引導(dǎo)加載程序編程和通

17、過用戶自定義方式編程,所有方式都支持在線編程。MSP430單片機(jī)CPU對Flash存儲(chǔ)器的在線和外部用戶自定義寫入方式如圖8.1.6所示。用戶可以選擇通過UART、SPI等方式進(jìn)行編程。用戶可以自行開發(fā)軟件用于接收數(shù)據(jù)或?qū)lash存儲(chǔ)器進(jìn)行編程。由于這種編程方式是由用戶定義開發(fā)的,所以它完全能夠用戶化,從而符合用戶編程、擦除或者更新Flash存儲(chǔ)器的實(shí)際應(yīng)用需求。圖8.1.6 用戶自定義編程方式示意圖8.1 Flash控制器8.1.4 Flash控制器寄存器Flash控制器寄存器列表如表8.1.3所示。FCTLx控制寄存器是一個(gè)16位具有密碼保護(hù)的讀/寫寄存器。在讀或?qū)懺L問時(shí),必須使用字指令

18、。在寫操作時(shí),高字節(jié)必須寫入密碼0A5h。若對FCTLx控制寄存器高位寫入0A5h以外的其他值,將引起密鑰錯(cuò)誤,KEYV標(biāo)志將置位并產(chǎn)生一個(gè)PUC復(fù)位信號(hào)。讀取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)容復(fù)制到信息段D內(nèi)。#include char value; / 聲明一個(gè)8位變量void write_SegC(char value);void copy_C2D(void);void main(void) WDTCTL = WDTPW+WDTHOLD; / 關(guān)閉看門狗 value = 0; / 給變量一個(gè)初始值 while(1) write_SegC(value+); / 寫信息段C copy_C2D(); / 將信息段C的內(nèi)容復(fù)制到信息段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操作期間不允許中斷,否則將導(dǎo)致不可預(yù)計(jì)的錯(cuò)誤 *Flash_ptr = 0; / 空寫,啟動(dòng)擦除 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(); / 啟動(dòng)全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復(fù)Flash鎖定位,保護(hù)數(shù)據(jù)8.1 Flash控制器/將信息段C的內(nèi)容復(fù)制到信息段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操作期間不允許中斷,否則將導(dǎo)致不可預(yù)計(jì)的錯(cuò)誤 *Flash_ptrD = 0; / 空寫,啟動(dòng)擦除 while(FCTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+WRT; / 采用字節(jié)/字寫入模式 for (i = 0; i 128; i+) *Flash_ptrD+ = *Flash_ptrC+; / 將信息段C的內(nèi)容復(fù)制到信息段D內(nèi) while(FCTL3 & BUSY

23、); / 等待寫除操作完成 _EINT(); / 啟動(dòng)全局中斷 FCTL1 = FWKEY; / Flash退出寫模式 FCTL3 = FWKEY+LOCK; / 恢復(fù)Flash鎖定位,保護(hù)數(shù)據(jù)8.1 Flash控制器8.2 RAM控制器8.2.1 RAM控制器介紹RAM存儲(chǔ)器一般可分為4段,每段最小2kB。MSP430F5529單片機(jī)的RAM共8kB,另外還有一段2kB的UAB RAM空間。每個(gè)段可通過RAM控制寄存器RCCTL0中的RCRSxOFF控制位進(jìn)行控制。RCCTL0寄存器由密碼保護(hù),只有在字寫入模式下寫入正確的密碼后,才可以修改RCCTL0寄存器的內(nèi)容。8.2.2 RAM控制器操

24、作1. 活動(dòng)模式在活動(dòng)模式下,RAM存儲(chǔ)器可以隨時(shí)進(jìn)行讀/寫。如果某段的RAM地址需要保存一些數(shù)據(jù),那么不能關(guān)閉該RAM段。2. 低功耗模式在低功耗模式下,CPU處于關(guān)閉狀態(tài)。一旦CPU被關(guān)閉,RAM立即進(jìn)入待機(jī)模式以減少漏電流。3. RAM關(guān)閉模式RAM存儲(chǔ)器內(nèi)的每一段都可以通過置位各自的RCRSxOFF控制位獨(dú)立關(guān)閉。讀取關(guān)閉的RAM段,返回的數(shù)據(jù)是0。即使該段被重新上電,之前存儲(chǔ)在關(guān)閉的RAM段內(nèi)的所有數(shù)據(jù)都會(huì)丟失,無法讀取。4. 堆棧指針RAM段程序堆棧位于RAM空間,如果需要執(zhí)行中斷服務(wù)程序,不能關(guān)閉保存堆棧的RAM段,否則將進(jìn)入低功耗模式。5. USB緩沖區(qū)在具有USB模塊的MSP

25、430單片機(jī)中,USB緩沖區(qū)在RAM內(nèi)。第7段RAM是專門為USB緩沖使用的。如果不需要USB操作或在正常操作中沒有使用時(shí),可以通過置位RCRS7OFF控制位關(guān)閉這個(gè)RAM段。8.2.3 RAM控制器寄存器RAM控制器僅具有一個(gè)控制寄存器RCCTL0,為16位寄存器,初始狀態(tài)為8900h,具體介紹如下:15141312111098RCKEY 讀出是為96h,寫入時(shí)必須為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控制器的特性包括: 最高可達(dá)8個(gè)獨(dú)立的傳輸通道,不同系列的MSP430單片機(jī)所具有的DMA傳輸通道不同,本節(jié)介紹具有3通道的DAM控制器結(jié)構(gòu); DMA通道優(yōu)先級(jí)可配置; 每次傳輸僅需要兩個(gè)MCLK時(shí)鐘周期; 具有字節(jié)、字、字節(jié)和字混合傳輸能力; 塊方式傳輸可達(dá)65536個(gè)字或字節(jié); 可選擇配置觸發(fā)源; 觸發(fā)方式可選邊沿觸發(fā)或電平觸發(fā); 4種傳輸尋址方式固定地址到固定地址、固定

27、地址到塊地址、塊地址到固定地址及塊地址到塊地址; 具有單個(gè)、塊或者突發(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所示。對于每個(gè)DMA通道來說,其尋址模式都可獨(dú)立配置,例如,通道0可以配置成在兩個(gè)固定地址間傳輸,而通道1則可配置成在兩個(gè)塊地址間傳輸。尋址模式的配置可通過DMASRCINCR和DMADSTINCR控制位實(shí)現(xiàn),DMASRCINCR控制位可選擇每次

28、數(shù)據(jù)傳輸完成后源地址增大、減小或不變,DMADSTINCR控制位可選擇每次數(shù)據(jù)傳輸完成后目標(biāo)地址增大、減少還是不變。圖8.3.2 DMA尋址方式8.3 DMA控制器2. DMA傳輸模式DMA控制器可通過DMADT控制位選擇6種傳輸模式,具體配置如表8.3.1所示,每個(gè)通道都可獨(dú)立配置其傳輸模式。DMA傳輸模式和尋址方式是分別定義的,任何尋址方式都可用于任何傳輸模式。通過DMAxCTL控制寄存器的DSTBYTE和SRCBYTE控制位可以選擇源地址和目標(biāo)地址之間傳輸?shù)臄?shù)據(jù)類型:字、字節(jié)或字節(jié)和字組合。DMADT傳 輸 模 式描 述000單次傳輸每次傳輸都需要單獨(dú)觸發(fā)。DMAxSZ規(guī)定的傳輸完畢后,

29、DMAEN位自動(dòng)清零001塊傳輸一次觸發(fā)可以傳輸整個(gè)數(shù)據(jù)塊,塊傳輸結(jié)束后,DMAEN位自動(dòng)清零010,111突發(fā)塊傳輸CPU和塊傳輸交叉運(yùn)行。突發(fā)塊傳輸結(jié)束后,DMAEN位自動(dòng)清零100重復(fù)單次傳輸每次傳輸需要一次觸發(fā),傳輸結(jié)束后,DMAEN 仍保持使能101重復(fù)塊傳輸一次觸發(fā)傳輸整個(gè)塊數(shù)據(jù),傳輸結(jié)束后,DMAEN位仍保持使能110,111重復(fù)突發(fā)塊傳輸CPU和塊傳輸交叉運(yùn)行,傳輸結(jié)束后,DMAEN位仍保持使能表8.3.1 DMA傳輸模式列表8.3 DMA控制器(1)單次傳輸在單次傳輸中,每次傳輸都需要一次單獨(dú)觸發(fā),單次傳輸狀態(tài)示意圖如圖8.3.3所示。圖8.3.3 單次傳輸狀態(tài)示意圖8.3

30、DMA控制器(2)塊傳輸模式在塊傳輸模式中,每次觸發(fā)可以傳輸一個(gè)數(shù)據(jù)塊。當(dāng)一個(gè)塊傳輸完成后,DMAEN位被復(fù)位。如果需要再次傳輸,必須將DMAEN置位。在傳輸某個(gè)塊數(shù)據(jù)期間,其他的塊傳輸請求將被忽略。塊傳輸狀態(tài)示意圖如圖8.3.4所示。圖8.3.4 塊傳輸狀態(tài)示意圖8.3 DMA控制器(3)突發(fā)塊傳輸模式在突發(fā)塊傳輸模式中,數(shù)據(jù)傳輸與CPU活動(dòng)交叉進(jìn)行。在該模式下,當(dāng)塊傳輸4字節(jié)或字后,CPU將可以運(yùn)行2個(gè)MCLK時(shí)鐘周期,而不是等待整個(gè)塊傳輸完畢后才恢復(fù)工作。在突發(fā)塊傳輸模式下,CPU的利用率為20%。在突發(fā)塊傳輸結(jié)束之后,DMAEN將被清除,CPU的利用率可達(dá)100%。當(dāng)一個(gè)突發(fā)塊傳輸被觸

31、發(fā)后,將忽略塊數(shù)據(jù)傳輸過程中產(chǎn)生的其他觸發(fā)信號(hào)。突發(fā)塊傳輸模式狀態(tài)示意圖如圖8.3.5所示。圖8.3.5 突發(fā)塊傳輸模式狀態(tài)示意圖8.3 DMA控制器 3. DMA傳輸初始化 每個(gè)DMA通道都可通過DMAxTSEL控制位獨(dú)立配置觸發(fā)源。只有當(dāng)DMACTLx寄存器中的DMAEN控制位為0時(shí),才可以修改DMAxTSEL位,否則可能會(huì)產(chǎn)生不可預(yù)料的DMA觸發(fā)事件。4. DMA傳輸事件觸發(fā)方式MSP430單片機(jī)的DMA控制器支持兩種信號(hào)觸發(fā)方式。(1)邊沿觸發(fā)方式當(dāng)DMALEVEL控制位復(fù)位時(shí),觸發(fā)信號(hào)的上升沿可以觸發(fā)DMA操作。(2)電平觸發(fā)方式當(dāng)DMALEVEL控制位置位時(shí),為高電平觸發(fā)方式。當(dāng)控

32、制位DMALEVEL和DMAEN被置位,并且觸發(fā)信號(hào)源也為高電平時(shí),才能觸發(fā)DMA操作。在電平觸發(fā)方式下,為了完成塊或突發(fā)塊傳輸,在傳輸過程中觸發(fā)信號(hào)必須始終保持高電平。如果觸發(fā)信號(hào)變低,DMA控制器將停止傳輸并保持當(dāng)前狀態(tài);當(dāng)觸發(fā)信號(hào)重新變高或者軟件修改了DMA寄存器,DMA控制器將從觸發(fā)信號(hào)變低時(shí)的狀態(tài)繼續(xù)傳輸。當(dāng)DMALEVEL=1時(shí),建議操作模式選擇控制位DMADTx=0,1,2,3,因?yàn)樵谟|發(fā)DMA操作后,DMAEN位能夠自動(dòng)復(fù)位。需要注意的是,只有應(yīng)用外部觸發(fā)源DMAE0時(shí),才需要采用電平觸發(fā)方式,其余觸發(fā)事件應(yīng)采用邊沿觸發(fā)方式。8.3 DMA控制器5. 停止DMA傳輸有兩種方法可

33、以停止正在進(jìn)行的DMA傳輸:置位ENNMI控制位,通過不可屏蔽中斷事件可以停止DMA傳輸;通過清除DMAEN位來停止突發(fā)塊傳輸模式。6. DMA通道優(yōu)先級(jí)默認(rèn)的DMA通道優(yōu)先級(jí)為DMA0DMA1DMA2,如果有多個(gè)DMA傳輸請求同時(shí)發(fā)生,有最高優(yōu)先級(jí)的通道最先完成傳輸操作,然后是第二優(yōu)先級(jí)的通道,再然后是第三優(yōu)先級(jí)的通道。在傳輸?shù)倪^程中,如果觸發(fā)了更高優(yōu)先級(jí)的通道,當(dāng)前正在傳輸?shù)耐ǖ酪膊粫?huì)停止,等到當(dāng)前傳輸操作結(jié)束后,具有較高優(yōu)先級(jí)的通道才開始傳輸。DMA通道優(yōu)先級(jí)可以通過ROUNDROBIN控制位來配置。當(dāng)ROUNDROBIN=1時(shí),DMA控制器工作在循環(huán)優(yōu)先級(jí)模式下,正在進(jìn)行傳輸?shù)耐ǖ缊?zhí)行

34、完畢之后,優(yōu)先級(jí)降為最低,其他通道的優(yōu)先級(jí)順序保持不變,如表8.3.3所示。DMA優(yōu)先級(jí)正在進(jìn)行傳輸?shù)耐ǖ纻鬏斖瓿芍蟮膬?yōu)先級(jí)DMA0DMA1DMA2DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0表8.3.3 DMA優(yōu)先級(jí)8.3 DMA控制器7. DMA傳輸周期在各種DMA傳輸模式下,DMA開始傳輸之前都需要1個(gè)或2個(gè)MCLK時(shí)鐘來實(shí)現(xiàn)同步,同步之后每個(gè)字節(jié)或字的傳輸僅需要2個(gè)MCLK時(shí)鐘周期,每次傳輸結(jié)束都要有1個(gè)周期的等待時(shí)間。因?yàn)镈MA使用的是MCLK,所以DMA的周期決定于MSP430單片

35、機(jī)的工作模式和系統(tǒng)時(shí)鐘設(shè)置。如果MCLK時(shí)鐘源處于活動(dòng)狀態(tài),而CPU關(guān)閉,則DMA傳輸直接使用MCLK時(shí)鐘源而無須重新激活CPU。如果MCLK時(shí)鐘源也被關(guān)閉,那么DMA會(huì)臨時(shí)用DCOCLK啟動(dòng)MCLK時(shí)鐘源,傳輸結(jié)束后CPU仍處于關(guān)閉階段,MCLK時(shí)鐘源也將被關(guān)閉。在各種模式下,DMA傳輸最大周期如表8.3.4所示,其中額外的5ms是啟動(dòng)DCOCLK所用的時(shí)間。CPU工作模式時(shí) 鐘 源DMA傳輸最大周期活動(dòng)狀態(tài)MCLK=DCOCLK4MCLK周期活動(dòng)狀態(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控制器中斷每個(gè)DMA通道都有自己的中斷標(biāo)志位DMAIFG。在任何傳輸模式下,只要DMAxSZ寄存器減計(jì)數(shù)到零,則相應(yīng)通道的中斷標(biāo)志位就被置位。如果與之對應(yīng)的DM

37、AIE和GIE置位,則可以產(chǎn)生中斷請求。9. ADC12模塊使用DMA控制器內(nèi)部集成了DMA控制器的MSP430單片機(jī)能夠自動(dòng)地將ADC12MEMx寄存器的數(shù)據(jù)傳輸?shù)狡渌胤?。DMA傳輸不需要CPU參與,獨(dú)立于任何低功耗模式。DMA控制器增加了ADC12模塊的吞吐量,在數(shù)據(jù)傳輸過程中CPU也能繼續(xù)保持低功耗模式。DMA傳輸能夠被任何ADC12IFGx標(biāo)志位觸發(fā)。當(dāng)CONSEQx=0,2時(shí),ADC12MEMx對應(yīng)的ADC12IFGx標(biāo)志位能夠觸發(fā)DMA傳輸。當(dāng)CONSEQx=1,3時(shí),序列中最后一個(gè)ADC12MEMx對應(yīng)的ADC12IFGx標(biāo)志位觸發(fā)DMA傳輸。當(dāng)DMA控制器訪問相應(yīng)的ADC12

38、MEMx時(shí),ADC12IFGx標(biāo)志位會(huì)自動(dòng)清除。8.3 DMA控制器8.3.3 DMA控制器寄存器3通道DMA控制器共有16個(gè)寄存器,包括3個(gè)DMA控制寄存器、每個(gè)通道有4個(gè)控制寄存器和1個(gè)中斷向量寄存器。8.3.4 DMA控制器應(yīng)用舉例【例8.3.1】 利用DMA0通道采用重復(fù)塊傳輸模式將大小為16字的數(shù)據(jù)塊從1C00h1C1Fh單元傳輸?shù)?C20h1C3Fh。程序中每次傳輸時(shí)P1.0都為高電平,之后通過置位DMAREQ控制位啟動(dòng)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è)置目標(biāo)地址 DMA0SZ = 16; / 設(shè)置傳輸塊大小 DMA0CTL = DMADT_5+DMASRCINCR_3+DMADSTINCR_3; / 重復(fù)塊傳輸、源地址和目標(biāo)地址自動(dòng)增計(jì)數(shù)

40、模式 DMA0CTL |= DMAEN; / 使能DMA通道0 while(1) P1OUT |= 0 x01; / 置位P1.0 DMA0CTL |= DMAREQ; / 啟動(dòng)塊傳輸 P1OUT &= 0 x01; / 拉低P10 【例8.3.2】 利用DMA0通道采用重復(fù)單次傳輸模式將ADC12的A0通道采樣的數(shù)據(jù)保存到全局變量中。ADC12采樣觸發(fā)信號(hào)由TB0定時(shí)器定時(shí)產(chǎn)生,ADC12IFG0標(biāo)志位觸發(fā)DMA傳輸,程序代碼如下:#include unsigned int DMA_DST; / 定義全局變量用于存儲(chǔ)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è)為定時(shí)器TB輸出功能 P5DIR |= BIT7; / P5.7設(shè)為輸出8.3 DMA控制器 P6SEL |= BIT0; / 使能A0輸入通道 TBCCR0 = 0 xFFFE; TBCCR1 = 0 x8000; TBCCTL1 = OUTMOD_3; / CCR1工作在置位/復(fù)位模式 TBCTL = TBSSEL_2+MC_1+TBCLR; / 參考時(shí)鐘為SMCLK,TB工作在增/減計(jì)數(shù)模式下

42、 ADC12CTL0 = ADC12SHT0_15+ADC12MSC+ADC12ON;/ 打開ADC,設(shè)置采樣時(shí)間 ADC12CTL1 = ADC12SHS_3+ADC12CONSEQ_2; / TBOUT作為采樣觸發(fā)信號(hào),單通道多次采樣 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工作在重復(fù)單次傳輸模式,使能DMA傳輸,目標(biāo)地址自動(dòng)增,使能DMA中斷 DMA0SZ = 1; / 傳輸大小為1個(gè)字 _ _data16_write_addr(unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0); / 設(shè)置源地址8.3 DMA控制器 _ _data16_write_addr(unsigned short) &DMA0DA,(unsigned long) &DMA_DST); / 設(shè)置目標(biāo)地址 _ _bis_SR_regis

44、ter(LPM0_bits + GIE); / 進(jìn)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è)置斷點(diǎn),查看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. 硬件乘法控制器支持的運(yùn)算 無符號(hào)數(shù)乘法; 有符號(hào)數(shù)乘法; 無符號(hào)數(shù)乘加; 有符號(hào)數(shù)乘加; 8位、16位、24位和32位操作數(shù); 飽和模式; 小數(shù)模式; 與16位硬件乘法控制器兼容的8位和16位操作; 不需要符號(hào)擴(kuò)展指令的8位和24位乘法操作。2. 32位硬件乘法控制器的結(jié)構(gòu)框圖32位硬件乘法控制器的結(jié)構(gòu)框圖如圖8.4.1所示。硬件乘法控制器的結(jié)構(gòu)可分為4個(gè)部分:操作數(shù)輸入模塊(圖中)、乘加運(yùn)算模塊(圖中)、運(yùn)算結(jié)果輸出模塊(圖中)及控制寄存器模塊(圖中)。圖8.4.1 硬件乘法控制器的結(jié)構(gòu)框圖8.4 硬件乘法控制器8

46、.4.2 硬件乘法控制器操作硬件乘法控制器支持8位、16位、24位、32位的無符號(hào)數(shù)乘法、無符號(hào)數(shù)乘加、有符號(hào)數(shù)乘法、有符號(hào)數(shù)乘加操作。操作數(shù)的大小由寫入操作數(shù)地址的數(shù)據(jù)確定,操作類型則由第一個(gè)寫入的操作數(shù)類型決定。1. 操作數(shù)寄存器硬件乘法控制器有兩個(gè)32位操作數(shù)寄存器,如圖8.4.1中所示,分別為操作數(shù)OP1和OP2。操作數(shù)OP1定義了12個(gè)寄存器,詳細(xì)介紹如表8.4.1所示,通過操作數(shù)寄存器可將數(shù)據(jù)載入乘法器中并選擇乘法器的工作模式。當(dāng)對給定地址寫入第一個(gè)低字操作數(shù)(前16位數(shù)據(jù))時(shí),就選擇了乘法運(yùn)算的類型,但是,并不開始任何操作。當(dāng)向后綴為32H的高字寄存器寫入第二個(gè)字時(shí),乘法器就認(rèn)為

47、OP1是32位,否則就認(rèn)為是16位。在寫入OP2之前寫入的最后一個(gè)地址定義了第一個(gè)操作數(shù)的長度。OP2寄存器代表第二個(gè)寄存器,當(dāng)?shù)诙€(gè)寄存器寫入完畢,乘法運(yùn)算就開始。一般在取出結(jié)果之前需插入12條指令,以確保運(yùn)算的完成。8.4 硬件乘法控制器2. 結(jié)果寄存器乘法操作的結(jié)果存儲(chǔ)在64位結(jié)果寄存器中,如圖8.4.1中所示,分別為RES0、RES1、RES2和RES3。為了兼容1616的硬件乘法控制器,可以通過RESLO、RESHI和SUMEXT這3個(gè)寄存器訪問8位或16位操作的32位結(jié)果。RESLO寄存器保存計(jì)算結(jié)果的低16位,RESHI寄存器保存高16位,在使用和訪問計(jì)算結(jié)果方面,RES0、RE

48、S1分別與RESLO和RESHI相同。結(jié)果擴(kuò)展寄存器SUMEXT的內(nèi)容取決于乘法器的操作模式,具體描述如表8.4.2所示。MPYC標(biāo)志位反映了乘法器的進(jìn)位,如果沒有選擇小數(shù)模式或飽和模式,則該位可以作為乘法運(yùn)算結(jié)果的第33位或第65位,詳細(xì)說明見表8.4.2。乘法器模式SUMEXT內(nèi)容及含義MPYC內(nèi)容及含義MPYSUMEXT總是為0000hMPYC總是為0MPYS0000h:運(yùn)算結(jié)果為正或零0:運(yùn)算結(jié)果為正或零0FFFFh:運(yùn)算結(jié)果為負(fù)1:運(yùn)算結(jié)果為負(fù)MAC0000h:運(yùn)算結(jié)果沒有進(jìn)位0:運(yùn)算結(jié)果沒有進(jìn)位0001h:運(yùn)算結(jié)果有進(jìn)位1:運(yùn)算結(jié)果有進(jìn)位MACS0000h:運(yùn)算結(jié)果為正或零0:運(yùn)算

49、結(jié)果沒有進(jìn)位0FFFFh:運(yùn)算結(jié)果為負(fù)1:運(yùn)算結(jié)果有進(jìn)位表8.4.2 SUMEXT及MPYC內(nèi)容及含義列表8.4 硬件乘法控制器3. 小數(shù)模式硬件乘法控制器支持“小數(shù)”相乘運(yùn)算。首先介紹硬件乘法控制器所支持的“小數(shù)”表示方法:Q格式。圖8.4.2表示的為Q15格式,其表示的為有符號(hào)16位數(shù)據(jù)格式,最高有效位是符號(hào)位,小數(shù)點(diǎn)后第一位為1/2,之后每一位比前一位的值減小一半。最小的負(fù)數(shù)為08000h,最大的正數(shù)是07FFFh。因此,16位有符號(hào)的Q15格式可以表示從-1.00.999969482的數(shù)??梢酝ㄟ^如圖8.4.3所示的右移小數(shù)點(diǎn)法來增大小數(shù)表示的范圍。16位有符號(hào)的Q14格式可以表示-2

50、.01.999938965的數(shù)。當(dāng)MPY32CTL0控制寄存器中的MPYFRAC控制位為1時(shí),硬件乘法控制器小數(shù)模式使能。兩個(gè)16位Q15格式數(shù)據(jù)相乘,結(jié)果以16位Q15格式存儲(chǔ)在RES1結(jié)果寄存器中,這個(gè)結(jié)果并不是最終的小數(shù)相乘運(yùn)算結(jié)果,最終的運(yùn)算結(jié)果需要將RES1寄存器左移一位;兩個(gè)32位Q31格式的數(shù)據(jù)相乘,其結(jié)果可以通過讀取RES2和RES3結(jié)果寄存器獲得。圖8.4.2 Q15格式表示圖圖8.4.3 Q14格式標(biāo)示圖8.4 硬件乘法控制器4. 飽和模式在一般有符號(hào)數(shù)運(yùn)算模式下,硬件乘法控制器不會(huì)自動(dòng)檢測上溢和下溢的發(fā)生。當(dāng)兩個(gè)負(fù)數(shù)的和產(chǎn)生正數(shù)范圍內(nèi)的結(jié)果時(shí),發(fā)生下溢;當(dāng)兩個(gè)正數(shù)的和產(chǎn)生

51、負(fù)數(shù)范圍內(nèi)的結(jié)果時(shí),產(chǎn)生上溢。但是,在飽和模式下,硬件乘法控制器可以防止有符號(hào)數(shù)操作結(jié)果的上溢或下溢。若控制寄存器MPY32CTL0中的MPYSAT控制位被置位,將使能飽和模式。如果發(fā)生上溢,運(yùn)算結(jié)果將被設(shè)置成正的最大有效值;如果發(fā)生下溢,運(yùn)算結(jié)果將被設(shè)置成負(fù)的最大有效值。15141312111098保留MPYDLY32MPYDLYWRTEN76543210MPYOP2_32MPYOP1_32MPYMxMPYSATMPYFRAC保留MPYC5. 硬件乘法控制器控制寄存器硬件乘法控制器具有一個(gè)控制寄存器MPY32CTL0,其在硬件乘法控制器結(jié)構(gòu)框圖中的位置如圖8.4.1中所示。下面將詳細(xì)介紹硬件

52、乘法控制器控制寄存器各控制位的含義。8.4 硬件乘法控制器 MPYDLY32:第9位,寫操作延遲控制位。 0:寫操作延遲直到64位運(yùn)算結(jié)果(RES0RES3)可用; 1:寫操作延遲直到32位運(yùn)算結(jié)果(RES0RES1)可用。 MPYDLYWRTEN:第8位,延遲寫操作控制位。若給控制位置位,所有對MPY32寄存器的寫操作都要延遲到64位(MPYDLY32=0)或32位(MPYDLY32=1)運(yùn)算結(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無符號(hào)數(shù)乘法; 01:MPYS有符號(hào)數(shù)乘法; 10:MAC無符號(hào)數(shù)乘加; 11:MACS有符號(hào)數(shù)乘加。 MPYSAT:第3位,飽和模式使能控制位。 0:飽和模式禁止; 1:飽和模式使能。 MPYFRAC:第2位,小數(shù)模式使能控制位。 0:小數(shù)模式禁止; 1:小數(shù)模式使能。MPYC:第0位,硬件乘法控制器進(jìn)位標(biāo)志位。如果未選擇飽和模式或小數(shù)模式,該標(biāo)志位可作為乘法運(yùn)算結(jié)果的第33位或第65位,因?yàn)楫?dāng)切換到飽和模式或小數(shù)模式時(shí)該標(biāo)志位不變化。該標(biāo)志位置位表示運(yùn)算結(jié)果有進(jìn)位,否則清零表示運(yùn)算結(jié)果沒有進(jìn)位。8.4 硬件乘法控制器8.4.3 硬件乘法控制器程序舉例【例8.4.1】 編程實(shí)現(xiàn)1616無符號(hào)乘法運(yùn)算。#include void main(void) WDTCTL = WDTPW+WDTHOLD; / 關(guān)閉看門狗 MPY = 0 x1234; / 載入第一個(gè)無符號(hào)操作數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論