打印
[DSP编程]

SPI没有时钟信号

[复制链接]
1360|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Doreen1995|  楼主 | 2017-12-21 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助大神,我在练习SPI过程中遇到一些问题。28335通过SPI给一位数码管发数(中间是74HC595)下边是代码,只发了一个数,但是SPIclk没有信号,数据根本没有发出去,是什么问题导致的呢

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"
//const char table[16]={0x0c00,0xf900,0xA400,0xB000,0x9900,0x9200,0x8200,0xF800,0x8000,0x9000};
//int i;
void spi_intial()//SPI初始化
{
        SpiaRegs.SPICCR.all=0x0047;//使SPI处于复位模式,下降沿,8位数据
        SpiaRegs.SPICTL.all=0x0006;//主控模式,一般时钟模式
                                    //关闭SPI中断
        SpiaRegs.SPIBRR=0x007F;//配置波特率
        SpiaRegs.SPICCR.all=SpiaRegs.SPICCR.all|0x0080;//退出复位状态
        EALLOW;
        GpioCtrlRegs.GPBMUX2.bit.GPIO54=1;//设置通用引脚为SPI引脚
        GpioCtrlRegs.GPBMUX2.bit.GPIO56=1;
        EDIS;
}
void gpio_init()
{
        EALLOW;
        GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;//GPIO27设置为一般I/O,输出
        GpioCtrlRegs.GPBDIR.bit.GPIO57=1;
        EDIS;
        GpioDataRegs.GPBDAT.bit.GPIO57=0;//GPIO57接口为74HC595D锁存信号

}
void main(void)
{
        unsigned long int k=0;
        InitSysCtrl();
        DINT;
        IER=0x0000;
        IFR=0x0000;
        spi_intial();
        gpio_init();
        //spi_fifo_init();
        while(1)
        {

                //for(i=0;i<8;i++)
                //{
                        for(k=0;k<10;k++){}
                        GpioDataRegs.GPBDAT.bit.GPIO57=0;
                        SpiaRegs.SPITXBUF=0x3f00;
                        while(SpiaRegs.SPISTS.bit.INT_FLAG!=1){}//等待发送
                        SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;//清零

                //}
                        GpioDataRegs.GPBDAT.bit.GPIO57=1;
                        for(k=0;k<10;k++){}
        }

}

相关帖子

沙发
zhangmangui| | 2017-12-24 22:25 | 只看该作者
供参考
void spi_init()
{
InitSpiaGpio();
//  不使用FIFO
SpiaRegs.SPICCR.all =0x0007;
            // 空闲时,CLK=1 Reset on, rising edge, 8-bit char bits
SpiaRegs.SPICTL.all =0x000E;   
    // Enable master mode, normal phase,
                                                  // enable talk, and SPI int disabled.
SpiaRegs.SPIBRR =0x0005;                     //波特率 LSPCLK/(SPIBRR+1) 7.5M   LSPCLK=37.5M
     SpiaRegs.SPICCR.bit.SPISWRESET=1;         // Relinquish SPI from Reset
     SpiaRegs.SPIPRI.bit.FREE = 1;                // Set so breakpoints don't disturb xmission

}




u8 SPIx_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)   //等待发送区空
发送缓冲区空时  SR的bit1 为1  不空的时为0 与后的结果为0,继续等待
{
retry++;
if(retry>200)return 0;
}
SpiaRegs.SPITXBUF=(TxData|0x8000)<<8 ;
//发送一个byte
retry=0;
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1)
{
retry++;
if(retry>200)return 0;
}
return ((SpiaRegs.SPIRXBUF)&0x00ff);          //返回收到的数据

}


使用特权

评论回复
板凳
airwill| | 2017-12-27 21:21 | 只看该作者
这种情况, 最常见的问题是端口配置问题

使用特权

评论回复
地板
zhangmangui| | 2018-1-2 23:50 | 只看该作者
楼主问题解决了吗

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝