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