?? 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);
void error(int);
void program_stop();
unsigned int var1=0;
unsigned int var2=0;
unsigned int var3=0;
unsigned int var4=0;
unsigned int var5=0;
unsigned int Test_count=0;
unsigned int Test_flag1=0;
unsigned int Test_flag2=0;
unsigned int Test_flag3=0;
unsigned int Test_flag4=0;
unsigned int Test_var=0;
unsigned int Test_status[32];
unsigned int PASS_flag=0;
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(); //設置自測試模式
//設置測試狀態標志
if (PASS_flag!=0)
PASS_flag=0xDEAD;
else
PASS_flag=0xD0BE;
//Step5,循環等待
asm ("ESTOP0");//設置軟斷點
// for(;;);
}
//Step5,所有中斷服務程序和函數
void delay_loop()
{
long i;
for (i=0;i<1000000;i++){}
}
void error(int ErrorFlag)
{
PASS_flag=0xDEAD;
Test_status[Test_var]=0xDEAD;
}
//測試1,SPI 8位字符,自測試,主模式,上升沿,波特率設置0x07F
void spi_dlb8()
{
SpiaRegs.SPICCR.all=0x0007;//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=0x0087;//使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);
//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++;
}
void spi_xmit(int a)
{
SpiaRegs.SPITXBUF=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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -