//#####################################################################
//文件: Example_281xSci_FFDLB_int.c
//说明: 该程序是SCI中断发送、接收的典型程序,
// 采用内部连接的自循环模式,即自发、自接
//#####################################################################
//SCI-A 发送的数据流:
//00 01 02 03 04 05 06 07
//01 02 03 04 05 06 07 08
//02 03 04 05 06 07 08 09
//....
//FE FF 00 01 02 03 04 05
//FF 00 01 02 03 04 05 06
//etc..
//SCI-B 发送的数据流:
//FF FE FD FC FB FA F9 F8
//FE FD FC FB FA F9 F8 F7
//FD FC FB FA F9 F8 F7 F6
//....
//01 00 FF FE FD FC FB FA
//00 FF FE FD FC FB FA F9
//etc..
//检查变量:
// SCI-A SCI-B
// ----------------------
// sdataA sdataB //发送的数据
// rdataA rdataB //接收的数据
// rdata_pointA rdata_pointB //用来检查接收到的数据
//#####################################################################
#include "D281x_.h" //F2812头文件
#include "DSP281x_Examples.h"
#define _FREQ 150E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//功能函数原型
interrupt void sciaTxFifoIsr(void);
interrupt void sciaRxFifoIsr(void);
interrupt void scibTxFifoIsr(void);
interrupt void scibRxFifoIsr(void);
void scia_fifo_init(void);
void scib_fifo_init(void);
void error(void);
//全局变量
Uint16 sdataA[8]; //SCI-A发送的数据
Uint16 sdataB[8]; //SCI-B发送的数据
Uint16 rdataA[8]; //SCI-A接收的数据
Uint16 rdataB[8]; //SCI-B接收的数据
Uint16 rdata_pointA; //用于检查接收到的数据
Uint16 rdata_pointB;
//主程序
void main(void)
{
Uint16 i;
//步骤1.初始化系统控制
//PLL, 看门狗,使能外设时钟
InitSysCtrl();
//步骤2.初始化GPIO
//InitGpio(); //在这里省略,只需配置以下与SCI有关的GPIO即可
EALLOW; //注意,需要EALLOE保护
GpioMuxRegs.GPFMUX.bit.SCITA_GPIOF4 = 1;
GpioMuxRegs.GPFMUX.bit.SCXDA_GPIOF5 = 1;
GpioMuxRegs.GPGMUX.bit.SCITX_GPIOG4 = 1;
GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1;
EDIS; //与EALLOW对应使用
//步骤3.清除所有的中断并初始化PIE中断向量表
DI; //禁止CPU中断
InitPieCtrl(); //初始化PIE控制寄存器
IER = 0x0000; //禁止 CPU 中断,并清除所有的 CPU 中断标志
IFR = 0x0000;
InitPieVectTable(); //初始化 PIE 中断向量表,将相应的中断向量指向中断服务程
//序,当中断发生时跳转到相应的中断服务程序处
EALLOW; //寄存器需要 EALLOE 保护
PieVectTable.RXAINT = &sciaRxFifoIsr;
PieVectTable.TXAINT = &sciaTxFifoIsr;
PieVectTable.RXBINT = &scibRxFifoIsr;
PieVectTable.TXBINT = &scibTxFifoIsr;
EDIS; //与 EALLOW 对应使用
//步骤4.初始化外设
//InitPeripherals(); //在本程序中可以省略
scia_fifo_init(); //初始化SCI-A
scib_fifo_init(); //初始化SCI-B
//步骤5.用户程序段,使能中断
//初始化要发送的数据
for(i = 0; i<8; i++)
{
sdataA[i] = i;
}
for(i = 0; i<8; i++)
{
sdataB[i] = 0xFF - i;
}
rdata_pointA = sdataA[0];
rdata_pointB = sdataB[0];
//使能所需的中断
PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块
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 = 0x100; //使能 CPU 中断
EINT;
//步骤6.空循环
for(;;);
}
void error(void)
{
asm(" EOP0"); //Test failed!! Stop!
for (;;);
}
//SCIA 发送中断服务程序
interrupt void sciaTxFifoIsr(void)
{
Uint16 i;<