//============================================================================
//
// 程序功能描述:
//
// 该程序为 SCI 内部自测试程序,程序首先发送数据 0x00 到0xFF,然后接收数// 据,并将接收到的数据与发送的数据进行比较
//
// 测试变量:
// 接收数据中错位数据的个数
// ErrorCount
//============================================================================
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
//------------------------------------功能函数原型----------------------------
void scia_loopback_init(void);
void scia_fifo_init(void);
void scia_xmit(int a);
void error(int);
interrupt void scia_rx_isr(void);
interrupt void scia_tx_isr(void);
//--------------------------------------全局变量------------------------------
Uint16 LoopCount;
Uint16 ErrorCount;
//---------------------------------------主程序-------------------------------
void main(void)
{
Uint16 SendChar;
Uint16 ReceivedChar;
// 步骤1.初始化系统控制-------------------------------------------------------
// PLL,看门狗,使能外设时钟
InitSysCtrl();
// 步骤2.初始化GPIO-----------------------------------------------------------
// InitGpio();在本例中可以省略,只需配置与 SCI 相关的 GPIO 即可
EALLOW;
GpioMuxRegs.GPFMUX.all=0x0030; //设置I/O 口为 SCI 口
EDIS;
// 步骤3.初始化中断向量表-----------------------------------------------------
// 禁止并清除所有的 CPU 中断
DINT;
IER = 0x0000;
IFR = 0x0000;
//初始化 PIE 控制寄存器到默认状态
// InitPieCtrl(); 本例子中不用 PIE
InitPieVectTable();
//使能 CPU 和 PIE 中断
EnableInterrupts();
// 步骤4.初始化所有的外设-----------------------------------------------------
// InitPeripherals(); SCI测试时跳过此函数
// 步骤5.用户定义程序段、分配向量、使能中断------------------------------------
LoopCount = 0;
ErrorCount = 0;
scia_fifo_init(); // 初始化SCI FIFO
scia_loopback_init(); // 初始化 SCI 为自循环模式
SendChar = 0; // 初始化发送变量
// 步骤6.发送数据并检测接收到的数据-------------------------------------------
for(;;)
{
scia_xmit(SendChar);
while(SciaRegs.SCIFFRX.bit.RXFIFST !=1) { } // 等待 XRDY =1 (空闲态),即等待数, 据发送
ReceivedChar = SciaRegs.SCIRXBUF.all; //检测接收到的数据
if(ReceivedChar != SendChar) error(1);
SendChar++;// 转移到下一个发送的数据,并重复该操作
SendChar &= 0x00FF; // 限制发送数据为8位格式
LoopCount++;
}
}
void error(int ErrorFlag)
{
ErrorCount++;
// asm(" ESTOP0"); // Uncomment to stop the test here
// for (;;);
}
// 测试 1,SCIA DLB, 8位数据格式, 波特率为 0x000F, default, 1 个停止位,没有奇偶校验位
void scia_loopback_init()
{
// 注意:如果SCIA的时钟没有打开,那么需要软件打开
// in the InitSysCtrl() function
SciaRegs.SCICCR.all =0x0007; //一个停止位、没有奇偶校验位、8位数据格式、同步模式、空闲线模式
SciaRegs.SCICTL1.all =0x0003; //使能发送、接收、和内部时钟,禁止 RX EER、SLEEP、TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =0x000F;
SciaRegs.SCICCR.bit.LOOPBKENA =1; // 使能自循环
SciaRegs.SCICTL1.all =0x0023;
}
//---------------------------------发送数据函数-------------------------------
void scia_xmit(int a)
{
SciaRegs.SCITXBUF=a;
}
//---------------------------------初始化 SCI FIFO ----------------------------
void scia_fifo_init()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
}
//===========================================================================
// No more.
//===========================================================================
sci.rar_sci
版权申诉
157 浏览量
2022-09-14
17:54:31
上传
评论
收藏 2KB RAR 举报
weixin_42651887
- 粉丝: 81
- 资源: 1万+
评论0