lpc1114 MAT觸發(fā)ADC轉(zhuǎn)換
掃描二維碼
隨時(shí)隨地手機(jī)看文章
MAT觸發(fā)轉(zhuǎn)換并不是由外部信號(hào)引起的,而是由自身定時(shí)器的匹配引起的。一共有四個(gè)匹配寄存器可以用于MAT觸發(fā)轉(zhuǎn)換,它們分別是:CT16B0MAT0、CT16B0MAT1、CT32B0MAT0、CT32B0MAT1。
這里,以CT16B0MAT0為例介紹。
新建一個(gè)工程,結(jié)構(gòu)如下圖所示:
文件都用《cortex m0 lpc1114 adc start位控制轉(zhuǎn)換》一節(jié)的。
在adc.h文件中,加入TIM16B0_MAT_Init()函數(shù)的聲明,如下所示:
#ifndef__NXP_ADC_H#define__NXP_ADC_H#defineVref3300externvoidADC_Init(uint8_tChannel);externuint32_tADC_Read(uint8_tChannel);externvoidTIM16B0_MAT_Init(uint16_tcycle_ms);#endif
在adc.c文件中,加入TIM16B0_MAT_Init()函數(shù)的定義,如下所示:
voidTIM16B0_MAT_Init(uint16_tcycle_ms){LPC_SYSCON->SYSAHBCLKCTRL|=(1<<7);//使能TIM16B0時(shí)鐘LPC_TMR16B0->TCR=0x02;//復(fù)位定時(shí)器(bit1:寫1復(fù)位)LPC_TMR16B0->PR=SystemCoreClock/1000-1;//1msTC+1LPC_TMR16B0->MR0=cycle_ms;LPC_TMR16B0->IR=0x01;//MR0中斷復(fù)位LPC_TMR16B0->MCR=0x02;//MR0中斷產(chǎn)生時(shí)復(fù)位TCLPC_TMR16B0->EMR=0x31;//MR0與PC相等時(shí),MAT0引腳翻轉(zhuǎn)電平LPC_TMR16B0->TCR=0x01;//啟動(dòng)定時(shí)器:TCR[0]=1;}
這個(gè)函數(shù),用于MAT0產(chǎn)生電平翻轉(zhuǎn),當(dāng)發(fā)生下降沿的時(shí)候,ADC開始轉(zhuǎn)換。MR0寄存器用于存儲(chǔ)ADC轉(zhuǎn)換的時(shí)間。實(shí)際上,轉(zhuǎn)換的時(shí)間是MR0值的兩倍,因?yàn)椋?dāng)MR0與TC匹配的時(shí)候,發(fā)生電平翻轉(zhuǎn),發(fā)生有低到高的上升沿時(shí),不會(huì)發(fā)生ADC轉(zhuǎn)換。
在main.c文件中,輸入以下代碼:
#include"lpc11xx.h"#include"uart.h"#include"adc.h"intmain(){uint16_tadc_value;UART_init(9600);ADC_Init(7);TIM16B0_MAT_Init(500);while(1){adc_value=ADC_Read(7);UART_send_byte(adc_value>>8);UART_send_byte(adc_value);}}
打開串口調(diào)試助手,選好串口號(hào),波特率調(diào)成9600,選擇十六進(jìn)制接收,會(huì)看到串口助手上間隔1秒中,發(fā)送一次AD7(P1.11)引腳上測(cè)到的電壓。