1、主要寄存器功能说明
(1)ATDCTL0:通道循环选择位,在多通道转换时,决定从哪个通道循环返回值AN0。
(2)ATDCTL1:其中ETRIGSEL、ETRIGCH3--ETRIGCH0决定外部触发源选择(即用外部事件启动AD转换);SRES(1:0)这两位决定转换精度(8、10、12位)。
(3)ATDCTL2:控制标志位快速清除、外部触发源设置(极性、边沿、使能)、序列转换结束中断使能、比较中断使能。
(4)ATDCTL3:DJM(结果数据寄存器对齐方式,只有无符号结果类型)、S8C--S1C(序列转换长度)、结果数据FIFO模式、背景调试状态冻结与否。
(5)ATDCTL4:SMP2--SMP0(采样时间选择)、PRS4--PRS0(ATD模块时钟分频系数,用于设置工作时钟,500KHz--2MHz)。
(6)ATDCTL5:SC(特殊转换通道使能)、SCAN(连续转换模式设置)、MULT(多通道/单通道模式)、CD--CA(转换通道或起始通道)。向这个寄存器写数据,会启动ATD转换,因此也可作为ATD模块启动开关来操作。
2、ATD初始化代码示例
; 模块初始化
ADC_init:
PSHA
PSHB
PSHY
PSHX
MOVB #$01,ATD0CTL0 ; 一共两个通道 0,1 。 从1号通道循环回到0
MOVB #$0F,ATD0CTL1 ; 外部触发通道选择,未启用,可任意值
MOVB #$02,ATD0CTL2 ; 开启序列转换完成中断 ,ATD0_ISR
MOVB #$90,ATD0CTL3 ; 8位精度,右对齐
MOVB #$0B,ATD0CTL4 ; ATD时钟设置,分频系数11, f=Fbus/2(fpiv+1), 1.66MHz ,采样时间:4个时钟周期 ,一次转换大约10μs
PULX
PULY
PULB
PULA
RTC
; 启动一次转换
ADC_start:
PSHA
PSHB
PSHY
PSHX
MOVB #$10,ATD0CTL5 ; 多通道转换 ,一个序列转换结束后进入空闲状态
PULX
PULY
PULB
PULA
RTC
3、补充说明
(1)如果使用多个不连续的通道进行AD转换,其结果数据寄存器的对应关系只和通道顺序有关,和通道号无关,例如使用通道0、2、6进行转换,序列长度为3,结果寄存器的ATDDR0、ATDDR1、ATDDR2分别对应0、2、6通道的转换结果。(通道循环应该设置为6,6号通道完成后,即循环返回至0)
(2)中断模式处理转换序列时,进入中断后,先关中断使能,处理完成后,再开中断使能。
4、AD中断程序
XDEF ATD0_ISR
XREF atd_buff,atd_flg
ATD0_ISR:
; Write your interrupt code here ...
MOVB #$00,ATD0CTL2 ; 关中断
LDX #ATD0DR0L
LDY #atd_buff
LDAB #2
save_data:
MOVB 2,X+,1,Y+ ; 8位模式,数据保存在每个结果寄存器的 L ,所以要+2
DBNE B,save_data
MOVW #$0003,ATD0STAT2 ; 清除CCF标志 , 16bit
MOVB #$80,ATD0STAT0 ; 清除转换结束标志
MOVB #$01,atd_flg
MOVB #$02,ATD0CTL2 ; 开中断
RTI