




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-.z.MSP430程序庫<十四>DMA程序庫直接存儲器存取(DMADirectMemoryAccess)方式是用硬件實現存儲器與存儲器之間或存儲器與I\O設備之間直接進展高速數據傳送,不需要CPU的干預。這種方式通常用來傳送數據塊。MSP430f16*系列單片機內部含有DMA模塊,而且幾乎內部所有外設都可以觸發DMA開場存取數據。這里實現了這個模塊的程序通用的函數庫,方便使用。硬件介紹:MSP430F15*/16*系列單片機具有DMA控制器,從而能夠為數據高速傳輸提供保證。例如,通過DMA控制器可以直接將ADC轉換存貯器的內容傳到RAM單元。MSP430系列單片機擴展的DMA具有來之所有外設的觸發器,不需要CPU的干預即可提供先進的可配置的數據傳輸能力,從而加速了基于MCU的信號處理進程,DMA傳輸的觸發來源對CPU來說是完全透明的,DMA控制器可在內存與外部及外部硬件之間進展準確的傳輸控制。DMA消除了數據傳輸延遲時間以及各種開銷,從而可以解放16為RISCCPU,以便其將更多的時間用于處理數據,而非執行正在處理的任務。MSP430F16*系列單片機的DMA模塊有以下特點:數據傳送不需要CPU介入,完全由DMA控制器自行管理。在整個地址空間范圍內傳輸數據,塊方式傳輸可達65536字節;能夠提高片內外設數據吞吐能力,實現高速傳輸,每個字或者字節的傳輸僅需要2個MCLK;減少系統功耗,即使在片內外設進展數據輸入或輸出時,CPU也可以處于超低功耗模式而不需喚醒;字節和字數據可以混合傳送:DMA傳輸可以是字節到字節、字到字、字節到字或者字到字節。當字到字節傳輸時,只有字中較低字節能夠傳輸,當從字節到字傳輸時,傳輸到字的低字節,高字節被自動清零;四種傳輸尋址模式:固定地址到固定地址、固定地址到塊地址、塊地址到固定地址以及塊地址到塊地址;觸發方式靈活:邊沿或者電平觸發。單個、塊或突發塊傳輸模式:每次觸發DMA操作,可以根據需要傳輸不同規模的數據DMA的四種尋址模式如下列圖所示:DMA控制器模塊:3個獨立的傳輸通道:通道0、通道1和通道2。每個通道都有源地址存放器、目的地址存放器、傳送數據長度存放器和控制存放器。每個通道的觸發請求可以分別允許和制止;可配置的通道優先權:優先權裁決模塊,傳輸通道的優先級可以調整,對同時有觸發請求的通道進展優先級裁決,確定哪個通道的優先級最高。MSP430的DMA控制器可以采用固定優先級,還可以采用循環優先級。程序命令控制模塊,每個DMA通道開場傳輸之前,CPU要編程給定相關的命令和模式控制,以決定DMA通道傳輸的類型;可配置的傳送觸發器:觸發源選擇模塊,DMAREQ〔軟件觸發〕、Timer_ACCR2輸出、Timer_BCCR2輸出、I2C數據接收準備好、I2C數據發送準備好、USART接收發送數據、DAC12模塊DAC12IFG、ADC12模塊的ADC12IFG*、DMA*IFG、DMAE0外部觸發源。并且還具有觸發源擴大能力。DMA有六種傳輸模式:單字或者單字節傳輸;塊傳輸;突發塊傳輸;重復單字或者單字節傳輸;重復塊傳輸;重復突發塊傳輸。前三個,傳輸完成后DMAEN自動復位;再次傳輸時需要重新置位DMAEN位以使能DMA通道。后三個為重復模式,一次傳輸完成后,DMAEN不復位;再次出發時,可以再次啟動數據傳輸。六種傳輸模式通過DMADT*存放器設置:DMADT*TransferModeDescription000SingletransferEachtransferrequiresatrigger.DMAENisautomaticallyclearedwhenDMA*SZtransfershavebeenmade.001BlocktransferApleteblockistransferredwithonetrigger.DMAENisautomaticallyclearedattheendoftheblocktransfer.010,011Burst-blocktransferCPUactivityisinterleavedwithablocktransfer.DMAENisautomaticallyclearedattheendoftheburst-blocktransfer.100RepeatedsingletransferEachtransferrequiresatrigger.DMAENremainsenabled.101RepeatedblocktransferApleteblockistransferredwithonetrigger.DMAENremainsenabled.110,111Repeatedburst-blockCPUactivityisinterleavedwithablocktransfer.transferDMAENremainsenabled.單字或者單字節傳輸:DMA通道被定義為單字或者單字節傳輸模式,每個字或者字節的傳輸都要觸發信號觸發。設置DMADT*=0就定義了單字或者單字節傳輸模式,規定的傳輸完畢后DMAEN位自動去除,如果需要再次傳輸,必須重新置位DMAEN。如果設置DMADT*=4為重復單字或者單字節傳輸模式,DMAEN位一直保持置位,每次觸發伴隨一次傳輸。DMA*SZ存放器保存傳輸的單元個數,如果該存放器為0,則沒有傳輸。傳輸之前DMA*SZ存放器的值寫入到一個臨時的存放器中,每次操作之后DMA*SZ做減操作。當DMA*SZ減為零的時候,它所對應的臨時存放器將原來的值重新置入DMA*SZ,同時相應的DMAIFG標志置位。塊傳輸模式:在塊傳輸模式,每次觸發可以傳輸一個數據塊。設置DMADT*=1為塊傳輸模式,每個數據塊傳輸完畢,DMAEN位自動去除,在觸發傳輸下一個數據塊之前,該位要被重新置位。在傳輸*個數據塊期間,其他的傳輸請求將被忽略。設置DMADT*=5為重復塊傳輸模式,*個數據塊傳輸完畢,DMAEN位仍然保持置位,之后,新的觸發可以引起又一次數據塊傳送。DMA*SZ存放器保存數據塊所包含的單元個數。DMASRCINCR和DMADSTINCR反映在數據塊傳輸過程中的目的地址和源地址的變化情況。在塊傳輸或者重復塊傳輸過程中,DMA*SA,DMA*DA,DMA*SZ存放器的值寫入到對應的臨時存放器中,DMA*SA,DMA*DA存放器所對應的臨時值在塊傳輸過程中增加或者減少,而DMA*SZ在塊傳輸過程中減計數,始終反映當前數據塊還有多少單元沒有傳輸完畢,當DMA*SZ減為0,它所對應的臨時存放器將原來的值重新置入DMA*SZ,同時相應的DMAIFG被置位。在塊傳輸過程中,CPU暫停工作,不參與數據的傳輸。數據塊需要2×MCLK×DMA*SZ個時鐘周期。當每個數據塊傳輸完畢,CPU按照暫停前的狀態重新開場執行。突發塊傳輸模式:這個和塊傳輸模式類似,只不過每傳輸4個字或字節,DMA釋放內部總線,CPU運行2個MCLK周期;在傳輸過程中CPU有20%的執行時間,而塊傳輸需要等DMA完全傳送完之后,CPU方能運行。DMA觸發源:每個通道的觸發源有DMA*TSEL*位進展控制的,這些位必須在DMAEN位為0是進展設置,否則可能出現不可預料的DMA觸發。DMA*TSEL*Operation0000DMAREQbit(softwaretrigger)0001TACCR2CCIFGbit0010TBCCR2CCIFGbit0011UR*IFG0(UART/SPImode),USART0datareceived(I2Cmode)0100UT*IFG0(UART/SPImode),USART0transmitready(I2Cmode)0101DAC12_0CTLDAC12IFGbit0110ADC12ADC12IFG*bit0111TACCR0CCIFGbit1000TBCCR0CCIFGbit1001UR*IFG1bit1010UT*IFG1bit1011Multiplierready1100Noaction1101Noaction1110DMA0IFGbittriggersDMAchannel1DMA1IFGbittriggersDMAchannel2DMA2IFGbittriggersDMAchannel01111E*ternaltriggerDMAE0另外,單片機的中斷程序不影響DMA的傳輸,當DMA傳輸過程中,單片機不響應中外部NMI中斷(必須DMA的控制位ENNMI位為1時響應NMI中斷,否則不予處理)外的所有中斷;必須等待DMA數據傳送完畢之后才運行系統的中斷處理程序。DMA的中斷:數據傳送過程中,DMA*SZ存放器值減為0時,DMA置位DMAIFG,DMA的中斷和DAC12模塊共享中斷向量,使用中斷時需要軟件判斷具體是那個中斷。中斷響應后DMAIFG不會自動復位,使用時必須軟件清零DMAIFG位。DMA的存放器如下:RegisterShortFormRegisterTypeAddressInitialStateDMAcontrol0DMACTL0Read/write0122hResetwithPORDMAcontrol1DMACTL1Read/write0124hResetwithPORDMAchannel0controlDMA0CTLRead/write01E0hResetwithPORDMAchannel0sourceaddressDMA0SARead/write01E2hUnchangedDMAchannel0destinationaddressDMA0DARead/write01E4hUnchangedDMAchannel0transfersizeDMA0SZRead/write01E6hUnchangedDMAchannel1controlDMA1CTLRead/write01E8hResetwithPORDMAchannel1sourceaddressDMA1SARead/write01EAhUnchangedDMAchannel1destinationaddressDMA1DARead/write01EChUnchangedDMAchannel1transfersizeDMA1SZRead/write01EEhUnchangedDMAchannel2controlDMA2CTLRead/write01F0hResetwithPORDMAchannel2sourceaddressDMA2SARead/write01F2hUnchangedDMAchannel2destinationaddressDMA2DARead/write01F4hUnchangedDMAchannel2transfersizeDMA2SZRead/write01F6hUnchanged有關每個存放器的詳細內容參考ti提供的用戶指南。程序實現:DMA的使用主要是DMA存放器的初始設置,設置完成后,DMA接到觸發信號即可自動傳輸數據。設置函數如下:voidDMAInit(charchannel,chartrigger,chartransMode,charsrcMode,chardstMode,unsignedintsrc,unsignedintdst,unsignedintsize){unsignedint*DMA*CTL,*DMA*SA,*DMA*DA,*DMA*SZ;DMACTL0=trigger<<(channel<<2);DMACTL1=0*04;//DMA收到觸發請求時,等待當前指令執行完成后switch(channel)//選擇當前設置哪個DMA通道{case0:DMA*CTL=(unsignedint*)&DMA0CTL;DMA*SA=(unsignedint*)&DMA0SA;DMA*DA=(unsignedint*)&DMA0DA;DMA*SZ=(unsignedint*)&DMA0SZ;break;//指針=0通道控制case1:DMA*CTL=(unsignedint*)&DMA1CTL;DMA*SA=(unsignedint*)&DMA1SA;DMA*DA=(unsignedint*)&DMA1DA;DMA*SZ=(unsignedint*)&DMA1SZ;break;//指針=1通道控制case2:DMA*CTL=(unsignedint*)&DMA2CTL;DMA*SA=(unsignedint*)&DMA2SA;DMA*DA=(unsignedint*)&DMA2DA;DMA*SZ=(unsignedint*)&DMA2SZ;break;//指針=2通道控制}switch(transMode)//設置DMA通道的傳輸模式{case'S':*DMA*CTL=DMADT_0;break;//單次傳輸case's':*DMA*CTL=DMADT_4;break;//重復單次傳輸case'B':*DMA*CTL=DMADT_1;break;//塊傳輸case'b':*DMA*CTL=DMADT_5;break;//重復塊傳輸case'I':*DMA*CTL=DMADT_2;break;//突發塊傳輸交織case'i':*DMA*CTL=DMADT_6;break;//重復突發塊傳輸交織}*DMA*CTL|=(srcMode&0*04)<<2;//源字或字節*DMA*CTL|=(srcMode&0*03)<<8;//源地址改變方式*DMA*CTL|=(dstMode&0*04)<<3;//目的字或字節*DMA*CTL|=(dstMode&0*03)<<10;//目的地址改變方式*DMA*SA=src;*DMA*DA=dst;*DMA*SZ=size;*DMA*CTL|=DMAEN;//DMA使能}函數比擬麻煩,函數內容按參數設置每個存放器。DMACTL0=trigger<<(channel<<2);這個是設置對應channel通道的的參考源,不大明白的可以看下DMACTL0的存放器內容;switch(channel)語句則根據通道設置對應指針指向的存放器;然后對應設置參數即可。當設置成非重復模式時,需要重新置位DMAEN,本程序就函數DMAReEnable實現:voidDMAReEnable(charchannel){switch(channel)//使能對應通道{case0:DMA0CTL|=DMAEN;break;//0通道case1:DMA1CTL|=DMAEN;break;//1通道case2:DMA2CTL|=DMAEN;break;//2通道}}這個函數比擬簡單,只是根據傳入參數設置對應通道的DMAEN位。當設置為軟件觸發時,需要軟件啟動DMA程序如下:voidDMAStart(charchannel){switch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小紅書美妝品牌賬號運營與美妝沙龍服務合同
- 礦山安全勞務派遣服務及責任保障合同
- 文化旅游融合發展補充協議
- 網紅炸雞品牌形象使用權許可合同
- 智能倉儲設備安裝與倉儲信息化升級服務合同
- 金融信貸資產證券化風險控制補充協議
- 創新型科技公司股權價值重估及調整合作協議
- 海外代購商品價格波動風險分擔合同
- 胃腸腫瘤病例多學科討論
- 腎絞痛的治療
- 市政工程監理規劃范本(完整版)
- 艾里遜自動變速箱針腳圖PPT通用課件
- 交管12123駕照學法減分題庫及答案共155題(完整版)
- 5Why分析法經典培訓(43頁)
- 食品物性學-第二章 食品力學性質和流變學基礎
- 2018二建繼續教育(市政公用工程)試題庫(有答案解析)
- 2025年退役士兵轉業軍人2025年考試試題題庫完整版
- 斜屋面瓦安裝施工及方案
- 鋼樓梯鋼結構施工方案
- 手足口病課件.ppt
- 青島市市區公共服務設施配套標準及規劃導則
評論
0/150
提交評論