同步串口通讯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//aMain.c文件
//=================================================================== #include "DSPF2833x_Project.h"
//====================函数声明======================================= interrupt void spiTxFifoIsr(void);
interrupt void spiRxFifoIsr(void);
void spi_fifo_init(void);
void error();
//===================全局变量声明==================================== Unit16 sdata[8];
Unit16 rdata[8];
Unit16 rdata_point;
//===================主函数========================================== void main (void)
{
Unit16 i;
InitSysCtrl();
DINT;
InitPieCtrl();
IER=0x0000;
IFR=0x0000;
InitPieVectTable();
InitSpiaGpio();
//为中断向量入口赋值
EALLOW;//This is needed to write to EALLOW protected registers PieVectTable.SPIRXINTA=&spiRxFifoIsr;
PieVectTable.SPITXINTA=&spiTxFifoIsr;
EDIS ; //This is needed to write to EALLOW protected registers spi_fifo_init();
//初始化要发送的数据
for(i=o;i<8;i++)
{
sdata[i]=i;}
rdata_point=0;
//使能中断向量
PieCtrlRegs.PIECTRL.bit.ENPIE=1;
PieCtrlRegs.PIEIER6.bit.INTx1=1;
PieCtrlRegs.PIEIER6.bit.INTx2=1;
IER=0x20;
EINT;
// 死循环等待中断处理
for( ; ; );
}
//********************************************************************
/*
@Description:如果发生SPI测试错误,则停止测试
*/
//********************************************************************* void error (void)
{
asm("ESTOP0); // Test failed ! Stop!
for( ; ; );
}
//*************************************************************************** /*
@Description:SPI FIFO 初始化函数
*/
//*************************************************************************** void spi_fifo_init()
{
//InitializeSPIFIFOregisters
SpiaRegs.SPICCR.bit.SPISWRESET=0; //软件复位SPI
SpiaRegs.SPICCR.all=0x001F; //数据长度为16bit,Loopback模式
SpiaRegs.SPICTL.all=0x0017; //使能中断,使能Master/Slave XMIT
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x0063; //设置波特率
SpiaRegs.SPIFFTX.all=0xc028; //使能FIFO's,设置TX FIFO level 为8 SpiaRegs.SPIFFRX.all=0x0028; //设置RX FIFOlevel 为8
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIRRI.all=0x0010;
spiaRegs.SPICCR.bit.SPISWRESET=1; //重新使能PI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
}
//================中断服务子函数==================================
//***************************************************************************** **
/*
@Description:SPI FIFO发送中断服务子函数
*/
//***************************************************************************** ***
intrrupt void spiTxFifoIsr(void)
{
Unit16 i;
for(i=0;i<8;i++)