📄 sci_test.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 + -