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

📄 sci_test.c

📁 dsp串口通讯程序样例
💻 C
字号:
// 文件名称:	SCI_interrupt.c

#include "DSP281x_Device.h" 
#include "DSP281x_Examples.h"    
#include "DSP281x_GlobalPrototypes.h" 

// 使用的函数原型声明
void Gpio_select(void);
void InitSystem(void);  
interrupt void sciaTxIsr(void);
interrupt void sciaRxIsr(void);
interrupt void scibTxIsr(void);
interrupt void scibRxIsr(void);

volatile int data1;
volatile int data2;

void main(void)
{  
   // Initialize System Control:
    InitSystem();	
   // 配置GPIO复用功能寄存器
	Gpio_select();		
   //  CPU interrupts
    DINT;
    InitPieCtrl();
    IER = 0x0000;//Disable CPU interrupts and clear all CPU interrupt flags:
    IFR = 0x0000;
    InitPieVectTable();// Enable the PIE Vector Table
    EALLOW;	// EALLOW protected registers
    PieVectTable.TXAINT = &sciaTxIsr;
    PieVectTable.RXAINT = &sciaRxIsr;
  //  PieVectTable.TXBINT = &scibTxIsr;
  //  PieVectTable.RXBINT = &scibRxIsr;
    EDIS;   // disable write to EALLOW protected registers   
    InitSci(); 
   // Scib_init();
    PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block
    PieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIE Group 9, INT1
    PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIE Group 9, INT2
   // PieCtrlRegs.PIEIER9.bit.INTx3=1;     // PIE Group 9, INT3
   // PieCtrlRegs.PIEIER9.bit.INTx4=1;     // PIE Group 9, INT4
    IER |= M_INT9;	// Enable CPU INT
    EINT;  //全局使能
    ERTM;	// Enable Global realtime interrupt DBGM*/
    for(;;)
    {}
}

void Gpio_select(void)
{
	EALLOW;
    GpioMuxRegs.GPFMUX.all = 0x0;  //"0"--GPIO		 
    GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; //配置  SCIA-RX
    GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; //配置  SCIA-TX 
    
    GpioMuxRegs.GPGMUX.all = 0x0;	
    GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4 = 1; //配置  SCIB-TX		
	GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1; //配置  SCIB-RX
										
    GpioMuxRegs.GPFDIR.all = 0x0;	  // GPIO PORT   配置为输入
    GpioMuxRegs.GPFDIR.bit.GPIOF4 = 1; //配置  SCIA-TX output
    GpioMuxRegs.GPGDIR.all = 0x0;	  // GPIO PORT   配置为输入 
    GpioMuxRegs.GPGDIR.bit.GPIOG4 = 1; //配置  SCIB-TX  output
    EDIS;    
}

void InitSystem(void)
{   
    Uint16 i;
   	EALLOW;
   	 // 禁止看门狗模块
   	SysCtrlRegs.WDCR= 0x0068;					
   	SysCtrlRegs.PLLCR.bit.DIV = 10;	// 配置处理器锁相环,倍频系数为5 
   	//等待锁相环稳定
   	for(i=0;i<5000;i++){}	
   	 
   	SysCtrlRegs.HISPCP.all = 0x1;   // 配置高速外设时钟分频系数: 2
   	SysCtrlRegs.LOSPCP.all = 0x2;   // 配置低速外设时钟分频系数: 4  	
   	// 使用的外设时钟时钟设置:
   	// 一般不使用的外设的时钟禁止,降低系统功耗   
   	SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;  // 使能SCIA模块的时钟
   	SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;  //使能SCIB模块的时钟
   	SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
   	EDIS;
}  

interrupt void sciaTxIsr(void)
{
  if( SciaTx_Ready()==1)
	{
	  SciaRegs.SCITXBUF=data1;
	}	
	PieCtrlRegs.PIEACK.all |=0x100 ;      // Issue PIE ACK
	EINT;
}

interrupt void sciaRxIsr(void)
{
	if(SciaRx_Ready()==1)
	{
		data1=SciaRegs.SCIRXBUF.all;
		data1&=0xFF;
	    SciaRegs.SCITXBUF=data1;
	}	
	PieCtrlRegs.PIEACK.all |=0x100 ;     // Issue PIE ACK
	EINT;
}

interrupt void scibTxIsr(void)
{ 
  if(ScibTx_Ready()==1)
	{
	  ScibRegs.SCITXBUF=data2;
	}	
	PieCtrlRegs.PIEACK.all |=0x100 ;      // Issue PIE ACK
	EINT;
}

interrupt void scibRxIsr(void)
{
	if(ScibRx_Ready()==1)
	{
		data2=SciaRegs.SCIRXBUF.all;
		data2&=0xFF;
		SciaRegs.SCITXBUF=data2;
	}	
	PieCtrlRegs.PIEACK.all |=0x100 ;      // Issue PIE ACK
	EINT;	
}

⌨️ 快捷键说明

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