
导语:
串口通讯(Serial Communication)是一种简单常用的通信方式,绝大部分芯片的硬件都支持该协议,电子工程师在开发中也经常使用该协议打印调试信息。
SCI简介:
SCI 模块支持两线异步串行协议,通常称为 UART,支持CPU 和其他使用标准非归零格式的异步外设之间的数字通信。中科昊芯的SCI 具有 4 级深度 FIFO,用于减少硬件开销,支持丰富的波特率配置,同时具备中断机制,奇偶校验,溢出和帧错误检测。本期我们做一个SCI通讯的例程:利用Core_DSC28027核心板,实现自动波特率及数据收发的功能。
本程序继续中科昊芯Core_DSC28027核心板,相关资料可以在中科昊芯官网下载:
http://www.haawking.cn/kfb
运行效果:
该程序没有初始化波特率,需要通讯设备先发送特定字符’A‘或者’a‘,来实现自动波特率。自动波特率匹配成功后便可以进行通讯,该程序将收到的数据进行回传,
如下图:

例程主要代码:
//
//主函数
//
int main(void)
{
/*初始化系统控制:PLL,WatchDog,使能外设时钟*/
InitSysCtrl();
/*配置Scia_Gpio*/
Scia_Gpio();
/*SCIA初始化*/
SCIA_Init();
/*SCIA自动波特率*/
SCIA_AutobaudLock();
while (1)
{
while (SciaRegs.SCIRXST.bit.RXRDY != 1)
{
}
SciaRegs.SCITXBUF = SciaRegs.SCIRXBUF.bit.RXDT;
}
return 0;
}
//
//SCIA GPIO配置
//
void Scia_Gpio(void)
{
EALLOW;
/*GPIO28上拉*/
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;
/*GPIO29上拉*/
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;
/*将GPIO28引脚配置为:SCIRXDA-SCI-A接收(I)*/
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
/*将GPIO29引脚配置为:SCITXDA-SCI-A传输(O)*/
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
/*异步(非同步或限定)*/
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;
EDIS;
}
//
//SCIA初始化
//
void SCIA_Init(void)
{
EALLOW;
/*使能SC1时钟*/
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;
/*低速时钟 = SYSCLKOUT/4*/
SysCtrlRegs.LOSPCP.all = 0x0002;
/*SCI FIFO可以恢复发送或接收*/
SciaRegs.SCIFFTX.bit.SCIRST = 1;
/*SCICHAR_LENGTH_8*/
SciaRegs.SCICCR.bit.SCICHAR = 0x7;
/*将接收到的字符发送到SCIRXEMU和SCIRXBUF*/
SciaRegs.SCICTL1.bit.RXENA = 1;
/*发送启用*/
SciaRegs.SCICTL1.bit.TXENA = 1;
/*关闭RXRDY/BRKDT 中断*/
SciaRegs.SCICTL2.bit.RXBKINTENA = 0;
/*发射机缓存或移位寄存器或两者都装载数据*/
SciaRegs.SCICTL2.bit.TXEMPTY = 0;
/*禁用TXRDY中断*/
SciaRegs.SCICTL2.bit.TXINTENA = 0;
/*SCITXBUF已满*/
SciaRegs.SCICTL2.bit.TXRDY = 0;
/*将接收到的字符发送到SCIRXEMU和SCIRXBUF*/
SciaRegs.SCICTL1.bit.RXENA = 1;
/*发射机启用*/
SciaRegs.SCICTL1.bit.TXENA = 1;
/*SCI软件复位(低电平有效)*/
SciaRegs.SCICTL1.bit.SWRESET = 1;
EDIS;
}
//
//SCIA自动波特率配置
//
void SCIA_AutobaudLock(void)
{
Uint16 byteData;
SciaRegs.SCILBAUD = 1;
/*使能波特率自动对齐*/
SciaRegs.SCIFFCT.bit.CDC = 1;
/* 清除第15位的ABD标志*/
SciaRegs.SCIFFCT.bit.ABDCLR = 1;
while (SciaRegs.SCIFFCT.bit.ABD != 1)
{
}
/*清除第15位的ABD标志*/
SciaRegs.SCIFFCT.bit.ABDCLR = 1;
/* 禁用波特自动对齐*/
SciaRegs.SCIFFCT.bit.CDC = 0;
while (SciaRegs.SCIRXST.bit.RXRDY != 1)
{
}
byteData = SciaRegs.SCIRXBUF.bit.RXDT;
/*传输数据缓存*/
SciaRegs.SCITXBUF = byteData;
return;
} 关于中科昊芯
“智由芯生 创享未来”,中科昊芯是数字信号处理器专业供应商。作为中国科学院科技成果转化企业,瞄准国际前沿芯片设计技术,依托多年积累的雄厚技术实力及对产业链的理解,以开放积极的心态,基于开源指令集架构RISC-V,打造多个系列数字信号处理器产品,并构建完善的处理器产品生态系统。产品具有广阔的市场前景,可广泛应用于工业控制及电机驱动、数字电源、光伏、储能、新能源汽车、消费电子、白色家电等领域。
