menghubei 发表于 2014-10-6 13:50:58

串口发送数据的时间

用430串口发送数据给舵机,我们一个工作周期20ms,给舵机发送数据11个字节,波特率用9600

那么传送数据时间=11*8/9600=9.17ms

问题是,430的发送时间也是9.17ms么?在线路上的传送时间是9.17ms没错。

现在我理解的是:数据我是用循环中断的方式发送的。430的TXbuff是一个字节的,所以只能一个字节一个字节的发,在发送这11个字节的9.17ms期间,cpu干不了其他工作,只能串口发送数据吗?

如果是pc机串口发送11字节的话,由于电脑缓存大,11个字节准备好后就可以干其他的事了吗?9.17ms其他时间可以做其他工作。

menghubei 发表于 2014-10-7 09:01:50

cmyldd 发表于 2014-10-7 06:55 static/image/common/back.gif
要不要考虑硬件的响应时间呢?

硬件响应时间应该微妙级的

menghubei 发表于 2014-10-7 08:59:53

shaoziyang 发表于 2014-10-6 21:43 static/image/common/back.gif
一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

有的CPU是缓冲区空就能进中 ...

如果是发送完成才进入中断就可以理解了,给txbuf赋值后,usrt马上进行发送,此时cpu可以进行其他工作;
当发送完成后,在中断里继续赋值,退出中断,uart发送数据,cpu执行其他程序。

感觉豁然开朗:lol

cmyldd 发表于 2014-10-7 06:55:39

要不要考虑硬件的响应时间呢?

shaoziyang 发表于 2014-10-6 21:43:25

menghubei 发表于 2014-10-6 19:17 static/image/common/back.gif
比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;



一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

有的CPU是缓冲区空就能进中断,这时一般发送缓冲区是有多字节的。

menghubei 发表于 2014-10-6 19:18:04

shower.xu 发表于 2014-10-6 14:50 static/image/common/back.gif
你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;

#############################
#pragma vector=UART0TX_VECTOR
__interrupt void usart0_tx (void)
{
if(i<9)
   TXBUF0 = string2;
}
#############################

执行下面语句后:
TXBUF0=string2;
就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?

menghubei 发表于 2014-10-6 19:17:17

shaoziyang 发表于 2014-10-6 15:40 static/image/common/back.gif
就是这样。

比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;

#############################
#pragma vector=UART0TX_VECTOR
__interrupt void usart0_tx (void)
{
if(i<9)
   TXBUF0 = string2;
}
#############################

执行下面语句后:
TXBUF0=string2;
就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?


shaoziyang 发表于 2014-10-6 15:40:03

menghubei 发表于 2014-10-6 15:16 static/image/common/back.gif
430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

发送完成后,通过中断 ...

就是这样。

menghubei 发表于 2014-10-6 15:16:03

shower.xu 发表于 2014-10-6 14:50 static/image/common/back.gif
你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

发送完成后,通过中断再发送下一个字节码?

shower.xu 发表于 2014-10-6 14:50:17

你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区。
当你循环发送的时候,你可以打开发送完成中断,来往发送缓冲区填数据。不占用cpu
页: [1]
查看完整版本: 串口发送数据的时间

Baidu
map