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