求教DSP数码管动态显示问题。
时间:10-02
整理:3721RD
点击:
纯新手,求教SPI控制4个数码管分别同时显示1234,硬件电路如图,GPIO58~61控制数码管点亮,74HC164作为驱动芯片,GPIO54作为SPI输出,GPIO56作为时钟信号,程序运行后数码管不亮是什么情况?程序如下:
#include "DSP2833x_Device.h" // DSP280x头文件
#include "DSP2833x_Examples.h" // DSP280x例程中用到的头文件
/****************函数声明*******************/
void delay_loop(void);
void spi_xmit(Uint16 m);
void spi_fifo_init(void);
void spi_init(void);
void Gpio_ledwei_init();
/***************全局变量定义****************/
Uint16 LedBuffer[4]={0xc0,0xf9,0xa4,0xb0};
Uint16 wei[4]={0x20,0x10,0x08,0x04};
int a=0;
void delay()
{
Uint32 i;
for(i=10000;i>0;i--);
}
void main(void)
{
InitSysCtrl();
InitSpiaGpio(); //开发板使用SPIA
Gpio_ledwei_init();
DINT;
spi_fifo_init(); // 初始化Spi的FIFO
spi_init(); // 初始化SPI
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
while(1)
{
for(a=0;a<4;a++)
{
GpioDataRegs.GPBDAT.all=wei[a];
delay();
spi_xmit(LedBuffer[a]);
delay();
GpioDataRegs.GPBCLEAR.all=1;
delay();
}
a=0;
}
}
}
//初始化SPI函数
void spi_init()
{
SpiaRegs.SPICCR.all =0x004F;// SPI软件复位, 极性位为1(下降沿发送数据), 每次移
//进和移出16位字长度;禁止SPI内部回送(LOOKBACK)功能;
SpiaRegs.SPICTL.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
//溢出中断,禁止SPI中断;
SpiaRegs.SPIBRR =0x007F; //SPI波特率=25M/128 =195.3KHZ;
SpiaRegs.SPICCR.all =0x00CF;//停止SPI软件复位准备接收或发送;禁止回送模式;
SpiaRegs.SPIPRI.bit.FREE = 1; // 自由运行
}
//发送SPI数据
void spi_xmit(Uint16 m)
{
SpiaRegs.SPITXBUF=m;
}
//初始化SPI FIFO
void spi_fifo_init()
{
SpiaRegs.SPIFFTX.all=0xE040;//使能FIFO;清除发送中断标志位;禁止FIFO发送中断;
//发送中断级别定义为0;
SpiaRegs.SPIFFRX.all=0x204f;//清除FF溢出标志位;清除溢出接受中断标志位;禁止
//FF接受中断;接受中断级别为16;
SpiaRegs.SPIFFCT.all=0x0;//SPITXBUF到移位寄存器传送不延迟;
}
void Gpio_ledwei_init()
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO58=0;
GpioCtrlRegs.GPBPUD.bit.GPIO59=0;
GpioCtrlRegs.GPBPUD.bit.GPIO60=0;
GpioCtrlRegs.GPBPUD.bit.GPIO61=0;
GpioCtrlRegs.GPBPUD.bit.GPIO34=0;
GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO59 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
EDIS;
}
//===========================================================================
// No more.
//===========================================================================
#include "DSP2833x_Device.h" // DSP280x头文件
#include "DSP2833x_Examples.h" // DSP280x例程中用到的头文件
/****************函数声明*******************/
void delay_loop(void);
void spi_xmit(Uint16 m);
void spi_fifo_init(void);
void spi_init(void);
void Gpio_ledwei_init();
/***************全局变量定义****************/
Uint16 LedBuffer[4]={0xc0,0xf9,0xa4,0xb0};
Uint16 wei[4]={0x20,0x10,0x08,0x04};
int a=0;
void delay()
{
Uint32 i;
for(i=10000;i>0;i--);
}
void main(void)
{
InitSysCtrl();
InitSpiaGpio(); //开发板使用SPIA
Gpio_ledwei_init();
DINT;
spi_fifo_init(); // 初始化Spi的FIFO
spi_init(); // 初始化SPI
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
while(1)
{
for(a=0;a<4;a++)
{
GpioDataRegs.GPBDAT.all=wei[a];
delay();
spi_xmit(LedBuffer[a]);
delay();
GpioDataRegs.GPBCLEAR.all=1;
delay();
}
a=0;
}
}
}
//初始化SPI函数
void spi_init()
{
SpiaRegs.SPICCR.all =0x004F;// SPI软件复位, 极性位为1(下降沿发送数据), 每次移
//进和移出16位字长度;禁止SPI内部回送(LOOKBACK)功能;
SpiaRegs.SPICTL.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
//溢出中断,禁止SPI中断;
SpiaRegs.SPIBRR =0x007F; //SPI波特率=25M/128 =195.3KHZ;
SpiaRegs.SPICCR.all =0x00CF;//停止SPI软件复位准备接收或发送;禁止回送模式;
SpiaRegs.SPIPRI.bit.FREE = 1; // 自由运行
}
//发送SPI数据
void spi_xmit(Uint16 m)
{
SpiaRegs.SPITXBUF=m;
}
//初始化SPI FIFO
void spi_fifo_init()
{
SpiaRegs.SPIFFTX.all=0xE040;//使能FIFO;清除发送中断标志位;禁止FIFO发送中断;
//发送中断级别定义为0;
SpiaRegs.SPIFFRX.all=0x204f;//清除FF溢出标志位;清除溢出接受中断标志位;禁止
//FF接受中断;接受中断级别为16;
SpiaRegs.SPIFFCT.all=0x0;//SPITXBUF到移位寄存器传送不延迟;
}
void Gpio_ledwei_init()
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO58=0;
GpioCtrlRegs.GPBPUD.bit.GPIO59=0;
GpioCtrlRegs.GPBPUD.bit.GPIO60=0;
GpioCtrlRegs.GPBPUD.bit.GPIO61=0;
GpioCtrlRegs.GPBPUD.bit.GPIO34=0;
GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO59 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
EDIS;
}
//===========================================================================
// No more.
//===========================================================================
硬件电路图