我自己编的程序存在一个问题,就是SPI通信后进入中断服务程序后,在服务程序中继续发送数据,但实际上服务程序发送数据后退出后,ARM就再也没有响应SPI中断。<br />#include "config.h" <br /><br />uint32 a;<br /><br />void __irq IRQ_SPI (void) /*SPI中断服务程序*/<br />{<br /> if (++a < 3) S0PDR = 0x44;<br /> S0PINT = 0x01; /* 清除中断标志 */<br /> VICVectAddr = 0x00; /* 通知VIC中断处理结束 */<br />}<br /><br />int main (void)<br />{ <br /> a = 0;<br /> PINSEL0 = 0x00005500; // 设置SPI管脚连接<br /> PINSEL1 = 0x00000000;<br /> SPCCR = 0x52; // 设置SPI时钟分频<br /> SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样<br /> (1 << 4) | // CPOL = 1, SCK 为低有效<br /> (1 << 5) | // MSTR = 1, SPI 处于主模式<br /> (0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先<br /> (1 << 7); // SPIE = 0, SPI 中断被使能<br /><br /> IRQEnable(); /* IRQ中断使能 <br /> */<br /> /* 设置SPI中断IRQ */<br /> VICIntSelect = 0x00; /* 所有中断通道设置为IRQ中断 */<br /> VICVectCntl5 = 0x20 | 0x0A; /* 设置SPI中断通道分配最高优先级 */<br /> VICVectAddr5 = (uint32)IRQ_SPI; /* 设置中断服务程序地址 */<br /> VICIntEnable = 1 << 0x0A; /* 使能SPI中断 */<br /> <br /> S0PDR = 0x33; /*随意发送数据*/<br /> while (1);<br /> return 0;<br />}<br />正常结束时,a应该等于3,而调试的结果是a等于1,我不知道问题出在哪里了,请各位大侠指教。<br /> |
|