我想实现的目标是让SPI连续输出几个字节的数据,但下列程序在MagicARM2200上仿真结果,是IRQ——SPI中断只进入过一次,最后变量a的值为1。不知我的程序在哪些地方存在问题啊。请各位帮忙解答一下!谢谢!
#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;
}
|