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