📄 spi.c
字号:
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
Uint16 table[10]={0x0000,0x00001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009};
void delay();
void spi_fifo_init(void);
void main(void)
{
Uint16 k=0,m=0,n=0,p=0,num=0;
InitSysCtrl(); //系统初始化
EALLOW; //关闭保护
GpioMuxRegs.GPFMUX.all=0x000F; //设置通用引脚为SPI引脚
EDIS; // 打开保护
DINT; //关总中断
IER = 0x0000;
IFR = 0x0000; //清除中断标志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //初始化PIE向量表
PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能从PIE单元获取中断向量
PieCtrlRegs.PIEIER6.bit.INTx2=1;
IER=0x20;
spi_fifo_init(); //SPI初始化
/////////////////////MAX7219初始化/////////////////////
SpiaRegs.SPITXBUF=0x09ff; //译码方式
while(SpiaRegs.SPISTS.bit.INT_FLAG==0); //等待数据发送完
delay();
// delay();
SpiaRegs.SPITXBUF=0x0A0a; ///亮度0-f
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
SpiaRegs.SPITXBUF=0x0B03; //扫描范围,0-7位数码管
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
SpiaRegs.SPITXBUF=0x0C01; //停机方式,开启(1);停机(0)
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
SpiaRegs.SPITXBUF=0x0F00; //测试模式,开(1),关(0)
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
////////////////向MAX7219发送数字//////////////////////
while(1)
{
p=num/1000; //千位
SpiaRegs.SPITXBUF=0x0100|table[p]; //|p;
while(SpiaRegs.SPISTS.bit.INT_FLAG==0); //等待数据发送完
delay();
// delay();
n=(num-p*1000)/100; //百位
SpiaRegs.SPITXBUF=0x0200|table[n];
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
m=(num-p*1000-n*100)/10; //十位
SpiaRegs.SPITXBUF=0x0300|table[m];
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
// delay();
k=num-p*1000-n*100-m*10; //个位
SpiaRegs.SPITXBUF=0x0400|table[k];
while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
delay();
//delay();
num++;
if(num==9999){num=0;}
delay();
//delay();
}
}
void spi_fifo_init()
{
SpiaRegs.SPICCR.bit.SPISWRESET=0; //清除SPI操作标志位,改变SPI配置
SpiaRegs.SPICCR.all=0x000F; //SPI配置寄存器,字符长度为16
SpiaRegs.SPICTL.all=0x000e; //SPI操作寄存器,为主机模式
SpiaRegs.SPIBRR=0x0066; //SPI波特率寄存器,
SpiaRegs.SPICCR.bit.SPISWRESET=1; //完成SPI配置
}
void delay(void)
{
int i,j;
for(i=0;i<500;i++)
{ for(j=0;j<300;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -