⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci.c

📁 TMS320LF2407与PC的232通讯程序
💻 C
字号:
// 功能描述:下面给出一个在两个DSP之间实现简单异步通信的通用程序
#include 	"register.h"

int songreceive[5] = {8,8,8,8,8};
//禁止总中断子程序       
void  inline  disable() 
{
	asm(" setc INTM");
	asm(" setc SXM");
}
//使能总中断子程序
void 	inline 	enable() 
{
	asm(" clrc INTM");
}
main( ) 
{
	disable();      		    		//禁止所有中断 
	IFR=0xFFFF;							// 清除中断标志   
	SCSR1=0x81FE;        	 			//CLKIN=6M,CLKOUT=24M
	WDCR=0xE8;           				//不使能看门狗
	SCICCR=0x07;           				//1个停止位,不使能奇偶校验,空闲线多处理
	/*
	bit7		0		一个停止位
	bit6		0		奇校验
	bit5		0		禁止奇偶校验
	bit4		0		选择自测试模式
	bit3		0		选择空闲线多处理器模式
	bit2~0		111		SCI字符长度选择8位
	*/

	SCICTL1=0x13;  //使能接收和发送,SLEEP=0 禁止休眠方式
	/*
	bit7		0		reserved
	bit6		0		RX ERR INT ENA;forbid receiving wrong interuppt
	bit5		0		SW RESET;SCI software reset bit
	bit4		1		reserved
	bit3		0		TXWAKE;choice bit of wake SCI send
	bit2		0		SLEEP bit; forbid sleep mode
	bit1		1		TXENA;allow send
	bit0		1		rxena;allow receive		
	*/
 				   //禁止接收错误中断,TXWAKE=0 即没有选定的发送特征
	SCICTL2=0x3;   //使能接收和发送中断
	/*
	bit7		0		TXRDY;SCITXBUF full
	bit6		0		tx empty;scitxbuf or txshf or both been loaded
	bit5~2		0000	reserved;
	bit1		1		rx/bk int ena;enable rxrdy/brkdt interrupt
	bit0		1		tx int ena; enable txrdy interrupt 
	*/
	SCIHBAUD=0x4;
	SCILBAUD=0x10;     	 //波特率=4800B/S
	SCICTL1 |= 0x20;        //00110011;使SCI脱离复位状态
	SCIPRI=0x60;         //00000000;SCI中断(接收和发送中断)为低优先级中断
	MCRA=0x3;
	MCRB &=	0XFFFE;

	IMR=0x10;			  //使能UART中断-INT5
	enable();			  //使能总中断
	SCITXBUF=20;
	while(1) ;
}                
void   UartSent( )          			 //发送服务程序
{
	int kk = 0;
	const	int		max[5] = {66,77,88,99,11};
	static  int  i=0;
	if(i>5)  return;
	SCITXBUF=max[i++];				//依次发送定义的字符串中的各个字符

	IFR |= 0x0010; 					//清除IFR中相应的中断标志 
	enable();						//开总中断,因为一进入中断服务程序总中断就自动关闭了
}   
void   UartRec()          			//接收服务程序
{
                       
	static int  receive[5]={22,22,22,22,22},j=0;
	receive[j++] = SCIRXBUF;//依次接收字符
	songreceive[j-1] = receive[j-1]; 

	if(j>9) return;
	IFR |= 0x0010;				    	//清除IFR中相应的中断标志 
	enable();						//开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void  interrupt  uarttr( )    		//中断服务程序
{

	switch (PIVR)					//根据中断向量寄存器PVIR的值区别是接收还是发送中断
	{
		//如果PIVR=6,则发生了接收中断,执行接收服务程序
		case 7:UartSent( );		//如果PIVR=7,则发生了发送中断,执行发送服务程序
				break;
		case 6:UartRec( );			//如果PIVR=6,则发生了接收中断,执行接收服务程序
				break;
		default:break;
	}
}

//当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
void  interrupt  nothing() 
{
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -