[ZLG-ARM] LPC2103的ISP做从机,CS5571做主机,通信就是不能用中断

[复制链接]
2151|1
 楼主| twb0906 发表于 2008-9-19 09:34 | 显示全部楼层 |阅读模式
 现在手头上有个项目,CPU是LPC2103,他的SPI0用作从机,主机则是CS5571,此时CS5571的时钟16MHz,可是只要LPC2103采用SPI中断方式程序就死机,我采用是前后台程序。<br /> 对SPI采用查询方式时,程序是能够正常工作的,不知是怎么回事,望大家帮看看,是错在那了!<br />  感谢!<br />SPI初始化:<br />INT8U&nbsp;SPI0SInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;stemp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;&nbsp;&nbsp;ltemp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//SPI0&nbsp;&nbsp;&nbsp;&nbsp;引脚定义<br />&nbsp;&nbsp;&nbsp;&nbsp;ltemp&nbsp;=&nbsp;PINSEL0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ltemp&nbsp;&=&nbsp;0xffff00ff;//0xffff0cff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ltemp&nbsp;|=&nbsp;0x00004500;//0x00005100;&nbsp;//SSEL,MOSI,SCK<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;ltemp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;stemp&nbsp;=&nbsp;S0PCR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;&=&nbsp;0xf003;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;|=&nbsp;0x0084;&nbsp;&nbsp;&nbsp;&nbsp;//0x0004;0x0084<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S0PCR&nbsp;=&nbsp;stemp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;TRUE;<br />}<br /><br />SPI中断<br />void&nbsp;SPI0_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;stemp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;S0PSR;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((temp&0x10)!=0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//模式错误<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;=&nbsp;S0PCR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;&=&nbsp;0xf003;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;|=&nbsp;0x0084;&nbsp;&nbsp;&nbsp;&nbsp;//0x0004;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S0PCR&nbsp;=&nbsp;stemp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((temp&0x40)!=0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//写冲突<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stemp&nbsp;=&nbsp;S0PDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((temp&0x80)!=0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//SPI&nbsp;传输完成标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPIData&nbsp;=&nbsp;S0PDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;S0PINT&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;通知中断控制器中断结束<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />}<br />&nbsp;void&nbsp;VICInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;IRQ_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;Timer0_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;SPI0_Exception(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;UART0_Handler(void);<br />&nbsp;//&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;UART1_Handler(void);<br />&nbsp;&nbsp;//&nbsp;&nbsp;extern&nbsp;void&nbsp;EINT0_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;Timer1_Handler(void);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnClr&nbsp;=&nbsp;0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICDefVectAddr&nbsp;=&nbsp;(uint32)IRQ_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr1&nbsp;=&nbsp;(uint32)Timer0_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl1&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;4);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr10&nbsp;=&nbsp;&nbsp;(INT32U)SPI0_Exception;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl10&nbsp;=&nbsp;&nbsp;(0x20&nbsp;|&nbsp;10);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;10;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr2&nbsp;=&nbsp;&nbsp;(INT32U)UART0_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl2&nbsp;=&nbsp;&nbsp;(0x20&nbsp;|&nbsp;6);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;//&nbsp;&nbsp;VICVectAddr2&nbsp;=&nbsp;&nbsp;(INT32U)UART1_Handler;<br />&nbsp;&nbsp;//&nbsp;&nbsp;VICVectCntl2&nbsp;=&nbsp;&nbsp;(0x20&nbsp;|&nbsp;7);&nbsp;<br />&nbsp;&nbsp;//&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;7;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;//&nbsp;&nbsp;VICVectAddr4&nbsp;=&nbsp;&nbsp;(INT32U)EINT0_Handler;<br />&nbsp;//&nbsp;&nbsp;&nbsp;VICVectCntl4&nbsp;=&nbsp;&nbsp;(0x20&nbsp;|&nbsp;14);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;14;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr3&nbsp;=&nbsp;(uint32)Timer1_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl3&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;5;<br />&nbsp;}<br /> 相关链接:<a href='http://www.honestar.com/product/datasheet/CIRRUS/CIRRUS/CS5571_A5.pdf'>http://www.honestar.com/product/datasheet/CIRRUS/CIRRUS/CS5571_A5.pdf</a>
 楼主| twb0906 发表于 2008-9-20 09:03 | 显示全部楼层

怎么没人说一下啊!

自己发一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

44

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部