DSP

DSP2812的ADC排序器工作模式

2019-07-13 10:40发布

按照一次转换通道个数分为:同步工作模式(Simultaneous sampling)、顺寻工作模式(sequential sampling),   同步顺寻 同步工作模式:对AB两组中相同偏移量的2个通道同时转换。 顺寻工作模式:转换器对AB两组中的通道按照排序器中定义的排列顺寻转换。 同步工作模式:SEQ1或者SEQ2或者SEQ在对通道转换时,一次转换两个。
顺序工作模式:SEQ1或者SEQ2或者SEQ在对通道转换时,一次只能转换一个通道。
    双排序器、级联排序器 双排序器:SEQ1SEQ2是两个排序器。SEQ1SEQ2独立工作。可以让SEQ1工作在同步模式下,也可以让SEQ1工作在顺序模式下。SEQ2同样如此。SEQ1工作在同步模式下,对ADCINAADCNIB相同偏移通道同步采样,结果放在Result0Result1中。 排序器SEQ1     union ADCCHSELSEQ1_REG ADCCHSELSEQ1; // Channel select sequencing control 1
    union ADCCHSELSEQ2_REG ADCCHSELSEQ2;
ADCCHSELSEQ1ADCCHSELSEQ2都是16bit的寄存器。 每个寄存器器变量分4section2个分了8section 排序器2     union ADCCHSELSEQ3_REG ADCCHSELSEQ3; // Channel select sequencing control 3
    union ADCCHSELSEQ4_REG ADCCHSELSEQ4; // Channel select sequencing control 4
ADCCHSELSEQ3ADCCHSELSEQ4都是16bit的寄存器变量。 每个寄存器器变量有4section 排序器SEQ18section,排序器SEQ28section section中数字含义:每个section中填写的是模拟输入通道的编号。最大的通道编号是:16,所以每个section需要4bit struct ADCCHSELSEQ1_BITS {    // bits   description
    Uint16 CONV00:4;         // 3:0    Conversion selection 00
    Uint16 CONV01:4;         // 7:4    Conversion selection 01
    Uint16 CONV02:4;         // 11:8   Conversion selection 02
    Uint16 CONV03:4;         // 15:12 Conversion selection 03
};
struct ADCCHSELSEQ2_BITS {    // bits   description
    Uint16 CONV04:4;         // 3:0    Conversion selection 04
    Uint16 CONV05:4;         // 7:4    Conversion selection 05
    Uint16 CONV06:4;         // 11:8   Conversion selection 06
    Uint16 CONV07:4;         // 15:12 Conversion selection 07
};
struct ADCCHSELSEQ3_BITS {    // bits   description
    Uint16 CONV08:4;         // 3:0    Conversion selection 08
    Uint16 CONV09:4;         // 7:4    Conversion selection 09
    Uint16 CONV10:4;         // 11:8   Conversion selection 10
    Uint16 CONV11:4;         // 15:12 Conversion selection 11
};
struct ADCCHSELSEQ4_BITS {    // bits   description
    Uint16 CONV12:4;         // 3:0    Conversion selection 12
    Uint16 CONV13:4;         // 7:4    Conversion selection 13
    Uint16 CONV14:4;         // 11:8   Conversion selection 14
    Uint16 CONV15:4;         // 15:12 Conversion selection 15
};
级联排序器:两个排序器合二为一,组成一个排序器,SEQ16section构成。CONV00--CONV15单排续器可以使用EVAEVB、软件、外部引脚GPIO/XINT2_ADCSOC引脚触发。 双排序器:SEQ18section构成:CONV00-CONV07SEQ28section构成:CONV08-CONV15 相当于两个独立的排序器,SEQ1排序器启动由EVA启动;SEQ2排序器由EVB启动。 通道转换顺序如何确定? CONV00:中放置的通道第一个被转换,紧接着CONV01中放置的通道被转换,--CONV02中放置的通道编号的通道被转换。 不论是在双排序,还是单排序,因为SEQ1级别比SEQ2级别高,首先转换完SEQ1section放置通道编号,然后转换SEQ2中放置的通道编号。 同步模式和顺序模式的区别在于:转换结果在结果寄存器中的放置不同。 只要是同步模式,不论是单排序器还是级联排序器,结果寄存器中的数存放顺序是:RESULT0中存放ADCINA0RESULT1中存放ADCINB0
顺序工作模式:RESULT0中存放ADCINA0数值,RESULT1中存放ADCINA1数值....
顺序排序,result0中放置conv00中通道的结果,result1中放置conv01中通道的结果,以此类推... 级联排序:result0中放置conv00A组的通道结果,result1中放置conv00B组的通道结果, ADC转换之前需要配置寄存器,设置转换的通道个数、对那些通道转换、转换次序。 EX转换的通道个数:AdcRegs.ADCMAXCONV.all = 0x0001;       //转换两个通道 EX要进行转换的通道、转换次序: AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // Setup ADCINA3 as 1st SEQ1 conv. 通道3第一个被转换
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.
接着通道2被转换
struct ADCASEQSR_BITS {       // bits   description
    Uint16 SEQ1_STATE:4;     // 3:0    SEQ1 state
    Uint16 SEQ2_STATE:3;     // 6:4    SEQ2 state
    Uint16 rsvd1:1;          // 7      reserved
   
Uint16 SEQ_CNTR:4;       // 11:8   Sequencing counter status
    Uint16 rsvd2:4;          // 15:12 reserved
};
转换如何开始? 接收到SOC信号之后,ADCASEQSRSEQ_CNTRAdcRegs.ADCMAXCONV中获得需要转换的通道个数,完成一个减小1;直到SEQ_CNTR中的数字变为0. struct ADCTRL1_BITS {     // bits description
    Uint16 rsvd1:4;      // 3:0   reserved
    Uint16 SEQ_CASC:1;   // 4     Cascaded sequencer mode
    Uint16 SEQ_OVRD:1;   // 5     Sequencer override
   
Uint16 CONT_RUN:1;   // 6     Continuous run
    Uint16 CPS:1;        // 7     ADC core clock pre-scalar
    Uint16 ACQ_PS:4;     // 11:8 Acquisition window size
    Uint16 SUSMOD:2;     // 13:12 Emulation suspend mode
    Uint16 RESET:1;      // 14    ADC reset
    Uint16 rsvd2:1;      // 15    reserved
};
struct ADCTRL2_BITS {         // bits description
    Uint16 EVB_SOC_SEQ2:1;   // 0     Event manager B SOC mask for SEQ2
    Uint16 rsvd1:1;          // 1     reserved
    Uint16 INT_MOD_SEQ2:1;   // 2     SEQ2 Interrupt mode
    Uint16 INT_ENA_SEQ2:1;   // 3     SEQ2 Interrupt enable
    Uint16 rsvd2:1;          // 4     reserved
    Uint16 SOC_SEQ2:1;       // 5     Start of conversion for SEQ2
   
Uint16 RST_SEQ2:1;       // 6     Reset SEQ2
    Uint16 EXT_SOC_SEQ1:1;   // 7     External start of conversion for SEQ1
    Uint16 EVA_SOC_SEQ1:1;   // 8     Event manager A SOC mask for SEQ1
    Uint16 rsvd3:1;          // 9     reserved
    Uint16 INT_MOD_SEQ1:1;   // 10    SEQ1 Interrupt mode
    Uint16 INT_ENA_SEQ1:1;   // 11    SEQ1 Interrupt enable
    Uint16 rsvd4:1;          // 12    reserved
    Uint16 SOC_SEQ1:1;       // 13    Start of conversion trigger for SEQ1
   
Uint16 RST_SEQ1:1;       // 14    Restart sequencer 1
    Uint16 EVB_SOC_SEQ:1;    // 15    EVB SOC enable
};
转换结束了会发生什么? 如果ADCTRL1CONT_RUN1,转换重新开始,ADCASEQSRSEQ_CNTRAdcRegs.ADCMAXCONV中获得需要转换的通道个数,.... 问题是:必须在第二个转换开始之前,从结果寄存器中取走第一次转换的结果;防止第一次转换结果被覆盖。 如果ADCTRL1CONT_RUN0,转换停止,SEQ_CNTR保持0. 问题是:排序指针停留在最后一个section,必须使用ADCTRL2RST_SEQ2或者RST_SEQ1位复位排序器。 ADCASEQSRSEQ_CNTR在每次变为0,中断标志为都会置位,用户可以在中断响应函数中手动对ADCTRL2RST_SEQ2或者RST_SEQ1位复位。                                                                                                         转换的最大通道数   级联排序器同步工作模式:(级联同步)                     0x0007 级联排续器顺序工作模式:(级联顺序)                     0x000F 双排序器同步工作模式:(双排序器同步)                  0x0033 双排序器顺序工作模式:(双排序顺序)                      0x0007 双排序器or单排续器影响MAXCONV中设置的数值。 双排序器中的数值=要转换的通道数/2-1 单排续器最大转换通道数值:要转换的通道数-1
单排续器还是双排序器,在ADC控制寄存器1SEQ_CASC位设置。
同步工作模式还是顺序工作模式在ADC控制寄存器3中的SMODE SEL位设置。默认状况下,ADC工作在双排序器、顺序工作模式。
转换结果:取决于同步模式or顺序模式。
双排序器工作在同步模式下,SEQ1MAXCONV中存放的数值是0x0033110011),SEQ1的转换最大通道数是(4-1)对,SEQ2转换的最大通道数是(4-1)对。