登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

spi从机中断方式的问题

作者:sinhwa 栏目:MCU技术
spi从机中断方式的问题
zlg900帮忙看看,先谢谢了。
开始用polling方式没问题了。
void SpiInit(void)
{

    P2M1 = 0x00;
    P2M2 = 0x2c;
    
    SPCTL = 0x48;
    SPSTAT = 0xc0;   //clear spi status flag bits    
}

void main(void)
{

.................
        SpiInit();

    while(1)
    {     
        UartPuts("SPI  TEST!!!!\n\r");

        while((SPSTAT & 0x80)==0);       //wait for SPIF ==1
        spi_rcv_data = SPDAT;            //if == 1 read SPDAT



            #ifdef __SPI_DEBUG__
                ConvertByte(spi_rcv_data,&asciival);   //convert hex to ascii
            
                UartPuts(&asciival);UartPuts("\n\r");
            #endif


        if (gSpiRcvData++ != spi_rcv_data)
        {
            UartPuts("spi error\n\r");
            while(1);                      //stop
        }

            
        SPSTAT = 0xC0;                   //clear flag bits
            
        SPDAT=val2&0x7f;                 //slave spi send
        val2=val2+1;    
    }
}

用从机中断方式
没有中断上来
也就是没打印    UartPuts("SPI INTERRUPT COMING!!!!\n\r");
已经打开全局中断使能了EA = 1

void SpiInit(void)
{

    P2M1 = 0x00;
    P2M2 = 0x2c;
    
    SPCTL = 0x48;
    SPSTAT = 0xc0;   //clear spi status flag bits
    ESPI = 1;
    
}


void SpiInterruptHandler(void) interrupt 14
{
    unsigned CHAR val2 = 0x55;
    unsigned CHAR spi_rcv_data = 0;
    unsigned CHAR asciival;
    
    UartPuts("SPI INTERRUPT COMING!!!!\n\r");

    //while((SPSTAT & 0x80)==0);              //wait for SPIF ==1
    spi_rcv_data = SPDAT;                     //if == 1 read SPDAT
           
#ifdef __SPI_DEBUG__
    ConvertByte(spi_rcv_data,&asciival);   //convert hex to ascii
            
    UartPuts(&asciival);UartPuts("\n\r");
#endif

    if (gSpiRcvData++ != spi_rcv_data)
    {
        UartPuts("spi error\n\r");
        while(1);                      //stop
    }

        
    SPSTAT = 0xC0;                   //clear flag bits
        
    SPDAT=val2&0x7f;                 //slave spi send
    val2=val2+1;    

}


2楼: >>参与讨论
zlg900
中断号错误,这样的错误以后要尽量避免!
 
3楼: >>参与讨论
sinhwa
是lpc931
931的spi不是interrupt 14吗?

4楼: >>参与讨论
zlg900
不管是LPC931还是LPC932,其SPI中断向量都是同一个地址,
因此其都是同一个中断号

5楼: >>参与讨论
sinhwa
弱问一下
你说的中断号是指那个 interrupt 14吗?文档上写的spi是interrupt啊。

6楼: >>参与讨论
sinhwa
补充
文档上写的spi是interrupt 14啊。
P89LPC930_931_user_cn.pdf  page 11(总共71页的)
我理解的中断号就是第11页写的,不知道我理解的是不是对的。


7楼: >>参与讨论
zlg900
re
你理解错了,
中断号是由中断向量决定的,

中断向量  中断号
0003H      0
000BH      1
0013H      2
001BH      3
....
...
...
0043H     ?????   你自己数吧
如果不懂,去翻翻51教程吧,


8楼: >>参与讨论
sinhwa
OK了
OK了,谢谢

参与讨论
昵称:
讨论内容:
 
 
相关帖子
我想要一款MCU要求频率在20M,请大家推荐,价位
我想要一款MCU要求频率在20
转让CP900编程器
CCU脉冲捕捉,还没有搞定!请斑竹指教
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号