抱歉,之前写的ADC配置有点坑,也只适用于部分情况。已经删除。这一次的版本将会好很多很多。
首先呢ADC的控制分为以下五个寄存器。
ATDCTL0中的WRAP3 WRAP2 WRAP1 WRAP0对应下表,是用于多通道连续采样时用的(单通道采样可以不用设置),且选择的是连续采样的最后一个通道。而第一个通道是在ATDCTL5中设定的,并递增。
ATDCTL1
- ETRIGSEL与后面的ETRIGCH3 ETRIGCH2 ETRIGCH1 ETRIGCH0配合使用,用于使用外部中断时的通道选择。
- SRES1 SRES0 用于选择AD转换的精度,如下表
- SMP_DIS 设置采样前是否要对通道中的电容器进行放电(放电正确率会比较高,不放电读取的值有可能是上一次的)
ATDCTL2
- AFFC用于设置当中断触发时,中断标记位是要手动清除还是自动清除,手动清除的方式是(ATDSTAT0_SCF = 1;)自动清零的话只要去读取采样值的寄存器就会自动清除标记位了。
- ETRIGLE ETRIGP 当使用adc外部中断的模式时使用的,用于设置那一种触发方式(上升沿,下降沿,高电平,低电平)
- ETRIGE:外部中断模式使能位、
- ASCIE:序列转换完成中断使能位(当采样并转换完成后触发)
- ACMPIE:AD比较中断使能位(当ad转换结果与设定值相同时触发)
ATDCTL3
- DJM 用于设置AD转换结果是要左对齐还是右对齐的设置位(右为1)
- S8C, S4C,S2C, S1C 用于设置序列转换次数(不是很懂什么意思,设置为1也可以16也可以)但是次数越多耗时越多。
- FIFO:寄存器先进先出位 一般设置为0,不使用
- FRZ[1:0]:用于设置当单片机处于freeze模式时要怎么做,
ATDCTL4
- SMP[2:0]:用于设置采样时间
- PRS[4:0]用于设置AD_clock的时钟周期。公式:ATDClock=[BusClock*0.5]/[PRS+1]
ATDCTL5
- SC与CD CC CB CA配合使用,当模式是单通道时,用于设置通道,当模式是多通道采样时,用于设置第一次采样的通道。
- SCAN:用于设置连续采样或者单次采样。
- MULT:用于设置单通道采样或者多通道采样。
多通道轮训询码及单通道中断代码如下
一、多通道轮询
void AD_Init(void)