lpc1114 MAT触发ADC转换
扫描二维码
随时随地手机看文章
MAT触发转换并不是由外部信号引起的,而是由自身定时器的匹配引起的。一共有四个匹配寄存器可以用于MAT触发转换,它们分别是:CT16B0MAT0、CT16B0MAT1、CT32B0MAT0、CT32B0MAT1。
这里,以CT16B0MAT0为例介绍。
新建一个工程,结构如下图所示:
文件都用《cortex m0 lpc1114 adc start位控制转换》一节的。
在adc.h文件中,加入TIM16B0_MAT_Init()函数的声明,如下所示:
#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()函数的定义,如下所示:
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中断产生时复位TCLPC_TMR16B0->EMR=0x31;//MR0与PC相等时,MAT0引脚翻转电平LPC_TMR16B0->TCR=0x01;//启动定时器:TCR[0]=1;}
这个函数,用于MAT0产生电平翻转,当发生下降沿的时候,ADC开始转换。MR0寄存器用于存储ADC转换的时间。实际上,转换的时间是MR0值的两倍,因为,当MR0与TC匹配的时候,发生电平翻转,发生有低到高的上升沿时,不会发生ADC转换。
在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);}}
打开串口调试助手,选好串口号,波特率调成9600,选择十六进制接收,会看到串口助手上间隔1秒中,发送一次AD7(P1.11)引脚上测到的电压。