[ZLG-ARM] 用MAT启动AD采样,并使用中断方式,这样可以吧?

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

没有使能全局中断

没有使能全局中断<br /><br />IRQEnable();
usber 发表于 2009-5-20 14:28 | 显示全部楼层

不使能中断不行

  
xamic 发表于 2009-6-1 21:08 | 显示全部楼层

路过

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部