国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

微控制器無需CPU即可生成同步正弦波與余弦波

發(fā)布時(shí)間:2010-10-25 19:01    發(fā)布者:analog_tech
關(guān)鍵詞: CPU , 同步 , 微控制器 , 余弦波 , 正弦波
嵌入式系統(tǒng)通常需要數(shù)模轉(zhuǎn)換器 (DAC) 生成模擬電壓與波形。DAC 有時(shí)用作嵌入式處理器的外置器件,有時(shí)集成至處理器中。無論哪種情況,CPU 都必須在適當(dāng)時(shí)間將預(yù)期輸出值寫入 DAC。一般情況下我們采用定時(shí)器中斷 CPU寫入預(yù)期值來實(shí)現(xiàn)上述目的。如果 DAC 必須生成周期波形,CPU須從表格寫入下一個(gè)值,遞增數(shù)據(jù)表指針 (table pointer),并且檢查表格邊界,以便確定何時(shí)復(fù)位數(shù)據(jù)表指針。

將周期值寫入 DAC 的過程要求 CPU 開銷保持輸出波形。所需要的 CPU 開銷取決于數(shù)據(jù)表的長(zhǎng)度、輸出波形的頻率以及 CPU 的工作頻率。例如,為了每個(gè)周期采用 32 個(gè)數(shù)據(jù)點(diǎn)生成 1 個(gè) 1kHz 的正弦波,在 CPU 頻率為 1MHz 情況下要求 CPU 每秒能夠處理 32000 個(gè)中斷信號(hào)。處理如此多的中斷僅在中斷之間留下 1000000 / 32000 = 31.25 個(gè) CPU 指令周期。針對(duì)上下文切換與執(zhí)行,如果每個(gè)中斷服務(wù)只需要 15 個(gè) CPU 周期,所需 CPU 開銷就會(huì)達(dá)到近 50%。

如果應(yīng)用要求第二個(gè)模擬輸出波形,那么 CPU 負(fù)載將會(huì)增大,甚至在所需的中斷服務(wù)時(shí)間內(nèi)不能更新兩個(gè) DAC。 MSP430F15x/16x 器件是解決該問題的良好方案。這些器件集成了兩個(gè) DAC 與 1 個(gè) DMA 控制器。DMA 控制器的用途是在無需 CPU 干預(yù)情況下將數(shù)據(jù)從一個(gè)位置轉(zhuǎn)移到另一個(gè)位置。在本例中,DMA 能夠在規(guī)定時(shí)間內(nèi)將數(shù)據(jù)從數(shù)據(jù)表轉(zhuǎn)移到 2 個(gè) DAC。

DMA 控制器具有三條獨(dú)立的通道。每條通道在配置后都可以用于將數(shù)值在任何地址之間進(jìn)行轉(zhuǎn)移。因此,一個(gè)數(shù)據(jù)表可以同時(shí)用于正弦波與余弦波,而兩條 DMA 通道只需存取數(shù)據(jù)表的不同部分,以便形成正弦與余弦輸出。  

此外,每條 DMA 通道都可以獨(dú)立遞增其源地址或目的地址。本例中,每條 DMA通道編程后遞增其源地址,但目的地址不變,始終為其對(duì)應(yīng)的 DAC 數(shù)據(jù)寄存器。

DMA 傳輸次數(shù)也可以配置。在每條 DMA 通道傳輸完已編程數(shù)據(jù)值數(shù)量之后,即可以從最初編程的源地址開始進(jìn)行下一次傳輸,從而使每條 DMA 通道都構(gòu)成一個(gè)帶數(shù)據(jù)表的環(huán)形緩沖區(qū)并生成周期波形。

為移動(dòng)數(shù)據(jù)值,每條 DMA 通道都需要一個(gè)觸發(fā)器。本例中,來自每個(gè) DAC 的中斷標(biāo)記用作其相應(yīng) DMA 通道的觸發(fā)器。如果 2 條通道同時(shí)觸發(fā),則需要對(duì)DMA 通道進(jìn)行優(yōu)先排序,這樣一來,會(huì)在其中一個(gè)接收數(shù)據(jù)的 DAC 中造成延遲,進(jìn)而造成輸出信號(hào)失真,因此應(yīng)單獨(dú)處理 DAC 更新。

這些器件中的每個(gè) DAC 都能通過定時(shí)器觸發(fā),這樣在需要下一個(gè) DAC 數(shù)據(jù)值之前就可以將其加載到 DAC 數(shù)據(jù)寄存器中,當(dāng)定時(shí)器觸發(fā) DAC 時(shí),每個(gè) DAC均能輸出新的值。本例中設(shè)置由 Timer_A1 輸出信號(hào)觸發(fā)每個(gè) DAC。由于 2 個(gè) DAC 采用相同的觸發(fā)信號(hào),因此每個(gè) DAC 的輸出波形相互同步,以便保持相應(yīng)的正弦/余弦關(guān)系。

下面列出完整代碼以及 2 個(gè)輸出波形的示波器畫面。
  
------------------------------------------------------------------------- #define FS_Val 4095

static int Sin_tab[40] = {
       0.500*FS_Val,
       0.598*FS_Val,
       0.691*FS_Val,
       0.778*FS_Val,
       0.854*FS_Val,
       0.916*FS_Val,
       0.962*FS_Val,
       0.990*FS_Val,
       1.000*FS_Val,
       0.990*FS_Val,
       0.962*FS_Val,
       0.916*FS_Val,
       0.854*FS_Val,
       0.778*FS_Val,
       0.691*FS_Val,
       0.598*FS_Val,
       0.500*FS_Val,
       0.402*FS_Val,
       0.309*FS_Val,
       0.222*FS_Val,
       0.146*FS_Val,
       0.084*FS_Val,
       0.038*FS_Val,
       0.010*FS_Val,
       0.000*FS_Val,
       0.010*FS_Val,
       0.038*FS_Val,
       0.084*FS_Val,
       0.146*FS_Val,
       0.222*FS_Val,
       0.309*FS_Val,
       0.402*FS_Val,
       0.500*FS_Val,
       0.598*FS_Val,
       0.691*FS_Val,
       0.778*FS_Val,
       0.854*FS_Val,
       0.916*FS_Val,
       0.962*FS_Val,
       0.990*FS_Val
};

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  ADC12CTL0 = REF2_5V + REFON;          // Internal 2.5V ref

//Setup DMA triggers for both DMA channels
  DMACTL0 = DMA0TSEL_5 + DMA1TSEL_5;    // DAC12IFG trigger

// Setup DMA0
  DMA0SA = (int) Sin_tab;               // Source block address
  DMA0DA = DAC12_0DAT_;                 // Destination single address
  DMA0SZ = 0x20;                        // Block size
  DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt single ch, inc src, word-word

//Setup DAC0    Load with Timer_A, group with DAC1
  DAC12_0CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_2 + DAC12IFG + DAC12ENC + DAC12GRP;

//Setup DMA1
  DMA1SA = (int) Sin_tab+8;             // Source block address
  DMA1DA = DAC12_1DAT_;                 // Destination single address
  DMA1SZ = 0x20;                        // Block size
  DMA1CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt single ch, inc src, word-word

//Setup DAC1   Load with Timer_A
  DAC12_1CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_2 + DAC12IFG + DAC12ENC;

//Setup Timer_A
  CCTL1 = OUTMOD_3;                     // CCR1 set/reset
  CCR1 = 1;                             // CCR1 PWM Duty Cycle     
  CCR0 = 3;                             // Clock period of CCR0
  TACTL = TASSEL_1 + MC_1;              // ACLK, upmode

//Turn Off CPU forever
  LPM3;
}  
-------------------------------------------------------------------------

最后,每次 DMA 傳輸都會(huì)強(qiáng)行占用 2 個(gè) CPU 時(shí)鐘周期。雖然 CPU 并不用于傳輸操作,但時(shí)鐘周期的占用會(huì)造成必要的 CPU 開銷且大于零。不過,對(duì)于 1kHz 的正弦波來說,假設(shè)有 32 個(gè)數(shù)據(jù)點(diǎn),第 31.25個(gè)數(shù)據(jù)點(diǎn)之外的 2 個(gè)周期僅需要 6.4%的開銷,相比之下不使用 DMA 時(shí)開銷達(dá)到近 50%。另外,產(chǎn)生 2 個(gè)波形只需要 4個(gè)周期或 7.8% 的開銷,而在不使用 DMA 時(shí)幾乎不可能產(chǎn)生 2 個(gè) 1kHz 正弦波。
本文地址:http://m.qingdxww.cn/thread-34241-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费看日本羞羞视频 | 免费av片在线观看网站 | juy在线播放| 国产一区二区三区不卡在线观看 | 欧美成人在线影院 | 亚洲特黄大黄一级毛片 | 成 人 亚洲 综合天堂 | 欧美国产成人免费观看永久视频 | 欧美亚洲三级 | 向日葵app看片版免费观看 | 六月激情婷婷 | 最新日本免费一区二区三区中文 | 操操操日日 | 最近高清免费观看日本 | 亚洲欧美日韩成人一区在线 | 殴美一级视频 | www.国产成人| 日本在线播放视频 | 能看的毛片 | 久久久国产精品免费看 | 99热国产免费 | 自拍偷拍视频网 | 99视频在线 | 久久综合五月天婷婷伊人 | 日本欧美在线播放 | 天堂男人在线 | 国产精品剧情原创麻豆国产 | 日本一区中文字幕 | 天堂在线最新版在线www | 欧美资源网 | 韩国毛片免费 | 日本三级网站在线线观看 | 亚洲不卡一区二区三区 | 亚洲欧洲尹人香蕉综合 | 国产一区二区三区在线观看视频 | 99爱这里只有精品 | 日韩欧美在线观看视频 | 神马不卡影视 | 二级特黄绝大片免费视频大片 | 青青青免费在线视频 | 久久人成|