C语言ATD1SC,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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值