2020-10-13_ATD(模数转换)模块介绍

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

你可能感兴趣的:(2020-10-13_ATD(模数转换)模块介绍)