天嵌 ARM开发社区

 找回密码
 注册
查看: 4156|回复: 7

SPI0中断方式发送数据

[复制链接]
TIAN-咫尺天涯 发表于 2014-1-2 21:41:49 | 显示全部楼层 |阅读模式
利用中断的方式通过SPI0发送数据,为什么总是进不了中断?
主函数:
void Main(void)
{   
     int i;
     int data[3]={0x0df,0x0bf,0x7f};
     U32 mpll_val = (92<<12)|(4<<4)|(1);
     U32 k;
     
     ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);// FCLK=202.8MHz
         ChangeClockDivider(12, 12);// 1:2:4
         
     cal_cpu_bus_clk();
     
     SPI_Init();
     IO_Init();
     
     Uart_Init(0,115200);
     Uart_Select(0);
     
     SPI0_Interrupt_Init();
     SPI_Init();

     Isr_Init();


     while(!(rSPSTA0&0x01));
     Uart_Printf("\n S3C2440 SPI COMMUNICATION TEST!\n");

     rSPTDAT0=0xdf;
     Uart_Printf("rSPSTA0 is %d\n",rSPSTA0);   
}

SPI0_Interrupt_Init()函数
void SPI0_Interrupt_Init(void)
{
     rINTMSK         &= ~(1 << 22) ;
}

SPI_Init()函数:
void SPI_Init(void)
{

   rGPECON=(2<<26)|(2<<24)|(2<<22);
   rGPEUP&=0x0C7FF;
   
   rGPGCON=(3<<14)|(3<<12)|(3<<10)|(3<<6)|(1<<4);
   rGPGUP&=0x0FF13;
   
   rSPPRE0=PCLK/2/ucSpiBaud-1;
   rSPCON0=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
   
//  rSPPRE1=PCLK/2/ucSpiBaud-1;
//  rSPCON1=(0<<5)|(1<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
   
   rSPPIN0=(0<<2)|(1<<1)|(0<<0);
//  rSPPIN1=(0<<2)|(1<<1)|(0<<0);
   rGPGDAT&=0x0FFFB;
}


TQ-ZQL 发表于 2014-1-3 10:49:39 | 显示全部楼层
中断向量表有没有指向中断函数
回复

使用道具 举报

 楼主| TIAN-咫尺天涯 发表于 2014-1-3 14:11:25 | 显示全部楼层
TQ-ZQL 发表于 2014-1-3 10:49
中断向量表有没有指向中断函数

中断函数和中断向量表如下,但还是进不了中断,不知道怎么搞得?
void Isr_Init(void)
{
        pISR_SPI0=(U32)SPI0_Isr;
}
void __irq SPI0_Isr(void)   //SPI0发送中断处理函数

{   
    int i;
    U32 k;
    Uart_Printf("rSPTDAT0\n");
    rSRCPND |= 1 << 22 ;
    rINTPND |= 1 << 22 ;
   
   k=rSPTDAT0;
   rGPBDAT=k;

   Uart_Printf("rSPSTA0 is %d\n",rSPSTA0);
   Uart_Printf("rSPTDAT0 is %x\n",k);
}
回复

使用道具 举报

TQ-ZQL 发表于 2014-1-3 16:11:08 | 显示全部楼层
pISR_SPI0是哪里定义的,代表什么,没有给出来。
回复

使用道具 举报

 楼主| TIAN-咫尺天涯 发表于 2014-1-3 17:27:34 | 显示全部楼层
TQ-ZQL 发表于 2014-1-3 16:11
pISR_SPI0是哪里定义的,代表什么,没有给出来。

贴出来的程序只是工程中的一部分,整个工程中还有其他的文件,pISR_SPI0在2440addr.h中做了声明,#define pISR_SPI0   (*(unsigned *)(_ISR_STARTADDRESS+0x78)),这个不是代表第2级中断向量表中SPI0中断的地址吗?整个程序编译没有错误,但就是运行不出结果,做了测试,就在
void SPI0_Interrupt_Init(void)
{

        rINTMSK         &= ~(1 << 22) ;
}这个函数处出了问题,不知道是我的SPI0寄存器配置错误,还是程序有问题,望大神指导呀!!
回复

使用道具 举报

TQ-ZQL 发表于 2014-1-4 09:46:36 | 显示全部楼层
有没有用软件调试功能有没有试过是可以发送的?
回复

使用道具 举报

 楼主| TIAN-咫尺天涯 发表于 2014-1-4 15:28:19 | 显示全部楼层
TQ-ZQL 发表于 2014-1-4 09:46
有没有用软件调试功能有没有试过是可以发送的?

谢谢大神耐心的回答!!有试过,没有数据发送出去。如果利用查询的方式发送数据的话,是可以发送的。晕死啊!顺便问一下,为什么我用Jlink+AXD进行单步调试时,非常卡,有时候直接卡死?
回复

使用道具 举报

TQ-ZQL 发表于 2014-1-6 10:28:46 | 显示全部楼层
没有数据发出去,要看下相关中断寄存器的值对不对,像中断使能,中断挂起等等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-10-29 04:42 , Processed in 2.042544 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表