目前,我在做个超声波测距的小功能。用的超声波模块是买锐志单片机板子时送的。 ARM板为S3C2440.我使用2440的GPIO1,3作为超声波模块的电源和接地引脚,9,11分别接TX发射端,RX接收端。配置引脚9为GPF0 输出,配置引脚11 GPF2为EINT2 下降沿中断。发波采用高低电压的改变来模拟。检测返回波时,采用EINT2中断判断。但是如下代码却检测不到回波,很郁闷,不知道错在哪里。请教各位,帮帮我。C语言主函数代码如下:
C/C++ code
//*************************************************** #include "def.h" #include "option.h" #include "2440addr.h" #include "2440lib.h" #include "2440slib.h" #include "mmu.h" //================================ void delay_20us() { unsigned char bt; for(bt=0;bt<60;bt++); } static void __irq Eint2Int(void) { rSRCPND = BIT_EINT2; rINTPND = BIT_EINT2; rINTPND; Uart_Printf("Eint2 interrupt is occurred\n"); } int Main(int argc, char **argv) { U8 key; U32 mpll_val=0; U8 num =6; mpll_val = (92<<12)|(1<<4)|(1); //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); Uart_Init(0,115200); Uart_Select(0); MMU_Init(); MMU_DisableICache(); MMU_DisableDCache(); rGPFCON &= ~(0x12); rGPFCON |= (0x21);//配置引脚 GPF0[1:0]=01 输出 GPF2[5:4]=10 Eint2 rGPFDAT &= ~1;//把相应的GPFDAT的最低位 = 0 清空 //INTPND EINT2[2] = 1 Requested rSRCPND = rSRCPND |0x4; //EXTINT0 EINT2[10:8] = 01X:下降沿触发 rEXTINT0 =(rEXTINT0 &~(0x7<<8))|0x2<<8; for(num =6;num>0;num--)//发波//先进行测试能不能接收到回波 { rGPFDAT |= 1;//把相应的GPFDAT的最低位 = 1 delay_20us(); rGPFDAT &= ~1;//把相应的GPFDAT的最低位 = 0 } //SRCPND EINT2[2] = 1;Requested rSRCPND = BIT_EINT2;//清楚先前状态位 若有外部输入,屏蔽中断 //INTPND EINT2[2] = 1:Requested rINTPND = BIT_EINT2; //外部中断函数声明 pISR_EINT2 = (unsigned)Eint2Int; rINTMSK &= ~(BIT_EINT2);//中段开始工作 //while(1); } Uart_Printf("Over!\n"); return 0; }
我不知道哪里出了问题,为什么会检测不到回波,做了好几天了,弄得自己一点心情也没了。我现在在想发波成功了没。不知道哪位大侠做过类似的,可以交流下,提点意见?