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
總結
以上是生活随笔為你收集整理的C语言ATD1SC,2020-10-13_ATD(模数转换)模块介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 判断链表之中是否有环,判断单链表
- 下一篇: 2016c语言模拟试卷一,2016年9月