打印
[ZLG-ARM]

SPI从机模式基于中断的连续数据发送问题

[复制链接]
2054|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ponshm|  楼主 | 2008-1-15 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好!

我利用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后就没有数据输出了,通过综测观察,时钟的时序是没有错误的。

相关帖子

沙发
zlgarm| | 2008-1-15 14:40 | 只看该作者

回复如下:

ponshm,您好!
    对于您的问题作如下回答:
    1、您单步调试的时候看是否能执行到S1PDR = 0x27;这条代码;
    2、如果您还没有找出问题的原因的话,请您把您的源代码发送到我公司邮箱ARM@zlgmcu.com。我们给您调试一下。


                                                    By zlgarm_wzj

使用特权

评论回复
板凳
huangbingg| | 2008-2-26 13:30 | 只看该作者

是程新有问题吧

在你的SPI_Exception中,((temp & 0x80) != 0)满足时,表示SPIF位置位,即spi传输已经结束,这时你用 S1PDR = 0x27写S1PDR 寄存器又有何意义呢?所以你单步调试时,程序能成功进入中断服务程序,但用综测看MISO口时,无数据输出。同时通过观察内存,当对S1PDR进行赋值后,0x300e0008的值没有改变,仍然是0x00。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝