C语言ATD1SC,2020-10-13_ATD(模数转换)模块介绍
1、主要寄存器功能說(shuō)明
(1)ATDCTL0:通道循環(huán)選擇位,在多通道轉(zhuǎn)換時(shí),決定從哪個(gè)通道循環(huán)返回值A(chǔ)N0。
(2)ATDCTL1:其中ETRIGSEL、ETRIGCH3--ETRIGCH0決定外部觸發(fā)源選擇(即用外部事件啟動(dòng)AD轉(zhuǎn)換);SRES(1:0)這兩位決定轉(zhuǎn)換精度(8、10、12位)。
(3)ATDCTL2:控制標(biāo)志位快速清除、外部觸發(fā)源設(shè)置(極性、邊沿、使能)、序列轉(zhuǎn)換結(jié)束中斷使能、比較中斷使能。
(4)ATDCTL3:DJM(結(jié)果數(shù)據(jù)寄存器對(duì)齊方式,只有無(wú)符號(hào)結(jié)果類(lèi)型)、S8C--S1C(序列轉(zhuǎn)換長(zhǎng)度)、結(jié)果數(shù)據(jù)FIFO模式、背景調(diào)試狀態(tài)凍結(jié)與否。
(5)ATDCTL4:SMP2--SMP0(采樣時(shí)間選擇)、PRS4--PRS0(ATD模塊時(shí)鐘分頻系數(shù),用于設(shè)置工作時(shí)鐘,500KHz--2MHz)。
(6)ATDCTL5:SC(特殊轉(zhuǎn)換通道使能)、SCAN(連續(xù)轉(zhuǎn)換模式設(shè)置)、MULT(多通道/單通道模式)、CD--CA(轉(zhuǎn)換通道或起始通道)。向這個(gè)寄存器寫(xiě)數(shù)據(jù),會(huì)啟動(dòng)ATD轉(zhuǎn)換,因此也可作為ATD模塊啟動(dòng)開(kāi)關(guān)來(lái)操作。
2、ATD初始化代碼示例
; 模塊初始化
ADC_init:
PSHA
PSHB
PSHY
PSHX
MOVB? #$01,ATD0CTL0? ? ? ; 一共兩個(gè)通道 0,1 。? 從1號(hào)通道循環(huán)回到0
MOVB? #$0F,ATD0CTL1? ? ? ; 外部觸發(fā)通道選擇,未啟用,可任意值
MOVB? #$02,ATD0CTL2? ? ? ; 開(kāi)啟序列轉(zhuǎn)換完成中斷? ,ATD0_ISR
MOVB? #$90,ATD0CTL3? ? ? ; 8位精度,右對(duì)齊
MOVB? #$0B,ATD0CTL4? ? ? ; ATD時(shí)鐘設(shè)置,分頻系數(shù)11,? f=Fbus/2(fpiv+1),? 1.66MHz ,采樣時(shí)間:4個(gè)時(shí)鐘周期? ? ,一次轉(zhuǎn)換大約10μs
PULX
PULY
PULB
PULA
RTC
; 啟動(dòng)一次轉(zhuǎn)換
ADC_start:
PSHA
PSHB
PSHY
PSHX
MOVB? #$10,ATD0CTL5? ? ? ; 多通道轉(zhuǎn)換? ,一個(gè)序列轉(zhuǎn)換結(jié)束后進(jìn)入空閑狀態(tài)
PULX
PULY
PULB
PULA
RTC
3、補(bǔ)充說(shuō)明
(1)如果使用多個(gè)不連續(xù)的通道進(jìn)行AD轉(zhuǎn)換,其結(jié)果數(shù)據(jù)寄存器的對(duì)應(yīng)關(guān)系只和通道順序有關(guān),和通道號(hào)無(wú)關(guān),例如使用通道0、2、6進(jìn)行轉(zhuǎn)換,序列長(zhǎng)度為3,結(jié)果寄存器的ATDDR0、ATDDR1、ATDDR2分別對(duì)應(yīng)0、2、6通道的轉(zhuǎn)換結(jié)果。(通道循環(huán)應(yīng)該設(shè)置為6,6號(hào)通道完成后,即循環(huán)返回至0)
(2)中斷模式處理轉(zhuǎn)換序列時(shí),進(jìn)入中斷后,先關(guān)中斷使能,處理完成后,再開(kāi)中斷使能。
4、AD中斷程序
XDEF ATD0_ISR
XREF? ? atd_buff,atd_flg
ATD0_ISR:
; Write your interrupt code here ...
MOVB? #$00,ATD0CTL2? ? ? ? ? ? ; 關(guān)中斷
LDX? #ATD0DR0L
LDY? #atd_buff
LDAB? #2
save_data:
MOVB? 2,X+,1,Y+? ? ? ; 8位模式,數(shù)據(jù)保存在每個(gè)結(jié)果寄存器的 L ,所以要+2
DBNE? B,save_data
MOVW? #$0003,ATD0STAT2? ? ? ? ? ? ; 清除CCF標(biāo)志 , 16bit
MOVB? #$80,ATD0STAT0? ? ? ? ? ? ? ; 清除轉(zhuǎn)換結(jié)束標(biāo)志
MOVB? #$01,atd_flg
MOVB? #$02,ATD0CTL2? ? ? ? ? ? ; 開(kāi)中斷
RTI
總結(jié)
以上是生活随笔為你收集整理的C语言ATD1SC,2020-10-13_ATD(模数转换)模块介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言 判断链表之中是否有环,判断单链表
- 下一篇: 2016c语言模拟试卷一,2016年9月