LPC2131的AD0.3采样,使用MAT1.0启动转换,我将光盘中的ADC_MAT1.0修改下,使用中断方式,修改部分如下:<br /><br />uint16 adcbuf[300];<br />uint16 count=0;<br />//uint8 flag = 0;<br /><br />//中断子程序<br /><br />void __irq IRQ_ADC (void)<br />{<br /> adcbuf[count] = (ADDR>>6)&0x3ff ;<br /> count += 1;<br /> //flag = 0<br /> if(count>=120) T1TCR = 0x00;<br /> <br /> VICVectAddr = 0x00; // 通知VIC中断处理结束<br />}<br /><br />int main (void)<br />{<br />uint32 ADC_Data, i;<br />char str[20];<br /><br />PINSEL0 = 0x00000005; // 管脚连接串口<br />PINSEL1 = 1 << 28; // P0.30连接到AD0.3<br />//PINSEL0 |= 2<<24; // MAT1.0输出<br /><br />UART0_Init( ); // UART0初始化<br /><br />/* 设置MAT1.0匹配翻转 */ <br />T1MCR = 0x02; // 设置T1MR0匹配后将T1TC复位<br />T1EMR = 3 << 4; // T1MR0匹配后MAT1.0输出翻转<br />T1MR0 = Fpclk/100; // 输出频率周期控制<br /><br />/* 进行ADC模块设置 */<br />ADCR = (1 << 3) | // SEL=8,选择通道3<br /> ((Fpclk / 1000000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz<br /> (0 << 16) | // BURST=0,软件控制转换操作<br /> (0 << 17) | // CLKS=0, 使用11clock转换<br /> (1 << 21) | // PDN=1,正常工作模式<br /> (0 << 22) | // TEST1:0=00,正常工作模式<br /> (6 << 24) | // START=6,当EDGE选择的边沿出现在MAT1.0时启动AD转换<br /> (0 << 27); // 下降沿<br /><br />VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断<br />VICVectCntl0 = 0x20 | 18; // 设置ADC中断通道分配最高优先级<br />VICVectAddr0 = (uint32)IRQ_ADC; // 设置中断服务程序地址<br />VICIntEnable |= (1<<18); // 使能ADC中断<br /><br />ADC_Data = ADDR; // 读取ADC结果,并清除DONE标志位<br /><br />T1TCR = 0x03; // 启动并复位T1TC<br />T1TCR = 0x01;<br /><br />while(1)<br />{<br /> /*if(flag==1)<br /> {<br /> sprintf(str, "%4d, ", count);<br /> count = 0; <br /> flag = 0;<br /> T1TCR = 0x03;<br /> T1TCR = 0x01;<br /> }*/<br /><br /> if(count>=120)<br /> {<br /> for(i=0;i<120;i++)<br /> {<br /> sprintf(str, "%4d, ", adcbuf);<br /> ISendStr(str);<br /> }<br /> count = 0;<br /><br /> flag = 0;<br /> T1TCR = 0x03;<br /> T1TCR = 0x01;<br /> }<br /> Delay(1);<br /> }<br /><br />return 0; <br />}<br />这样写AD中断采样可以吗?运行发现没数据输出,MAT1.0有波形产生,在程序中设一标志位flag测试有无进入中断,结果发现未置位,没有中断产生。。。到底哪儿设置不对啊,大家帮忙看一下,提个醒儿<br /> |
|