DSP SCIB接收中断程序

  • 初始化GPIO。
  • 初始化SCIB。
  • 中断相关操作(开启中断)
  • 接收中断函数入口

下面是程序,不好的地方还请指教,有问题的也可以互相进步。

/*
 * main.c
 */
//#include "DSP2833x_Device.h"
//#include "DSP2833x_Examples.h"
#include "DSP2833x_Project.h"

void Init_Fifo_Scib(void);
void scib_xmit(int a);
void scib_msg(char * msg);
interrupt void Scib_RxInter(void);

int main(void)
{
	char *msg;

	InitSysCtrl();
	InitScibGpio();
	DINT;
	InitPieCtrl();
	IFR = 0x0000;
	IER = 0x0000;
	InitPieVectTable();

	MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
	InitFlash();

	Init_Fifo_Scib();

	EALLOW;
	PieVectTable.SCIRXINTB = &Scib_RxInter;
	EDIS;

	IER |= M_INT9;
	PieCtrlRegs.PIEIER9.bit.INTx3 = 1;

	EINT;
	ERTM;

	msg = "\r\nHello DSP!\0";
	scib_msg(msg);

	msg = "\r\nsend everything a character,and the DSP will echo it back! \n\0";
	scib_msg(msg);

	while(1);


	return 0;
}

void Init_Fifo_Scib(void)
{
	ScibRegs.SCICCR.all = 0x0007;		// 1 stop bit,  No loopback
										// No parity,8 char bits,
    									// async mode, idle-line protocol
	ScibRegs.SCICTL1.all = 0x0003;		// enable TX, RX, internal SCICLK,
    									// Disable RX ERR, SLEEP, TXWAKE
	ScibRegs.SCICTL2.bit.RXBKINTENA = 1;	//Enable RX interrupt

	#if (CPU_FRQ_150MHZ)
	      ScibRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
	      ScibRegs.SCILBAUD    =0x00E7;
	#endif
/*
	#if (CPU_FRQ_100MHZ)
	      ScibRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 20MHz.
	      ScibRegs.SCILBAUD    =0x0044;
	#endif
*/

/*
	ScibRegs.SCIFFTX.bit.SCIFFENA = 1;		//SCI FIFO功能使能
	ScibRegs.SCIFFTX.bit.SCIRST = 1;		//SCI FIFO能继续发送或接收
	ScibRegs.SCIFFTX.bit.TXFFIENA = 0;		//屏蔽TX FIFO中断
	ScibRegs.SCIFFTX.bit.TXFFIL = 0x0C;		//发送FIFO深度为12级
	ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;	//清除TXFFINT标志位
	ScibRegs.SCIFFTX.bit.TXFIFOXRESET = 0;	//复位FIFO指针指向0并保持复位状态

	ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1;	//清除RXFFOVF标志位
	ScibRegs.SCIFFRX.bit.RXFFINTCLR = 1;	//清除RXFFINT标志位
	ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;	//接收FIFO复位
	ScibRegs.SCIFFRX.bit.RXFFIENA = 1;		//使能RX FIFO中断
	ScibRegs.SCIFFRX.bit.RXFFIL = 0x0C;		//接收FIFO深度为12级
*/

//	ScibRegs.SCIFFCT.all = 0x0000;
	ScibRegs.SCICTL1.all = 0x0023;		// Relinquish SCI from Reset

/*
	ScibRegs.SCIFFTX.bit.TXFIFOXRESET = 1;	//重新使能发送FIFO
	ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;	//重新使能接收FIFO
*/
}

void scib_xmit(int a)
{
	while(ScibRegs.SCICTL2.bit.TXRDY == 0);
	ScibRegs.SCITXBUF = a;
}

void scib_msg(char * msg)
{
	int i = 0;

	while(msg[i] != '\0')
		scib_xmit(msg[i ++]);

}

interrupt void Scib_RxInter(void)		//接收中断是一位位传送
{
	Uint16 data;

	data = ScibRegs.SCIRXBUF.all;
	scib_xmit(data);

/*	ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1;
	ScibRegs.SCIFFRX.bit.RXFFINTCLR = 1;*/
	PieCtrlRegs.PIEACK.bit.ACK9 = 1;
}

猜你喜欢

转载自blog.csdn.net/qq_41926120/article/details/81289177
dsp