|
//利用查询方式,BURST转换获取AD转换值。<br /><br />#include "config.h"<br />uint32 ADC_Data;<br /><br />//延时<br />void DelayNS(uint32 dly)<br />{ uint32 i;<br /> for(; dly>0; dly--) <br /> for(i=0; i<5000; i++);<br />}<br /><br /><br />#define UART_BPS 115200 /* 定义通讯波特率 */<br />//初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200<br />void UART0_Ini(void)<br />{ uint16 Fdiv;<br /> U0LCR = 0x83; // DLAB = 1,可设置波特率<br /> Fdiv = (Fpclk >> 4) / UART_BPS; // 设置波特率<br /> U0DLM = Fdiv >> 8; <br /> U0DLL = Fdiv % 256; <br /> U0LCR = 0x03;<br />}<br /> <br />//向串口发送字节数据,并等待发送完毕。<br />void UART0_SendByte(uint8 data)<br />{ U0THR = data; // 发送数据<br /> while( (U0LSR&0x40)==0 ); // 等待数据发送完毕<br />}<br /><br />//ADC初始化<br />void ADC_Init(void)<br />{ ADCR = (3 << 2) | // 选择通道AIN2,AIN3<br /> ((Fpclk / 10000 - 1) << 8) | // CLKDIV = Fpclk / 10000 - 1 ,即转换时钟为10KHz<br /> //如果这儿设定为11kHz的话,下面这样就得不到正确结果,看来这个时钟对芯片还是有影响的。<br /> (1 << 16) | // BURST = 1 ,硬件控制转换操作<br /> (0 << 17) | // CLKS = 0 ,使用11clock转换<br /> (1 << 21) | // PDN = 1 , 正常工作模式(非掉电转换模式)<br /> (0 << 22) | // TEST1:0 = 00 ,正常工作模式(非测试模式)<br /> (0 << 24) | // START = 0 ,不理会是否启动ADC转换<br /> (0 << 27); // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)<br />}<br /><br /><br />int main(void)<br />{<br /> uint8 data[2];<br /> <br /> PINSEL0 = 0x00000005; // 设置P0.0、P0.1连接到UART0的TXD、RXD<br /> PINSEL1 = 0x14000000; // 设置P0.29、P0.30连接到AIN2、AIN3<br /> UART0_Ini(); // 初始化UART0<br /> ADC_Init();<br /> <br /> while(1)<br /> { <br /> while( (ADDR&0x80000000)==0 ); // 等待转换结束<br /> ADC_Data = ADDR; // 读取ADC结果<br /> ADC_Data = (ADC_Data>>6) & 0x3FF;<br /> <br /> data[0] = ADC_Data >> 8;<br /> data[1] = ADC_Data;<br /> UART0_SendByte(data[0]);<br /> UART0_SendByte(data[1]);<br /> <br /> DelayNS(10); <br /> }<br /> return(0);<br />}<br /><br />//为什么串口发出的数不是A,B,A,B,A……这样的两个通道轮换采集的数,而是没有规律的两个通道的数? |
|