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