DSP28335入门教程:ADC的使用
老笨來(lái)講講dsp28335的ADC的最基本用法。
先來(lái)看看硬件電路連接圖:
程序
#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; //允許編輯受保護(hù)的寄存器SysCtrlRegs.HISPCP.all = 0x3; //HSPCLK = SYSCLKOUT/6 = 25.0 MHzEDIS; //禁止編輯DINT; //關(guān)中斷InitPieCtrl(); //復(fù)位PIE控制寄存器為0IER = 0x0000; //清除所有CPU中斷標(biāo)識(shí)IFR = 0x0000;InitPieVectTable(); //初始化中斷向量表InitAdc(); //開啟ADC時(shí)鐘,校準(zhǔn),ADC電路上電AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 級(jí)聯(lián)模式AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; //設(shè)置最大通道數(shù)為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; //連續(xù)運(yùn)行模式AdcRegs.ADCTRL2.all = 0x2000; //1 << 13; Start SEQ1. 級(jí)聯(lián)模式下不需要開啟SEQ2for(i = 0; i < BUFF_SIZE; i++){SampleTable[i] = 0;}for(;;){while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {} //等待轉(zhuǎn)換完成,級(jí)聯(lián)不需要等待INT_SEQ2AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; //清除中斷標(biāo)識(shí)SampleTable[0] = AdcRegs.ADCRESULT0>>4;SampleTable[1] = AdcRegs.ADCRESULT1>>4;SampleTable[2] = AdcRegs.ADCRESULT2>>4;SampleTable[3] = AdcRegs.ADCRESULT3>>4;} }?
程序解析
SysCtrlRegs.HISPCP.all = 0x3;?
?
這個(gè)時(shí)鐘的設(shè)置請(qǐng)看下圖
?再來(lái)看看是如何選擇管腳的。dsp28335有1個(gè)12位adc共16個(gè)通道CONV00-CONV15,分為四個(gè)組,
ADCCHSELSEQ1-4,對(duì)應(yīng)的管腳為ADCINA0-ADCINA7,ADCINB0-ADCINB7,在級(jí)聯(lián)模式下就直
接設(shè)置對(duì)應(yīng)的數(shù)值即可,現(xiàn)在仔細(xì)體會(huì)以下代碼,應(yīng)該不難理解:
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; //設(shè)置最大通道數(shù)為n + 1,從通道0開始,按照順序算AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //管腳為ADCINA0,轉(zhuǎn)換結(jié)果在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,最大通道數(shù)為3 + 1 = 4通道,也就是只轉(zhuǎn)換CONV00,CONV01,CONV02,CONV03,結(jié)果存在ADCRESULT0-3中,ADCRESULT4及往后讀出來(lái)為零。以此類推,MAX_CONV1 = 6,則只轉(zhuǎn)換CONV00-CONV06。
?
觀察結(jié)果
打開Expression窗口,添加SampleTable變量觀察。用一字螺絲刀調(diào)節(jié)變阻器,可以看到數(shù)值相應(yīng)變化。
?
好,老笨就說(shuō)到這了。
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的DSP28335入门教程:ADC的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何进行AI换脸,AI换脸从 “0“ 到
- 下一篇: 自旋锁的原理及使用