日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

DSP28335入门教程:ADC的使用

發布時間:2024/1/8 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DSP28335入门教程:ADC的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

老笨來講講dsp28335的ADC的最基本用法。

先來看看硬件電路連接圖:

程序

#include "DSP28x_Project.h"#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocks#define BUFF_SIZE 4 Uint16 SampleTable[BUFF_SIZE];main() {Uint16 i;InitSysCtrl();EALLOW; //允許編輯受保護的寄存器SysCtrlRegs.HISPCP.all = 0x3; //HSPCLK = SYSCLKOUT/6 = 25.0 MHzEDIS; //禁止編輯DINT; //關中斷InitPieCtrl(); //復位PIE控制寄存器為0IER = 0x0000; //清除所有CPU中斷標識IFR = 0x0000;InitPieVectTable(); //初始化中斷向量表InitAdc(); //開啟ADC時鐘,校準,ADC電路上電AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 級聯模式AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; //設置最大通道數為n + 1,從通道0開始,按照順序算AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //通道(管腳)選擇 ADCINA0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //ADCINA1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8; //ADCINB0AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x9; //ADCINB1AdcRegs.ADCTRL1.bit.CONT_RUN = 1; //連續運行模式AdcRegs.ADCTRL2.all = 0x2000; //1 << 13; Start SEQ1. 級聯模式下不需要開啟SEQ2for(i = 0; i < BUFF_SIZE; i++){SampleTable[i] = 0;}for(;;){while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {} //等待轉換完成,級聯不需要等待INT_SEQ2AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; //清除中斷標識SampleTable[0] = AdcRegs.ADCRESULT0>>4;SampleTable[1] = AdcRegs.ADCRESULT1>>4;SampleTable[2] = AdcRegs.ADCRESULT2>>4;SampleTable[3] = AdcRegs.ADCRESULT3>>4;} }

?

程序解析

SysCtrlRegs.HISPCP.all = 0x3;

?

?

這個時鐘的設置請看下圖

?再來看看是如何選擇管腳的。dsp28335有1個12位adc共16個通道CONV00-CONV15,分為四個組,

ADCCHSELSEQ1-4,對應的管腳為ADCINA0-ADCINA7,ADCINB0-ADCINB7,在級聯模式下就直

接設置對應的數值即可,現在仔細體會以下代碼,應該不難理解:

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; //設置最大通道數為n + 1,從通道0開始,按照順序算AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //管腳為ADCINA0,轉換結果在AdcRegs.ADCRESULT0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //ADCINA1,AdcRegs.ADCRESULT1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8; //ADCINB0,AdcRegs.ADCRESULT2AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x9; //ADCINB1,AdcRegs.ADCRESULT3AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xa; //ADCINB1,AdcRegs.ADCRESULT4AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1; //ADCINA1,AdcRegs.ADCRESULT5AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0xe; //ADCINB6,AdcRegs.ADCRESULT8AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0xf; //ADCINB7,AdcRegs.ADCRESULT12

注意一下MAX_CONV1 = 3,最大通道數為3 + 1 = 4通道,也就是只轉換CONV00,CONV01,CONV02,CONV03,結果存在ADCRESULT0-3中,ADCRESULT4及往后讀出來為零。以此類推,MAX_CONV1 = 6,則只轉換CONV00-CONV06。

?

觀察結果

打開Expression窗口,添加SampleTable變量觀察。用一字螺絲刀調節變阻器,可以看到數值相應變化。

?

好,老笨就說到這了。

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的DSP28335入门教程:ADC的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。