#include"DSP281x_Device.h"
#include"DSP281x_Examples.h"
#define SCI_IO 0x0030
void IO_function(void);
void Scib_init(void);
void Scib_xmit(int a);
interrupt void scibRxFifoIsr(void);
void error(void);
Uint16 ReceivedChar;
void main(void)
{
InitSysCtrl(); //初始化系统控制寄存器、PLL、看门狗和时钟
IO_function();
DINT; //禁止和清除所有CPU中断向量表
InitPieCtrl(); //初始化PIE控制寄存器
IER=0x0000;
IFR=0x0000;
InitPieVectTable(); //初始化中断向量表
EALLOW;
PieVectTable.RXBINT = &scibRxFifoIsr;
EDIS;
PieCtrlRegs.PIECRTL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx3=1; // PIE Group 9, INT3
IER = 0x101; // Enable CPU INT
EINT;
ERTM; // 允许DEBUG中段
Scib_init();
for(;;)
{
/* while(ScibRegs.SCIFFRX.bit.RXFIFST==0){}
ReceivedChar=ScibRegs.SCIRXBUF.all;
ReceivedChar&=0xFF;
Scib_xmit(ReceivedChar);*/
}
}
void error(void)
{
asm(" ESTOP0"); // Test failed!! Stop!
for (;;);
}
void IO_function(void)
{
EALLOW;
GpioMuxRegs.GPGMUX.all|=SCI_IO; //SCIB口功能口
EDIS;
}
void Scib_xmit(int a)
{
ScibRegs.SCITXBUF=(a&0xff); //发送数据缓冲寄存器
while(ScibRegs.SCICTL2.bit.TXRDY!=1){}; //发送缓冲寄存器准备好标志位
}
//#pragma CODE_SECTION(Scib_init, "scib_rx_isrFuncs");
void Scib_init(void)
{
/* ScibRegs.SCIFFTX.all=0xE040; //允许接收,使能FIFO,没有FIFO中断
//清除TXFIFINT,
ScibRegs.SCIFFRX.all=0x204f; //使能FIFO接收,清除RXFFINT,16级FIFO
ScibRegs.SCIFFCT.all=0x0000; //禁止波特率校验
ScibRegs.SCICCR.all =0x0007; //1个停止位,无校验,禁止自测试,
//空闲地址模式,字长8位
ScibRegs.SCICTL1.all =0x0003; //复位
ScibRegs.SCICTL2.all =0x0000; //
ScibRegs.SCIHBAUD =0x0001; //设定波特率9600bps
ScibRegs.SCILBAUD =0x00E7; //设定波特率9600bps
ScibRegs.SCICCR.bit.LOOPBKENA =0; //禁止芯片内部连接
ScibRegs.SCIPRI.bit.FREE=1; //自由运行
ScibRegs.SCICTL1.all =0x0023; */
ScibRegs.SCIFFTX.all =0xE040; //允许接收,使能FIFO,没有FIFO中断
//清除TXFIFINT,
ScibRegs.SCIFFRX.all =0x2021; //使能FIFO接收,清除RXFFINT,16级FIFO
ScibRegs.SCIFFCT.all =0x0000; //禁止波特率校验
ScibRegs.SCICCR.all =0x0007; //1个停止位,无校验,禁止自测试,
//空闲地址模式,字长8位
ScibRegs.SCICTL1.all =0x0003; //复位
ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCIHBAUD =0x0001; //设定波特率9600bps
ScibRegs.SCILBAUD =0x00E7; //设定波特率9600bps
ScibRegs.SCICTL1.all =0x0023; //退出RESET
}
interrupt void scibRxFifoIsr(void)
{
ReceivedChar= ScibRegs.SCIRXBUF.all;
ReceivedChar&=0xFF;
Scib_xmit(ReceivedChar);
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}