lpc1114 MAT觸發(fā)ADC轉(zhuǎn)換
MAT觸發(fā)轉(zhuǎn)換并不是由外部信號引起的,而是由自身定時器的匹配引起的。一共有四個匹配寄存器可以用于MAT觸發(fā)轉(zhuǎn)換,它們分別是:CT16B0MAT0、CT16B0MAT1、CT32B0MAT0、CT32B0MAT1。
這里,以CT16B0MAT0為例介紹。
新建一個工程,結(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時鐘LPC_TMR16B0->TCR=0x02;//復位定時器(bit1:寫1復位)LPC_TMR16B0->PR=SystemCoreClock/1000-1;//1msTC+1LPC_TMR16B0->MR0=cycle_ms;LPC_TMR16B0->IR=0x01;//MR0中斷復位LPC_TMR16B0->MCR=0x02;//MR0中斷產(chǎn)生時復位TCLPC_TMR16B0->EMR=0x31;//MR0與PC相等時,MAT0引腳翻轉(zhuǎn)電平LPC_TMR16B0->TCR=0x01;//啟動定時器:TCR[0]=1;}
這個函數(shù),用于MAT0產(chǎn)生電平翻轉(zhuǎn),當發(fā)生下降沿的時候,ADC開始轉(zhuǎn)換。MR0寄存器用于存儲ADC轉(zhuǎn)換的時間。實際上,轉(zhuǎn)換的時間是MR0值的兩倍,因為,當MR0與TC匹配的時候,發(fā)生電平翻轉(zhuǎn),發(fā)生有低到高的上升沿時,不會發(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)試助手,選好串口號,波特率調(diào)成9600,選擇十六進制接收,會看到串口助手上間隔1秒中,發(fā)送一次AD7(P1.11)引腳上測到的電壓。