最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

基于DSP2812的双缓冲串口程序设计

IT圈 admin 26浏览 0评论

2024年6月12日发(作者:渠阳飙)

…………………………一

竣 廑 _((((_l 

基于DSP2812的双缓冲串口程序设计 

湖南湘潭江南机器集团有限公司 王 刚 林明辉 

【摘要】以DsP2812为例,分析了常用串口程序的缺点,提出了一种工程上实用的串口通讯程序的设计方法。利用DSP2812 ̄JFIFO和队列 

数据结构,对串行数据进行了两级双向缓冲,在中断中完成数据收发,高效可靠的实现了DSPI ̄串行通讯。 

【关键词】DSP2812;串行通讯;FIFO队列 

引言 

TMS320F2812是国内广大的工程技术 

人员非常熟悉一种DSP芯片,它速度快, 

功能强,广泛应用于电机控制,电力电子 

等领域。如何高效可靠的实现DSP与上位Pc 

机或其它从机间的串行通讯,是DSP系统开 

发的一个基本问题。本文将以DSP2812为 

例,针对这一问题展开讨论,并给出一种 

切实可行的解决方案。 

1.常用串口收发程序及其存在的 

问题 

常用的串口发送程序如下所示,以 

DSP2812的SCIA发送一字节数据为例: 

void SCIASendChar(unsigned char 

schar) { //schar为待发送的数据 

SciaRegS.SCITXBUF=SChar: 

//将数据送入发送数据缓冲 

寄存器 

while(SciaRegs.SCICTL2.bit. 

TXRDY==O): //等待发送器缓冲寄存器 

就绪 

while(SciaRegs.SCICTL2.bit. 

TXEMPTY==O): //等待发送器数据为空 

) 

这是一种查询等待标志位的方式。由 

于有while循环存在,CPU要等待一个字节 

的数据发送完成后才能继续进行其它工作, 

这造成了大量指令周期的浪费,会引起数据 

发送有延迟、通讯效率低、占用较多的CPU 

资源、其它模块的执行时间无法得到保证 

等一系列问题。当系统要求的实时性较高 

时,是不允许采取这种方式的。 

常用的串行中断接收程序如下所示, 

以DSP2812的SCIA接收中断为例: 

interrupt void SCIA

RXINT(void) 

{ 

DINT: 

rxdata=SciaRegs.SCIRXBUF.bit. 

RXDT: //读取数据 

PieCtr1.PIEACK.all=(1<<9): 

//响应同组其他中断 

EINT:} 

DSP每收到一个字节的数据都会进入 

中断,当接收的数据量较大时,会占用较 

多的CPU资源,效率低。 

2.FIFO控制寄存器设置和使用队 

列数据结构的说明 

DSP2812含有一个16级深度的发送/接 

收FIFO。使用FIFO可以减少收发数据的延 

迟和对CPU资源的占用,高效的实现串口 

数据收发。 

FIFO是一个缓冲寄存器,通过FIFO 

发送数据时,可以一次性连续写入多个数 

据(最多16个),DSP会自动将这些数据 

发送出去,无需CPU干预,还可以设置发 

送完成后进中断;通过FIFO接收数据时, 

经由设置SCIFFRX寄存器,可以实现接收 

若干个字节的数据后(最多16个)进入中 

断,在中断中处理这些数据,这就减少了 

接受多个数据时,CPU进中断的次数,提 

高了效率。 

使用FIFO时,有两个问题需要明确: 

(1)如何访问FIFO 

写发送FIFO通过SCITXBUF寄存器,读 

接收FIFO通过SCIRXBUF寄存器。 

(2)FIFO中断 

FIFO模式有两个中断,一个用于FIFO 

发送,一个用于FIFO接收。对于FIFO发送 

中断来说,当使 ̄FIFO,且使 ̄TXFIFO中 

断后,标准的TXINT将不再起作用,该中断 

仅作为SCI FIFO发送中断工作;对于串行接 

收中断而言,RXINT中断是SCI FIFO接收、 

接收错误和接收FIFO溢出的共同中断。 

FIFO发送和接收中断都可以设置为匹 

配中断。对FIFO发送来说,SCIFFTX寄存器 

中的位T FST4-o表明当前的发送FIFO中有多 

少个字节的数据,位TXFFIL4—0为用户设定 

的接收FIFO中断匹配级别,当TXFFST4—0的 

值小于或等于TXFFIL4-O的值时,产生发送 

匹配中断;对FIFO接收来说,SCIFFRX寄 

存器中的位RXFIFST4-O表明当前接收FIFO 

中有多少个字节的数据,位RXFFIL4—0为 

用户设定的发送FIF0中断匹配级别,当 

RXFIFST4—0的值大于或等于RXFFIL4—0的 

值时,产生接收匹配中断。 

FIFO寄存器可以设置为: 

/ 使能FIFO,发送FIFO空,禁用 

TXFIFO中断,清除TXFIFO中断标志,使能 

TXFFIVL匹配中断,匹配值为0,即:当 

TXFIFO中数据为0时进入发送中断。 / 

SciaRegs.SCIFFTX.all=Oxe060: 

/ 清RXFFOVF标志,使能FIF0接收, 

接收FIFO空,清除RXFFINT中断标志,使 

 ̄RXFFIVL匹配中断,匹配值为16,即: 

FIFO中的数据大于等于16时进入发送中断 / 

Sc iaRegs.SCIFFRX.al 1=0x6070: 

禁止串口自动检测波特率 / 

SciaRegs.SCIFFCT.all=O: 

程序使用队列数据结构,可以更好的 

将串口程序模块化。同时,利用队列对串 

行数据再做一级缓冲,不仅保证了数据的 

顺序,而且解除了使用FIFO最多一次写入 

16个字节的限制,最多能写入的数据个数 

取决于队列缓冲区的大小,而这是由用户 

定义的。只要发送队列缓冲区中有待发送 

的数据,就采用中断间歇性的进行发送。 

串行接收采用类似方式,接收到一定数量 

的数据后再通知上层程序,CPU不必频繁 

进入中断。 

队列是一种先入先出的线性表,它只 

允许在表的一端写入数据,而在另一端读 

取数据。它的操作一般有以下函数: 

//获取队列中的数据,buf为指向队 

列的指针,rdata为指向读到的数据的指针 

OueueRead(uns igned char*rdata, 

void*buf): 

//向队列中写入数据,buf为指向队 

列的指针,wdata为要写入的数据 

OueueWrite(VOid*buf,unsigned 

char wdata): 

/2011.11,l皂子心再一53— 

I 一避 廑 …………………………. 

//获取队列中元素个数 

QueueNData(VOid*Buf) 

for(i=O:i<temp:i++){ 

QueueRead(pReadByte 

al1: 

//取出FIFO中的数据 

QueueWrite(RxQueue,Rx- 

本文使用了两个队列来对串行数据进 

行缓冲,一个是DSP串行发送数据的队列 

TxQueue): 

Sc i aRegs.SCITXBUF= 

data): 

//存往串行接收数据 

)} 

队 ̄RxQueue 

TxQueue,另一个是DSP串行接收数据的队 

ReadByte:}} 

 ̄URxQueue。各有100级深度。 

else if(temp>16){ //若元 

在上文的FIFO设置中,我们令FIFO中 

的数据大于等于16时进入串行接收中断, 

中断程序只需要取出数据并将之存往串行 

接收队 ̄RxQueue即可。在这里有一个隐 

含的约定,即,串行接收的数据数量必须 

大于等于l6字节,否则由于串行接收匹配 

3.串行发送 

利用队列和FIFO的串口发送程序由 

两部分组成。一部分是供主程序调用的应 

素个数大于l6,则在FIFO中写入16个元素 

for(i=O:i<16:i++){ 

QueueRead(pReadByte, 

用型函数,另一部分为中断程序,它完成 

TxQueue): 

数据的发送。以下是一个应用型函数的例 

SciaRegs.SCITXBUF= 

子,DSP2812串行发送一个字节的数据: 

void SeiaSendChar(unsigned char 

sChar){ //sChar为待发送的 

数据 

QueueWrite(TxQueue,sChar): 

//sChar入队,TxQueue为指向发送 

队列的指针 

if(SCiaRegS.SCIFFTX.bit. 

TXFFIENA==O) //允许TXFIFO匹配中断 

SciaRegs.SCIFFTX.bit.TXF— 

FIENA=I: 

} 

SeiaSendChar(unsigned char sChar) 

函数由主函数调用,它将要发送的数据入 

队。而后使 ̄FIFO发送中断。 

在上文的FIFO设置中,已设置当TXFIFO 

中数据为0时进入发送中断,由于串行通讯 

开始前TXFIFO中并无数据,所以一旦FIFO 

发送中断打开,就立即进入该中断程序。 

串行发送中断程序的一种写法: 

interrupt void SCITXINTA

ISR(void) 

{ //SCI—A中断服务程序 

unsigned char temp:O,i=O: 

//定义局部变量 

//ReadByte为从队列中 

读到的数据,pReadByte为指 ̄ReadByte 

的指针 

unsigned char ReadByte,*pRead 

Byte: pReadByte:&ReadByte: 

SciaRegs.SCIFFTX.bit.TXINT— 

CLR=I: //清中断标志 

PieCtr1.PIEACK.bit.ACK9=1: 

EINT: //允许同组其他中断,允许嵌套 

temp=QueueNData(TxQueue): 

//获取发送队列中元 

素个数 

if((temp>O)&&(temp<=16)){ 

//若元素个数在[O,16]之间,将全部元 

素写入FIFO 

54一电子世再/2011 11, 

ReadByte: ¨ 

中断的执行条件不满足,将导致该中断不 

else //以上两种情况 执行,无法处理FIFO接收的数据。 

都不是,说明发送队列中已无元素,发送 在主函数或其他中断程序(如定时中 

完,关中断 断)中再处理RxQueue中接收到的数据, 

SciaRegs.SCIFFTX.bit. 

这样处理起来非常灵活,实际应用中可根 

TXFFIENA=O: //禁用TXFIFO匹配中断 

据需要编写程序。下面给出在主函数中处 

return:) 

理RxOueue的一个简单例子供参考。 

串行数据的发送是在中断中完成的, 

i f(QueueNData(RxQueue)>50) { 

只要发送队列中还有数据,就会间歇性进 //若RxQueue队列数据超过50个 

入该中断,中断程序会判断当前发送队列 

for(i=0:i<50;i++){ 

还有多少个元素等待发送,若不足16个, 

QueueRead(pReadByte,TxQueue 

则把数据全部写入FIF0,若大于l6个,则 

): //pReadByte=&ReadByte,ReadByte 

写入16个,写入FIFO的数据,DSP会自动 

为从队列中取出的数据 

发送出去,无需CPU的干预。当发送队列 

ReceivedData[i]=ReadByte:} 

中无数据时,则判定为发送完,关闭中 } //存往ReceiveData数组 

断,防止因FIFO空而反复进入该中断。 

总结 

若CPU有其他的关键进程需要响应, 

本文提出了一种工程上实用的DSP串 

则可以把该关键进程的中断优先级设置得 

行通讯的方法。该方法采用DSP的FIF0和 

高于串行发送中断,这样在发送数据时依 数据队列对串行数据进行了两级双向缓冲, 

然可以响应关键进程。 

利用中断完成数据收发,有实时性好,可 

4.串行接收 

靠性高等优点,可以方便的移植到其他芯 

利用FIFO的串行接收程序同样由两部 片上,有一定的通用性。该程序已在作者 

分组成,一部分是串行接收中断,另一部 的一个项目中得到应用,运行稳定。 

分是从串行接收队列中取数的程序。 

串行接收中断的一种实现方法: 

参考文献 

interrupt void SCIRXINTA ISR(void) 

[1]TMS320x281x Serial Communication s 

InterfacefScI)Reference Guide.TI公司,2009,7. 

f //SCI-A,FIF0接收中断服务程序 

[2]严蔚敏,吴伟民编著.数据结构(C语言 tM1. 

unsigned char i=O: 

2002,9. 

//循环变量 

[3]陈明计,等编著.嵌入式实时操作系统Small 

uns igned char Rxdata,: 

RTOS51原理与应用 .2005,7. 

//暂存接收 

到的数据 

作者简介: 

SciaRegS.SCIFFRX.bit.RXF— 

王刚(1981一),男,河北保定人,硕士, 

FINTCLR=I: //清中断标志 

湖南湘潭江南机器集团有限公司工程师。 

PieCtri.PIEACK.bit.ACK9=l: 

林明辉(1981一),男,海南文昌人,大学本 

EINT: //响应同组其他中 

科,湖南湘潭江南机器集团有限公司工程师。 

断,允许嵌套 

for(i=O:i<16:i++){ 

Rxdata=Sc iaRegs.SCIRXBUF。 

2024年6月12日发(作者:渠阳飙)

…………………………一

竣 廑 _((((_l 

基于DSP2812的双缓冲串口程序设计 

湖南湘潭江南机器集团有限公司 王 刚 林明辉 

【摘要】以DsP2812为例,分析了常用串口程序的缺点,提出了一种工程上实用的串口通讯程序的设计方法。利用DSP2812 ̄JFIFO和队列 

数据结构,对串行数据进行了两级双向缓冲,在中断中完成数据收发,高效可靠的实现了DSPI ̄串行通讯。 

【关键词】DSP2812;串行通讯;FIFO队列 

引言 

TMS320F2812是国内广大的工程技术 

人员非常熟悉一种DSP芯片,它速度快, 

功能强,广泛应用于电机控制,电力电子 

等领域。如何高效可靠的实现DSP与上位Pc 

机或其它从机间的串行通讯,是DSP系统开 

发的一个基本问题。本文将以DSP2812为 

例,针对这一问题展开讨论,并给出一种 

切实可行的解决方案。 

1.常用串口收发程序及其存在的 

问题 

常用的串口发送程序如下所示,以 

DSP2812的SCIA发送一字节数据为例: 

void SCIASendChar(unsigned char 

schar) { //schar为待发送的数据 

SciaRegS.SCITXBUF=SChar: 

//将数据送入发送数据缓冲 

寄存器 

while(SciaRegs.SCICTL2.bit. 

TXRDY==O): //等待发送器缓冲寄存器 

就绪 

while(SciaRegs.SCICTL2.bit. 

TXEMPTY==O): //等待发送器数据为空 

) 

这是一种查询等待标志位的方式。由 

于有while循环存在,CPU要等待一个字节 

的数据发送完成后才能继续进行其它工作, 

这造成了大量指令周期的浪费,会引起数据 

发送有延迟、通讯效率低、占用较多的CPU 

资源、其它模块的执行时间无法得到保证 

等一系列问题。当系统要求的实时性较高 

时,是不允许采取这种方式的。 

常用的串行中断接收程序如下所示, 

以DSP2812的SCIA接收中断为例: 

interrupt void SCIA

RXINT(void) 

{ 

DINT: 

rxdata=SciaRegs.SCIRXBUF.bit. 

RXDT: //读取数据 

PieCtr1.PIEACK.all=(1<<9): 

//响应同组其他中断 

EINT:} 

DSP每收到一个字节的数据都会进入 

中断,当接收的数据量较大时,会占用较 

多的CPU资源,效率低。 

2.FIFO控制寄存器设置和使用队 

列数据结构的说明 

DSP2812含有一个16级深度的发送/接 

收FIFO。使用FIFO可以减少收发数据的延 

迟和对CPU资源的占用,高效的实现串口 

数据收发。 

FIFO是一个缓冲寄存器,通过FIFO 

发送数据时,可以一次性连续写入多个数 

据(最多16个),DSP会自动将这些数据 

发送出去,无需CPU干预,还可以设置发 

送完成后进中断;通过FIFO接收数据时, 

经由设置SCIFFRX寄存器,可以实现接收 

若干个字节的数据后(最多16个)进入中 

断,在中断中处理这些数据,这就减少了 

接受多个数据时,CPU进中断的次数,提 

高了效率。 

使用FIFO时,有两个问题需要明确: 

(1)如何访问FIFO 

写发送FIFO通过SCITXBUF寄存器,读 

接收FIFO通过SCIRXBUF寄存器。 

(2)FIFO中断 

FIFO模式有两个中断,一个用于FIFO 

发送,一个用于FIFO接收。对于FIFO发送 

中断来说,当使 ̄FIFO,且使 ̄TXFIFO中 

断后,标准的TXINT将不再起作用,该中断 

仅作为SCI FIFO发送中断工作;对于串行接 

收中断而言,RXINT中断是SCI FIFO接收、 

接收错误和接收FIFO溢出的共同中断。 

FIFO发送和接收中断都可以设置为匹 

配中断。对FIFO发送来说,SCIFFTX寄存器 

中的位T FST4-o表明当前的发送FIFO中有多 

少个字节的数据,位TXFFIL4—0为用户设定 

的接收FIFO中断匹配级别,当TXFFST4—0的 

值小于或等于TXFFIL4-O的值时,产生发送 

匹配中断;对FIFO接收来说,SCIFFRX寄 

存器中的位RXFIFST4-O表明当前接收FIFO 

中有多少个字节的数据,位RXFFIL4—0为 

用户设定的发送FIF0中断匹配级别,当 

RXFIFST4—0的值大于或等于RXFFIL4—0的 

值时,产生接收匹配中断。 

FIFO寄存器可以设置为: 

/ 使能FIFO,发送FIFO空,禁用 

TXFIFO中断,清除TXFIFO中断标志,使能 

TXFFIVL匹配中断,匹配值为0,即:当 

TXFIFO中数据为0时进入发送中断。 / 

SciaRegs.SCIFFTX.all=Oxe060: 

/ 清RXFFOVF标志,使能FIF0接收, 

接收FIFO空,清除RXFFINT中断标志,使 

 ̄RXFFIVL匹配中断,匹配值为16,即: 

FIFO中的数据大于等于16时进入发送中断 / 

Sc iaRegs.SCIFFRX.al 1=0x6070: 

禁止串口自动检测波特率 / 

SciaRegs.SCIFFCT.all=O: 

程序使用队列数据结构,可以更好的 

将串口程序模块化。同时,利用队列对串 

行数据再做一级缓冲,不仅保证了数据的 

顺序,而且解除了使用FIFO最多一次写入 

16个字节的限制,最多能写入的数据个数 

取决于队列缓冲区的大小,而这是由用户 

定义的。只要发送队列缓冲区中有待发送 

的数据,就采用中断间歇性的进行发送。 

串行接收采用类似方式,接收到一定数量 

的数据后再通知上层程序,CPU不必频繁 

进入中断。 

队列是一种先入先出的线性表,它只 

允许在表的一端写入数据,而在另一端读 

取数据。它的操作一般有以下函数: 

//获取队列中的数据,buf为指向队 

列的指针,rdata为指向读到的数据的指针 

OueueRead(uns igned char*rdata, 

void*buf): 

//向队列中写入数据,buf为指向队 

列的指针,wdata为要写入的数据 

OueueWrite(VOid*buf,unsigned 

char wdata): 

/2011.11,l皂子心再一53— 

I 一避 廑 …………………………. 

//获取队列中元素个数 

QueueNData(VOid*Buf) 

for(i=O:i<temp:i++){ 

QueueRead(pReadByte 

al1: 

//取出FIFO中的数据 

QueueWrite(RxQueue,Rx- 

本文使用了两个队列来对串行数据进 

行缓冲,一个是DSP串行发送数据的队列 

TxQueue): 

Sc i aRegs.SCITXBUF= 

data): 

//存往串行接收数据 

)} 

队 ̄RxQueue 

TxQueue,另一个是DSP串行接收数据的队 

ReadByte:}} 

 ̄URxQueue。各有100级深度。 

else if(temp>16){ //若元 

在上文的FIFO设置中,我们令FIFO中 

的数据大于等于16时进入串行接收中断, 

中断程序只需要取出数据并将之存往串行 

接收队 ̄RxQueue即可。在这里有一个隐 

含的约定,即,串行接收的数据数量必须 

大于等于l6字节,否则由于串行接收匹配 

3.串行发送 

利用队列和FIFO的串口发送程序由 

两部分组成。一部分是供主程序调用的应 

素个数大于l6,则在FIFO中写入16个元素 

for(i=O:i<16:i++){ 

QueueRead(pReadByte, 

用型函数,另一部分为中断程序,它完成 

TxQueue): 

数据的发送。以下是一个应用型函数的例 

SciaRegs.SCITXBUF= 

子,DSP2812串行发送一个字节的数据: 

void SeiaSendChar(unsigned char 

sChar){ //sChar为待发送的 

数据 

QueueWrite(TxQueue,sChar): 

//sChar入队,TxQueue为指向发送 

队列的指针 

if(SCiaRegS.SCIFFTX.bit. 

TXFFIENA==O) //允许TXFIFO匹配中断 

SciaRegs.SCIFFTX.bit.TXF— 

FIENA=I: 

} 

SeiaSendChar(unsigned char sChar) 

函数由主函数调用,它将要发送的数据入 

队。而后使 ̄FIFO发送中断。 

在上文的FIFO设置中,已设置当TXFIFO 

中数据为0时进入发送中断,由于串行通讯 

开始前TXFIFO中并无数据,所以一旦FIFO 

发送中断打开,就立即进入该中断程序。 

串行发送中断程序的一种写法: 

interrupt void SCITXINTA

ISR(void) 

{ //SCI—A中断服务程序 

unsigned char temp:O,i=O: 

//定义局部变量 

//ReadByte为从队列中 

读到的数据,pReadByte为指 ̄ReadByte 

的指针 

unsigned char ReadByte,*pRead 

Byte: pReadByte:&ReadByte: 

SciaRegs.SCIFFTX.bit.TXINT— 

CLR=I: //清中断标志 

PieCtr1.PIEACK.bit.ACK9=1: 

EINT: //允许同组其他中断,允许嵌套 

temp=QueueNData(TxQueue): 

//获取发送队列中元 

素个数 

if((temp>O)&&(temp<=16)){ 

//若元素个数在[O,16]之间,将全部元 

素写入FIFO 

54一电子世再/2011 11, 

ReadByte: ¨ 

中断的执行条件不满足,将导致该中断不 

else //以上两种情况 执行,无法处理FIFO接收的数据。 

都不是,说明发送队列中已无元素,发送 在主函数或其他中断程序(如定时中 

完,关中断 断)中再处理RxQueue中接收到的数据, 

SciaRegs.SCIFFTX.bit. 

这样处理起来非常灵活,实际应用中可根 

TXFFIENA=O: //禁用TXFIFO匹配中断 

据需要编写程序。下面给出在主函数中处 

return:) 

理RxOueue的一个简单例子供参考。 

串行数据的发送是在中断中完成的, 

i f(QueueNData(RxQueue)>50) { 

只要发送队列中还有数据,就会间歇性进 //若RxQueue队列数据超过50个 

入该中断,中断程序会判断当前发送队列 

for(i=0:i<50;i++){ 

还有多少个元素等待发送,若不足16个, 

QueueRead(pReadByte,TxQueue 

则把数据全部写入FIF0,若大于l6个,则 

): //pReadByte=&ReadByte,ReadByte 

写入16个,写入FIFO的数据,DSP会自动 

为从队列中取出的数据 

发送出去,无需CPU的干预。当发送队列 

ReceivedData[i]=ReadByte:} 

中无数据时,则判定为发送完,关闭中 } //存往ReceiveData数组 

断,防止因FIFO空而反复进入该中断。 

总结 

若CPU有其他的关键进程需要响应, 

本文提出了一种工程上实用的DSP串 

则可以把该关键进程的中断优先级设置得 

行通讯的方法。该方法采用DSP的FIF0和 

高于串行发送中断,这样在发送数据时依 数据队列对串行数据进行了两级双向缓冲, 

然可以响应关键进程。 

利用中断完成数据收发,有实时性好,可 

4.串行接收 

靠性高等优点,可以方便的移植到其他芯 

利用FIFO的串行接收程序同样由两部 片上,有一定的通用性。该程序已在作者 

分组成,一部分是串行接收中断,另一部 的一个项目中得到应用,运行稳定。 

分是从串行接收队列中取数的程序。 

串行接收中断的一种实现方法: 

参考文献 

interrupt void SCIRXINTA ISR(void) 

[1]TMS320x281x Serial Communication s 

InterfacefScI)Reference Guide.TI公司,2009,7. 

f //SCI-A,FIF0接收中断服务程序 

[2]严蔚敏,吴伟民编著.数据结构(C语言 tM1. 

unsigned char i=O: 

2002,9. 

//循环变量 

[3]陈明计,等编著.嵌入式实时操作系统Small 

uns igned char Rxdata,: 

RTOS51原理与应用 .2005,7. 

//暂存接收 

到的数据 

作者简介: 

SciaRegS.SCIFFRX.bit.RXF— 

王刚(1981一),男,河北保定人,硕士, 

FINTCLR=I: //清中断标志 

湖南湘潭江南机器集团有限公司工程师。 

PieCtri.PIEACK.bit.ACK9=l: 

林明辉(1981一),男,海南文昌人,大学本 

EINT: //响应同组其他中 

科,湖南湘潭江南机器集团有限公司工程师。 

断,允许嵌套 

for(i=O:i<16:i++){ 

Rxdata=Sc iaRegs.SCIRXBUF。 

发布评论

评论列表 (0)

  1. 暂无评论