[ZLG-ARM] 外部中断来接收数据出现异常

[复制链接]
2133|4
 楼主| gaowang 发表于 2007-4-2 14:59 | 显示全部楼层 |阅读模式
我作了系统,需要在两片单片机种利用并口(16位IO口传送数据),其中在2214中发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;&nbsp;=&nbsp;0xFFFFFFFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P0口为输出口&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((IO3PIN&nbsp;&0x01000000)&nbsp;==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待回应IO口变低(IO3PIN&nbsp;&0x01000000)&nbsp;==0&nbsp;&nbsp;&&(i&lt30)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0PIN&nbsp;&nbsp;=&nbsp;(IO0SET&0xFFF00003)|(cp&0xF0)&lt&lt4|(cp&0x0F)&lt&lt2|cp[i+1]&lt&lt12&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO3SET&nbsp;&nbsp;|=0xE&nbsp;&lt&lt&nbsp;16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断信号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt13;j++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO3CLR&nbsp;&nbsp;|=&nbsp;0xF&nbsp;&lt&lt&nbsp;16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断信号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt5;j++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />另外用2214作为接受数据:(利用外部中断0)<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;main(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;初始化P0.6~13,P0.18~25为IO口,P0.16为EINT0<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;&nbsp;=&nbsp;0x00000001;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;&nbsp;&nbsp;=&nbsp;0x00008038;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置IO口方向<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;&nbsp;&nbsp;|=&nbsp;1&nbsp;&lt&lt15;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//拉低p0.15&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE&nbsp;&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置EINT0中断为边沿触发模式<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTPOLAR&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置EINT0中断为下降沿触发&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;打开EINT1中断(设置向量控制器,即使用向量IRQ)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置所有中断分配为IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;(0x20&nbsp;|14);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;分配EINT0中断到向量中断1<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0&nbsp;=&nbsp;(int)IRQ_Eint0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置中断服务程序地址<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除EINT0中断标志&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;0x00004000;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />中断服务程序为<br />volatile&nbsp;uint16&nbsp;Control_data[13]&nbsp;={0,0,0,0,0,0,0,0,0,0,0,0,0}&nbsp;;&nbsp;&nbsp;//dingyi&nbsp;quanju&nbsp;bianliang<br />volatile&nbsp;uint16&nbsp;fre,fudu;&nbsp;&nbsp;&nbsp;//,a_1,a_2,a_3,a_4,a_5,a_6,a_7,a_8,a_9,a_10,a_11<br />volatile&nbsp;uint8&nbsp;mutex,i;<br />/****************************************************************************<br />THe&nbsp;service&nbsp;programme&nbsp;of&nbsp;interrupt<br />****************************************************************************/<br />&nbsp;void&nbsp;&nbsp;&nbsp;__irq&nbsp;IRQ_Eint0(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;rec_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;struct&nbsp;packed_data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dingyi&nbsp;weiduan&nbsp;jiegouti<br />&nbsp;&nbsp;&nbsp;&nbsp;{unsigned&nbsp;a:8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b:8;<br />&nbsp;&nbsp;&nbsp;&nbsp;}data;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IO0SET&nbsp;|=&nbsp;1&lt&lt15&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;data.a&nbsp;=&nbsp;IO0PIN&nbsp;&gt&gt&nbsp;6&nbsp;;<br />&nbsp;&nbsp;&nbsp;data.b&nbsp;=&nbsp;IO0PIN&nbsp;&gt&gt&nbsp;18&nbsp;;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;rec_data&nbsp;=&nbsp;(rec_data&nbsp;&&nbsp;0x0000)&nbsp;|data.a;<br />&nbsp;&nbsp;&nbsp;rec_data&nbsp;|=(data.b&nbsp;&lt&lt8);<br />&nbsp;&nbsp;&nbsp;Control_data[i++]&nbsp;=&nbsp;rec_data;<br />//&nbsp;rec_data&nbsp;=0;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(i==13)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fre&nbsp;=&nbsp;Control_data[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//频率<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fudu&nbsp;=&nbsp;Control_data[1];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_1&nbsp;=&nbsp;Control_data[2];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_2&nbsp;=&nbsp;Control_data[3];&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_3&nbsp;=&nbsp;Control_data[4];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_4&nbsp;=&nbsp;Control_data[5];&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_5&nbsp;=&nbsp;Control_data[6];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_6&nbsp;=&nbsp;Control_data[7];&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_7&nbsp;=&nbsp;Control_data[8];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_8&nbsp;=&nbsp;Control_data[9];&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_9&nbsp;=&nbsp;Control_data[10];&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_10&nbsp;=&nbsp;Control_data[11];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_11&nbsp;=&nbsp;Control_data[12];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mutex&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;EXTINT&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除EINT0中断标志<br />&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;向量中断结束<br />&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;|=&nbsp;0x00004000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能中断&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;&nbsp;&nbsp;|=&nbsp;1&nbsp;&lt&lt15;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//拉低p0.15<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />现在问题时:单步跟踪时发现好像只有一次中断,且中断接受的数据都是相同的,是第一个数据。<br />请高手们看下到底是啥问题!希望得到大家的回答,急...&nbsp;&nbsp;&nbsp;
 楼主| gaowang 发表于 2007-4-3 07:58 | 显示全部楼层

没人知道吗?我急啊

难道没人知道吗?
 楼主| gaowang 发表于 2007-4-3 13:54 | 显示全部楼层

????

  
zlgARM 发表于 2007-4-3 17:43 | 显示全部楼层

gaowang

&nbsp;&nbsp;&nbsp;&nbsp;尽量不要列代码,简单地描述清楚您的问题。别人一般都没太多精力去仔细猜测和破译您的代码,您的问题是什么意思。<br />&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| gaowang 发表于 2007-4-5 19:40 | 显示全部楼层

谢谢周立功,服务令人满意

我的问题经过我最近的努力,可能自己能解决,可能是因为接受数据的2101每次中断处理需要时间,而我发送的单片机没有延时!再谢谢你,<br />&nbsp;&nbsp;&nbsp;&nbsp;再有一个问题:ADS里的for循环是不是不能太大?大概在1000的时候有可能会停止,有人遇到这个问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

32

帖子

0

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