昨天我发了个帖,关于spi通信。可能没说明白,今天重发一个,希望大家帮帮忙,快过年了,弄不出来,愁呀~~~
1)用bf518的spi跟单片机数据传递;
2)为slaver模式,使用spi1,
3) 必须用Spi1中断处理,因为用查询法接收数据总不完整;(这就是最烦人的地方)
如果不使用EX_INTERRUPT_HANDLER(sync_isr)和void spi_Interrupt(void);这两个函数,下面其它代码单程序运行while()是能收发数据的!!
现在就是想加入中断,能多线程并行,spi收发才能及时处理~~
=======================================================
主要代码如下:(其注释为存在疑问的地方)
EX_INTERRUPT_HANDLER(sync_isr)
{
*pDMA7_IRQ_STATUS |= ???; //还是用*pspi_STATUS = (????);
spi_sr(0x55);
}
void spi_Interrupt(void)
{
register_handler(ik_ivg7,sync_isr); //此处中断向量和中断函数入口设置;
*pSIC_IAR6 &= 0xFFFFFFF0;
*pSIC_IAR6 |= 0xFFFFFFF0;
*pSIC_IMASK1 |= ???; //此处设置成任何数都不产生中断!!
}
//=============以下程序可以运行,也可以收发数据================
void spi_init(void)
{
*pPORTH_FER = 0x0000;/
*pPORTH_MUX = 0x0000;
*pPORTHIO_DIR = ( PH1);
*pPORTH_FER |= (PH0|PH1|PH2|PH3);//
*pPORTH_MUX = 0x0001; // set SPI-Ports
*pSPI1_CTL = 0x0030 ;
*pSPI1_CTL |= (CPHA| CPOL);
*pSPI1_CTL = PSSE;
*pSPI1_CTL |= SPE;
*pSPI1_TDBR = 0x55;
}
spi_sr(0x55)
{
if((*pSPI1_STAT & RXS))
{
data= *pSPI1_RDBR;
*pSPI1_TDBR = ch;//直接把收到的数据又发出去;
}
}
int main()
{ spi_init();
while(1) // spi_sr(0x55);
{; }
}
//============================
还是想问问 有没有spi中断应用这方面的demo程序??
pdf反复看都没看懂怎么设置中断~~
「该帖子被 szrong3000 在 2012-01-11 21:33:32 编辑过」