DSP28335入门教程:ADC的使用
生活随笔
收集整理的這篇文章主要介紹了
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的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何进行AI换脸,AI换脸从 “0“ 到
- 下一篇: 自旋锁的原理及使用