用的lm3s8962,在调试SSI模块,基于中断从机模式,进入不了中断函数(总中断打开,允许SSI模块中断),后来看了有关SSI中断的四个寄存器: 中断屏蔽寄存器 :位31--4保留,TXIM,RXIM,RTM,RORIM 原始中断状态寄存器:位31--4保留,TXRIS,RXRIS,RTRIS,RORRIS 屏蔽后的中断状态 :位31--4保留,TXMIS,RXMIS,RTMIS,RORMIS
最后一个寄存器 中断清零寄存器:位31--2保留,RTIC,RORIC 只有接收溢出中断清零和接收超时中断清零两位;那发送FIFO中断和接收FIFO中断两位不用手动清零? 看到SSIIntClear函数源码: void SSIIntClear(unsigned long ulBase, unsigned long ulIntFlags) { // // Check the arguments. // ASSERT((ulBase == SSI0_BASE) || (ulBase == SSI1_BASE));
// // Clear the requested interrupt sources. // HWREG(ulBase + SSI_O_ICR) = ulIntFlags; }
那么请问调用SSIIntClear(SSI_BASE, SSI_RXFF)有什么用? 老说不要关心寄存器,那我要不看寄存器还以为接收FIFO中断已经清零了呢,实际上不是,因为中断清零寄存器只有接收溢出和接收超时两位,就这个寄存器原厂工程师是再清楚不过了吧,问他们不就知道了,可zlg公司的人说是不清楚原厂工程师过来上班的事,晕啊。
如果原厂工程师自己设计的东西都不知道怎么回事,那谁还敢用他们的产品!
|