打印
[ZLG-ARM]

求SPI向量中断的例程

[复制链接]
1956|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bucker|  楼主 | 2009-5-31 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己编的程序存在一个问题,就是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,我不知道问题出在哪里了,请各位大侠指教。

相关帖子

沙发
armpc| | 2009-6-1 11:15 | 只看该作者

好好研究一下

使用特权

评论回复
板凳
bucker|  楼主 | 2009-6-1 18:38 | 只看该作者

问题已解决

使用特权

评论回复
地板
iciciu| | 2009-9-1 17:13 | 只看该作者
提问题后,自己解决了,也要说下是怎么解决的呀,后来人好看一下嘛。。

使用特权

评论回复
5
hmsfeng| | 2009-9-1 19:34 | 只看该作者
这样可能会中断嵌套吧.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

82

帖子

1

粉丝