📄 spi-eerom.c
字号:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_GlobalPrototypes.h"
#include "f2812a.h"
//#include "DSP281x_Examples.h" // DSP281x Examples Include File
//#include "f2812a.h"
// Prototype statements for functions found within this file.
// interrupt void ISRTimer2(void);
//使用中断:interrupt void ISRTimer2(void);
//变量声明
void delay_loop(void);
void spi_dlb8(void);
void spi_xmit(int a);
int spi_rev();
void spi_fifo_init(void);
unsigned int Ret_var1=0;
unsigned int Ret_var2=0;
//void dac_loop(void);
void main(void)
{
//Step 1,初始化系统控制寄存器、锁相环、看门狗以及时钟默认状态
// int i;
//为充分发挥片上RAM M0/M1/L0/L1/H0的特性,设置下列寄存器
//DevEmuRegs.M0RAMDFT=0x0300;
//DevEmuRegs.M1RAMDFT=0x0300;
//DevEmuRegs.L0RAMDFT=0x0300;
//DevEmuRegs.L1RAMDFT=0x0300;
//DevEmuRegs.H0RAMDFT=0x0300;
InitSysCtrl();
//HISPCP/LOSPCP预定标定寄存器设置
SysCtrlRegs.HISPCP.all=0x0001;
SysCtrlRegs.LOSPCP.all=0x0002;
//Step3,初始化外设中断向量表
//屏蔽和清除所有CPU中断
DINT;
IER=0x0000;
IFR=0x0000;
//初始化PIE向量表
//InitPieVectTable()函数参考中断一章中DSP28_DefaultIsr.c相关代码
//InitPieVectTable();
//Step4,使用特定的函数重新分配向量使能中断
spi_fifo_init();// 初始化Spi FIFO
spi_dlb8(); //设置自测试模式
//Step5,循环等待
asm ("ESTOP0");//设置软断点
// for(;;);
}
//Step5,所有中断服务程序和函数
void delay_loop()
{
long i;
for (i=0;i<1000000;i++){}
}
//测试1,SPI 8位字符,自测试,主模式,上升沿,波特率设置0x07F
void spi_xmit(int a)
{
SpiaRegs.SPITXBUF=a;
//SpiaRegs.SPIDAT=a;
}
int spi_rev()
{
return SpiaRegs.SPIRXBUF;
}
void spi_fifo_init()
{
//初始化SPI FIFO寄存器
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x204F;
SpiaRegs.SPIFFCT.all=0x0;
}
//测试1,SPI 8位字符,自测试,主模式,上升沿,波特率设置0x07F
void spi_dlb8()
{
SpiaRegs.SPICCR.all=0x000F;//SPI复位,设置时钟为上升沿,8位字符长度
SpiaRegs.SPICTL.all=0x0006;// 使能主模式,标准相位
// 使能Talk,SPIINT屏蔽
SpiaRegs.SPIBRR=0x0009;//设置波特率
//Step2,配置芯片的通用数字I/O为希望的功能引脚
EALLOW;
GpioMuxRegs.GPFMUX.all=0x000F;//设置GPIO工作在SPI的功能
//Port F MUX-x000 0000 0000 1111
EDIS;
//退出复位状态
SpiaRegs.SPICCR.all=0x008F;//使SPI退出复位状态
//使能自测试模式
//位Changes for the test
//var3=WREN;
spi_xmit(WREN);//发送SPI
SpiaRegs.SPICTL.bit.TALK=0;
SpiaRegs.SPICTL.bit.TALK=1;
//SpiaRegs.SPICCR.bit.SPISWRESET=1;
spi_xmit(WRITE);
spi_xmit(0x0F);
spi_xmit(0x0A);
spi_xmit(0x56);
while(1){
spi_xmit(0x55);
//
}
//SpiaRegs.SPICCR.bit.SPISWRESET=0;
//SpiaRegs.SPICCR.bit.SPISWRESET=1;
SpiaRegs.SPICTL.bit.TALK=0;
SpiaRegs.SPICTL.bit.TALK=1;
spi_xmit(READ);
spi_xmit(0x0F);
spi_xmit(0x0A);
Ret_var1=spi_rev();
spi_xmit(RDSR);
Ret_var2=spi_rev();
SpiaRegs.SPICCR.bit.SPISWRESET=0;
//while (SpiaRegs.SPIFFRX.bit.RXFFST!=1) {}
//Test_flag4=SpiaRegs.SPIRXBUF;
//if (Test_flag4!=0x4141) error(1);
//Test_status[Test_var]=0x8000;//刷新测试状态
//Test_var++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -