您好!<br /><br />我利用SMARTARM2200控制一个短距离传输芯片,实现无线数传。数据传输接口采用SPI1接口。<br />SPI的配置如下:<br />uint32 SPIMode = _CPHA | _CPOL | _SPIE;//SPIMode=10011000<br />PINSEL1=(PINSEL1 & 0xFFFFFC03) | 0x2A8;<br />S1PCR = SPIMode;<br />VICVectAddr4 = (uint32)SPI_Tx_Exception;<br />VICVectCntl4 = (0x20 | 0x0B);<br />VICIntEnable = 1 << 11;<br /><br />void SPI_Exception(void)<br />{<br /> uint8 temp,rValue;<br /> temp = S1PSR;<br /> <br /> if((temp & 0x80) != 0)<br /> {<br /> rValue = S1PDR;<br /> S1PDR = 0x27;<br /> }<br /> <br /> S1PINT = 0x01; <br /> VICVectAddr = 0; <br />}<br /><br />该段程序实现连续时钟输入时的连续0x27输出。时钟速率在9.6kHz<br />单步调试时,程序能成功进入中断服务程序,但用综测看MISO口时,无数据输出。同时通过观察内存,当对S1PDR进行赋值后,0x300e0008的值没有改变,仍然是0x00。<br /><br />当在主函数中关闭中断后,调用如下代码,MISO可以看到连续的0x27输出。<br />while(1)<br />{<br /> S1PDR = 0x27;<br /> while((S1PSR & 0x80) == 0);<br />}<br />证明SPI的配置应该没有问题。<br /><br />请问是否不能在中断服务中对SPI的数据写入寄存器进行写入操作?<br /><br />还有另一个问题,SPI1口在从模式下,给9.6kHz时钟时能输出数据,但把时钟提高到19.2kHz后就没有数据输出了,通过综测观察,时钟的时序是没有错误的。 |
|