NEC Electronics (China) NEC ELECTRONICS (CHINA)
日电电子 NEC
主  页
应  用
产  品
技  术
支  持
购  买
最  新  消  息
关  于  我  们
header
产品名称搜寻
关键字搜寻
文档搜寻
参数搜寻
    网页指南  联系我们  

FAQ



 串行通讯
内容   
FAQ-ID = 78serial-nnnn
0001: 异步通讯的基本操作 (对几乎所有的设备通用)
0002: 3线串行通讯的基本操作 (对几乎所有的设备通用)
0003: 用一个UART时,数据位顺序有时是反向的。[78K0/S]
0004: 由串行通道交替功能端口的设置引起的故障。
0005: 从模式/主模式
0006: 在最初的设置时不需要的数据被发送
0007: 用于禁止发送不需要的数据的初始设置方法
0008: 我怎么使用串行时钟的计时器寄存器?
0009: 错误出现时的设置影响INTSER0吗?
0010: 在等待来自波特率的时间计算之后,我能否写下一个要发送的数据?
0011: 当使用2线串行接口的SIO31时的设置
0012: 当使用内部串行时钟的时候,ASCK2能被用作IO端口吗?
0013: PM1模式设置
0014: 当使用外部时钟的时候,间隔时间是什么?
0015: 如何消除从发送数据写入到发送开始这段时间的变化?
0016: 波特率的字面数值和实际波特率之间的不同是不是一个问题?
0017: 波特率允许误差 [78K/0,78K/4]
0018: 检查到其他通讯伙伴处在接收待机状态下之后,是否应该执行发送操作?
0019: 当切换操作模式的时候,必须停止串行发送/接收吗?
0020: 直到数据从SIO3读出通讯才开始吗?
0021: 当UART输入引脚保持低电平时,接收结束中断连续被输出
0022: 传输速度可以设置为600bps吗?
0023: 在同步的通讯期间,由于一个时钟不规则而产生位偏移时,该如何解决?
0024: SCK1引脚(P22)的初始输出值是高电平还是低电平?
0025: 当时钟是12.5MHz的时候,我如何将波特率设置到4800bps?[78K/4]
0026: 当选择T01时的波特率的计算 [78K/4]
0027: 在发送过程中,当发送被禁止时的恢复处理
0028: 与串行通讯设置相关的注意事项
0029: 波特率错误
0030: 在3线串行通讯期间,我如何在时钟的下降沿输出数据?
0031: 当使用UART时,300bps的支持 [所有 78K0]
0032: 数据长度和奇偶校验之间的关系
0033: 串行通讯期间不能接收正常数据
0034: 3线串行时钟可以从低电平启动吗?
0035: 当使用串行功能时的设置(78K/0和78K/4的不同)
0036: 当不使用外部时钟的时候,我能使用ASCK引脚作为端口吗?[78K/4]

78serial
-0001
异步通讯的基本操作 (对几乎所有的设备通用)
1 我使用UART在uPD70433和uPD780023 之间执行串行通讯。
请描述在每个CPU的UART接收期间的起始位和字符位的检测方法、时序,等方面的内容。
1 UART在如下所示的1/2位位置检测一个起始位。
通过在起始位的1/2位位置处移位采样位置,使数据的采样位置在数据位的中心位置。

[mi-sp001](2Kbytes)

接收数据已经变为低电平的情况被检测到 (对于uPD70433,通过系统时钟采样执行检测,对于uPD780023, 通过输入到波特率发生器的5位计数器的时钟进行采样来执行检测), 波特率发生器计数器开始操作。

检测到低电平之后,UART等待相当于1/2位长度的时期,再一次采样电平。
如果一个低电平被检测到,就被判定为起始位, 然后以相应于1位的时间间隔采样(在中心位)接收信号,这个时间间隔由波特率指定。
如果一个低电平没有被再一次检测到, 那么最初的低电平被判定为噪声,且UART继续进行起始位的检测。
通过在数据位的中心检测接收信号 (实际上,由于采样时钟的影响,实际的采样并不是准确的位于数据位的中心), 因此要尽量避免通讯线路中的波形失真所造成的不良影响。
78serial
-0002
3线串行通讯的基本操作 (对几乎所有的设备通用)
问1 能描述3线串行通讯的基本操作吗?
1 3线串行通讯是使用传送数据 (SO),接收数据 (SI),传送时钟 (SCK)的一种通讯方法。
在这种通讯方法中,控制通讯的设备称作主机,并且主机通过输出SCK控制通讯。
在另一边上的设备称为从设备。
从设备从主机接收SCK,发送/接收数据。
因为传送和接收是同时执行的,可以实现有效通讯。

操作概述:
当不执行通讯时,SCK变为高电平。
当主机开始通讯时,使SCK变为低电平。在SCK 的下降沿,主机和从机从它们的S0引脚输出数据。
因为输出的数据被连接到SI引脚,当主机使SCK变为高电平时,数据被加载。
一个字节的数据的传送可以通过重复这样的操作8次实现。
因为这种方式下时钟被用作数据传输,因此对于UART不需要一个开始位和停止位。
而且,因为数据总是在SCK的控制下被装载,因此, 在发送方和接收方之间由于不同的传送速率引起的失败从不会发生。

用这种方式,传送操作在SCK的下降沿开始,因此在SCK为高电平时, 必须处理传送的结果和完成下一个数据传送的准备。

这是基本操作。
然而,在一些新的设备中,改变SCK逻辑的功能已经被加入。
使用这个功能,当不执行通讯时的电平也能像发送/接收时的边沿一样可以被改变。
串行操作也可以从外部被禁止。

使用警告:
使用3线串行通讯,在主机输出SCK之前(变为低电平),从设备必须完成了发送/接收的准备 (当从设备要传送数据时,完成传送数据的写入,或在接收的情况下,完成对先前数据的读) 。

根据情况,增加握手信号,通过一个中断或轮询允许从机一边的状态检测。
78serial
-0003
用一个UART时,数据位顺序有时是反向的。[78K0/S]
问1 在UART接收期间,LSB-first被设置,但是收到的数据有时变成MSB-first。
1 这是下列78K0/S 产品的限制。

[目标产品]
uPD789405A/9406A
uPD789415A/9416A
uPDF9418A

[现象]
在UART接收期间,在LSB-first读期间,在一些条件下,读到接收的数据是MSB-first。

[对策]
(1) 当RXE为1时读接收数据。
(2) 当RXE从1变到0并且先前接收数据已经被使用时,在接受中断发生之后读接收数据, 然后把RXE的值从1变为0。
(3) 在读接收数据之前,从1到0改变RXE的值时, 从接收中断等待一个或者多个由BRGC确定的源时钟周期之后,将RXE的值由1变为0, 然后再读取接收数据。
例子:
设置 BRGC00 为 #00H
这种情况下,因为由BRGC00选择的源时钟是fx/2, 如果 fx = 5 MHz, 需要等待0.4μs 。
(4) 如果RXE在没有等待1个或者多个来自BRGC的源时钟周期就将其值改1为0的话, 要用RXE = 0和DIR = 1来读取接收数据。
例子:
SET1 DIR ; 设置DIR标志选择LSB-first
CLR1 RXE
MOV A,RXB ; 读接收数据
(2001/11)
78serial
-0004
由串行通道交替功能端口的设置引起的故障。
问1
[这些内容对78K/0系列,78K/0S 系列,78421X 子序列通用。]
当在这些微控制器中使用串行通讯时,需要进行端口设置。
串行通道和I/O 端口作为交替功能是共享的。
当执行串行通讯时,端口模式和输出锁存数据必须被设置。
特别是对于也作为输出信号的信号,必须设置端口为输出模式,设置决定输出锁存的数据 (取决于设备和信号)。
如果没有完成这些设置,尽管数据没有被发送,也会发生发送结束中断。
情况 1 :
在uPD784216A中,串行频道 0 和 1 设置成3线串行I/O 操作方式,但是串行时钟并没有正确地输出。
1 请检查在输出端口P22或P27锁存器(SCK 的交替功能)中的数据是否为0。
它必须是0。
端口输出锁存器和交替功能信号(这里是时钟)被输入到一个或门,并且或门的输出信号输出到引脚。
因此,当输出锁存器是1时,引脚固定为高电平。所以设置P2输出锁存器为0。
问2 情况 2 :
在78K/4中,我使用3线串行通讯,但是,数据不能正确的输出。
答2 在P21的设置有一个问题(串行数据输出的交替功能)。
串行输出和 P21输出锁存器的输出被输入到一个与门, 并且与门的结果输出到输出引脚。因此,P21必须设置为1。
因为P21的初始值为0,引脚保持低电平输出。

设置P21为1。

问3 情况 3 :
在uPD780034A中,UART可以接收,但是不能执行发送。
3 这可能是因为UART的TxD信号的交替功能的设置问题引起的。
请按如下方式设置P23和P24。
P23: 输入模式 (PM23 = 1, P23 = 0)
P24: 设置输出模式和设置输出锁存器为0(PM24 = 0, P24 = 0)
4 情况 4 :
在uPD78F0034A中,我使用3线串行I/O,但是串行时钟和数据不进行操作。
答4 请检查输出锁存器(SCK30和SO30的交替功能)是否为0。
它必须是0。
如果输出锁存器是1,没有信号向外部输出,但是操作本身会结束,并设置中断请求标志。
5 情况 5 :
在uPD789022中,用UART进行接收,但是数据不能通过接收缓冲寄存器(RXB00)获得。
5 PM20设置为1,但是PM22(RxD 引脚)也许没有被设置为1(输入)?
当PM22的值为0时,这个引脚改变为输出并且不能接收正常数据。
请检查这点。
78serial
-0005
从模式/主模式
问1 在uPD780078中,从模式/主模式是如何切换的?
从模式的设置是通过设置串行操作模式寄存器的第5位为1,而主模式是通过设置这个位为0吗?
1 不正确。
当外部时钟通过设置CSIC1寄存器的CKS12位为0时,从模式就被选定了。
其他所有的情况,主模式被选定。
详细信息请参照uPD780078用户手册。

输出传送时钟的设备(提供内部时钟源的设备),换句话说,控制通讯的设备就是主设备, 而从外部输入时钟的设备就是从设备。
2 当从模式被选定,SSE1 = 0 (不使用)被设置时,可以进行正常的接收操作吗?
一个传送操作能否通过写STOB1来启动?
2 当 SSE1 = 0 时,执行正常的3线操作。
甚至在正常的从操作期间,发送也不能简单的通过向STOB1写数据启动。
在这个案例中,在向STOB1写完数据之后,只有当来自主设备的时钟被输入时,才启动发送。
78serial
-0006
在最初的设置时不需要的数据被发送
1 如果我使用串行接口通道2作为UART,但复位后输出的第一个数值是0xFFH。
1 这是一个关于初始化过程的问题。
TxD信号与端口71是共享的。在复位后,它作为输入端口工作。
如果PM71设置为输出,输出锁存器的内容将被输出。
复位后,输出锁存器变为0,因此当端口设置为输出模式时, 一个低电平(与起始位具有相同的电平)被输出。

此状态将保持到输出锁存器被设置为1。
如果这个周期比由波特率决定的1/2位周期更长,这个状态被认为是开始位,就是你的问题中描述的现象。
初始化过程应该按照这个顺序进行:设置P71输出锁存器为1,然后将PM71设置为输出端口。
78serial
-0007
用于禁止发送不需要的数据的初始设置方法
1 下面是使用uPD784218异步串行通讯发送数据时的一段描述。
警告 :
在UART发送数据的情况下,如果是第一次执行发送,请按照下面的过程操作。
(1) 将端口设置为输入状态 (PM21 = 1,或PM71 = 1),写0入端口锁存器。
(2) 设置异步串行接口模式寄存器n(ASIMn)的第七位(TXEn)为1,使能UART发送(从TXDn端口输出一个高电平)。
(3) 将端口设置为输出方式 (PM21 = 0,或PM71 = 0)。
(4) 写发送数据到TXSn,开始发送。
如果端口首先被设置为输出方式,0将从由引脚输出,这可能会引起故障。
不管怎样,最后的描述
"如果端口首先被设置为输出方式,0将从引脚输出,这可能会引起故障"
似乎和步骤3、4矛盾。
1 这个过程并没有问题。
是你误解了状态(2)情况下的变化。
详细的操作如下。
在第(1)步,UART不操作,所以输出是0,引脚作为一个端口工作。
因此在引脚设置为输入的模式下,输出锁存器设置为0。

在第(2)步,因为UART输出被使能,UART的输出是1。
因为在步骤(1)时输出锁存器为0,因此得到的值是端口输出锁存器和UART输出为1的相或的值。 (参见用户的手册中的图5-4和图5-12。)
换句话说,通过设置UART发送使能,UART的输出变为停止位的极性 (标志状态:1)。

通过在(3)中将端口设置为输出方式,步骤(2)中或运算的结果(为1)被输出到端口。
换句话说,引脚状态从高阻态变为输出为1的状态。
然后通过将发送数据写到TXSn,UART发送的数据从端口输出。
78serial
-0008
我怎么使用串行时钟的计时器寄存器?
1 关于uPD78054系列产品的串行接口控制寄存器0的时钟选择的方法,我应该对8位定时器2执行什么样的设置? 甚至当我将CSIM0设置为9AH时,时钟也不能从SCK0产生。
1 不能通过简单的设置CSIM0来实现时钟从SCK0输出。
下面这些初始化的设置是必须的:
- 为了从SCK0输出一个时钟,除设置CSIM0之外,将PM27设置为0(输出),并将P27设置为1。
- 对于CSIM0的设置,SB1和SCK0引脚必须接上拉电阻。

当发送的数据被写到SIO0,或者在接收的情况下,0FFH在这个状态下被写到SIO0时, 通讯应该开始,且SCK0也应该被输出。
78serial
-0009
错误出现时的设置影响INTSER0吗?
1 在uPD780022中,当UART0的ISRM0被设置为1,以使错误发生时的接收中断不被响应, 那么INTSER0中断还会发生吗?
1 是的,有可能。
ISRM0是一个简单的功能,用来控制错误发生时接收结束中断的产生。
它对INTSER0没有影响。
78serial
-0010
在等待来自波特率的时间计算之后,我能否写下一个要发送的数据?
1 如果我等待相应的时间(每位的时钟脉冲宽度 x 8比特), 是否可以认为是发送的结束?下一个数据是否可以写入?
1 不是的。
应该在等发送结束标志之后写下一个数据。
因为CPU开始操作和SIO 操作是异步的,即使数据被写入SIO,发送也不可能立即开始。
为使传输同步,发送应该在经过了大约1.5个串行时钟的时间之后开始(最坏情况)(这种情况下使用一个内部时钟)。
78serial
-0011
当使用2线串行接口的SIO31时的设置
1 在uPD780024中,我想在2线串行通讯模式下使用SIO31作为只发送不接收的方式工作, 并设置SI31引脚为输出端口。
是否在SIO31发送模式中简单地将PM34设置为0就可以了?
1 是的。
因为没有针对SIO31的只发送模式,那么通过简单地设置SIO31为发送/接收模式, 并将PM34设置为0(将端口34设置为输出模式),而使SI31引脚用作输出端口。
因为SIO31在传送期间接收的是无意义的数据,所以完全可以忽略接收到的数据。
78serial
-0012
当使用内部串行时钟的时候,ASCK2能被用作IO端口吗?
1 在uPD784218中,当使用内部时钟,使用SIO2用于UART时,第39脚(ASCK2)可以作为一个IO端口使用吗?
1 是的。
当串行时钟使用内部时钟时,ASCK2 (引脚39)可以作为一个端口使用。
78serial
-0013
PM1模式设置
1 在uPD784935中,当PMC1设置为00011000b并且RXD2设置为输入模式, TXD2设置为输出模式,P13和P14是否像PM1那样必须设置为输入?
1 不,没有必要这样。
在用户的手册中的图6-10和图6-11有相关的描述, 当PMC13和PMC14在PMC设置中被设置为1时,P13就变为输入,并且TxD2从P14变为输出。
78serial
-0014
当使用外部时钟的时候,间隔时间是什么?
1 当使用用外部时钟的uPD780232的SIO1的自动发送/接收功能时,间隔时间2/fsck是否等同于内部时钟?
1 是的,2/fsck等同于使用内部时钟时的状况。
78serial
-0015
如何消除从发送数据写入到发送开始这段时间的变化?
1 uPD78083的UART中,从数据写入发送移位寄存器TXS到数据发送真正开始, 一直存在一个从0到几百μs不等的间隔时间。
我怎么才能消除这种变化的状况?
1 这个变量的产生是由于UART的波特率时钟和CPU时钟的不同步而引起的。
为了避免这这种情况,必须使波特率时钟和CPU操作同步。
一个可以减少这个变量的方法是,当不进行发送的时候将ASIM的TXE设置为0, 在开始发送之前设置TXE为1。
请注意,这个操作也不能保证完全解决问题。
78serial
-0016
波特率的字面数值和实际波特率之间的不同是不是一个问题?
1 因为波特率由内部时钟的分频决定,实际的波特率和标准波特率的值稍微不同。
举个例子,当输入一个16MHz 或32MHz 时钟时,会有0.16% 的不同。
(标准值:9600bps;实际值:9615bps)
实际的和标准的波特率之间的不同级别会有什么问题吗?
1 在正常情况下,这样的变化应该不成问题的。
对一般的UART,,边距大约是位长度的45%。
当它由总的位长度划分的时候,这个数字会稍小于4%, 因为发送方和接收方抵消了一半的数值,它是一个小于2%的数值。所以 0.16%绝对不成什么问题。
78serial
-0017
波特率允许误差 [78K/0,78K/4]
1 在异步的串行通讯期间,从其他通讯伙伴送入的信号的波特率偏差是怎样的?
1 下述答案包括了78K/0和78K/4的UART0。
当允许误差取决于数据配置 (数据长度,有奇偶校验,或没有奇偶验) 和波特比率发生器的设置时,一个近似从4.5%(8 位 + 校验位, k = 0)到5.9%(7 位, 无校验位, k = 14)的相对误差应该不产生问题。

具体的允许误差表示为
± ( (16 + k) - 1.5) / ( 2 (16 + k) x n )

k: 0 to 14, 用BRGC设置
n: 数据长度 + 校验位 + 1

这个值在发送方和接收方之间有相对的差异。
如果一个波特率误差来源于微控制器的操作时钟,那么这个值对应于那个波特率误差。
(2002/05)
78serial
-0018
检查到其他通讯伙伴处在接收待机状态下之后,是否应该执行发送操作?
1 我想使用uPD784031的SO0, SCK0以及SI0(3线)执行主从CPU之间的通讯。
接收方必须知道数据是从主机传送出来吗?
1 是的,必须。
即使从主机接收到时钟, 如果从机没有处于传送允许状态,操作将不被执行。
对于通用传送的执行, 在主机开始传送之前,必须首先检测从机处于传送允许状态。
2 为此目的才采用握手信号吗?
2 是这样的。
通过使用握手信号线启动实际传送,之后确认从机处于传送允许状态。
78serial
-0019
当切换操作模式的时候,必须停止串行发送/接收吗?
问1 这里描述关于异步串行接口的模式寄存器,说明如下:
"在停止串行发送/接收操作之后执行操作模式切换。"
是否可能首先只执行接收(RXEn = 1),保持这样的接收状态(RXEn = 1),然后通过设置TXEn = 1切换发送/接收?
1 如果串行发送/接收操作一次都没有停止过,这个操作也不能保证。
78serial
-0020
直到数据从SIO3读出通讯才开始吗?
1 在uPD784935中,当使用SIO3执行接收时,如果数据不是首先从SIO3读出的,是否可以启动通讯?
1 不可能。
启动接收是按照手册中描述的条件执行的(这个案例中,就是从SIO读取数据)。
即使SCK在此之前输入,也被忽略。因此必须在接收到主机传送过来的SCK和设置接收使能之前, 读SIO(空读)。
(即使接收使能状态设置好了,如果没有从主机一方接收到SCK,不会执行实际的接收,所以不会有什么问题。)

当数据实际上被接收,读取接收到的数据是启动下一个接收的条件之一。
78serial
-0021
当UART输入引脚保持低电平时,接收结束中断连续被输出
问1 在UART通讯已经开始的状态,如果UART输入引脚保持低电平,系统会认为8位数据的接收已经被完成, 且持续输出接收完成中断。
答1 因为UART需要一个停止位(高电平),保持低电平可以说是一个异常的状态。
通常,UART检测起始位(低电平),并将接收到的起始位解释为数据已经被发送,并开始接收。

因此,当保持一个低电平时,持续的接收数据是一个异常的状态。
因为,在这种异常的状态下,停止位没有被检测到,一个侦错误发生。
通过检测这种状态可以侦测到通讯的异常。
78serial
-0022
传输速度可以设置为600bps吗?
1 在uPD789076中,当使用4.9152MHz的陶瓷振荡器时,能够产生600bps的波特率吗?
1 不可能。
在4.9152MHz的时钟下,当使用内部的波特率发生器时,只支持1200bps或者更高的波特率。
为了支持600bps,必须在CPU中使用更低频率的时钟,或者提供一个外部串行时钟。
2 通过设置定时器输出到ASCK20端口,是否可能实现600bps的波特率?
2 是的。
使用8位定时器作为时间间隔定时器,并且使用fx/28作为时钟,0作为比较值,有可能获得理想的频率.
78serial
-0023
在同步的通讯期间,由于一个时钟不规则而产生位偏移时,该如何解决?
1 在uPD789101A中,SIO作为时钟SCI通讯的从操作。
当串行时钟由于异常而产生波动时,就失去了数据的同步。

将串行操作模式寄存器(CSIM20)的CSIE20设置为0使SCI操作停止, 然后再次将它设置为1,作为在串行通讯空闲期间用第一个时钟到来时的起始位启动发送/接收的方法,可以吗?
1 你的做法是正确的。
当位偏移发生时,停止串行通讯操作,然后重新启动它。
这将初始化位计数器并从起始位引发数据的发送/接收。
因为发送缓冲器的内容并没有被清除,而只是被新的数据替换,不会有问题。
78serial
-0024
SCK1引脚(P22)的初始输出值是高电平还是低电平?
1 在uPD780058中,在使用CSIM1寄存器将操作模式设置为3线串行IO模式之后, SCK1引脚(P22)立即输出的初始值是高电平还是低电平?
1 这取决于设置到P22输出锁存器的值。
当使用P22作为SCK输出时,P22输出锁存器必须预先被设置为1。
这样,在设置模式时可以输出一个高电平。
78serial
-0025
当时钟是12.5MHz的时候,我如何将波特率设置到4800bps?[78K/4]
1 当时钟是12.5MHz时,我应该执行什么设置使波特率成为4800bps?
1 应该执行的设置如下。

  1. PRM1 = 02H
  2. TMC1 = 82H
  3. CR10 = 08H
  4. BRGCn= 72H
  1. 将定时器1的操作时钟设置为fxx/4。
  2. 在间隔定时器模式下操作定时器1。
  3. 当将比较值设置为8,可以获得来自定时器1的18 ((8 + 1) x 2)分频,也就是173,611Hz的频率。
  4. 用波特率发生器将频率36分频(用5位计数器进行18分频,然后进一步二分频。)
通过上面的操作,得到4822.5Hz的频率。
这是最接近4800bps的值。
78serial
-0026
当选择T01时的波特率的计算 [78K/4]
问1
在uPD784216A的用户手册的p.312 (文档号
U13570EJ2V0UM00 (第二版本))中,在右边显示出的方程式
[波特率] = fx
2 (m+1) x ( k + 16 )
是关于"使用主系统时钟产生用于波特率的发送/接收时钟"。
当TO1选择作为5位计数器的源时钟时,方程式是什么?
1
在上面的公式中,使用m = 0,
用TO1的输出频率替代fx的输入。
参照右方的方程式。
这里,f(TO1) 是TO1的输出频率,周期是
2 x (设置到CR10的值 + 1)。
(用CR10值+1作为高电平或者低电平的宽度)
[波特率] = f(TO1)
2 x ( k + 16 )
78serial
-0027
在发送过程中,当发送被禁止时的恢复处理
1 这个问题是关于在uPD789074的UART方式下的禁止发送和恢复发送的。
用户手册中的描述如下:
(A) "确保设置发送移位寄存器20 (TXS20)为FFH,然后在执行下一发送之前将TXE20设置为1。" (在警告(3) 关于UART模式中) (B) "在发送操作期间不要重写异步串口接口模式寄存器20(ASIM20)。 如果在发送期间重写ASIM20寄存器,随后的发送可能不被执行。" (在(c)发送中的警告)

是否可以解释为:如果在(A)中的设置被执行,那么在(B)中描述的状态不会发生?
1 不,那不正确。
手册中(A)中描述的重启过程只是在发送操作通过清除TXE00被停止之后的一个简单的重启。
(B)中,包含了所有其它类型的重写操作, 这一段里指出了在某些情况下将不可能进行的发送操作。
这不代表满足(B)中描述的所有状态都可以通过使用(A)中描述的过程得到恢复。
在发送期间,千万小心不要改变任何发送条件。
78serial
-0028
与串行通讯设置相关的注意事项
1 对于uPD78F9116,关于改变串行通讯速度有什么注意事项吗?
1 当改变通讯条件时,请确保在数据通讯结束以后执行。
在发送/接收期间操作通讯条件 (波特率或模式寄存器(ASIM20),等等,),随后的传送可能不被执行。

(参考(4)波特率发生器控制寄存器20 (BRGC20)中的注意事项1和用户手册中的(c)发送中的注意事项。)
78serial
-0029
波特率错误
问1 关于uPD78064,用户手册中列出的数值, 假定列出的错误对于接收波特率是最佳数值,即使在错误数值大于所列数值的情况也可以进行通讯,这样认为是正确的吗?
答1 是的,正确。
78serial
-0030
在3线串行通讯期间,我如何在时钟的下降沿输出数据?
问1 在uPD780058中, 在使用串行通讯通道1、3线通讯进行发送/接收期间, 我想在时钟的下降沿输出数据。 寄存器如何设置?
答1 不必设置寄存器。
对于uPD780058的3线串行数据的输出固定是在时钟(SCK1)的下降沿。
因此,如果执行通用操作设置,数据将在时钟的下降沿被输出。

参见用户手册中的18.3.2 3线串行I/O模式操作和图18-6 3线串行I/O模式时序。
78serial
-0031
串行读时序
问1 对于uPD784046, 我想知道UART串行通讯期间的数据装载时序,可以得到详细数据信息吗? 具体的说,在UART通讯期间,接收数据的每一位被装载到移位寄存器的时序是什么?
答1 请考虑下列信息。
用被波特率发生器的分频器分频的fprs检测起始位, 在那时的检测误差是fprs的最大值。

为检测到起始位, 起始位的检测必须被再一次被执行,检测时钟是fprs被5位计数器分频之后的时钟, 分频数据由波特率发生器寄存器的位MDL3到0指定(16 to 30)。

这里,检测到起始位之后, 数据采样以BRGC寄存器指定的波特率的时间间隔被重复进行。
因此,数据采样以5位计数器的输入时钟(fprs)的误差,以BRGC寄存器指定的时间间隔从数据中心被执行。
问2 下列起始位检测,数据以波特率时间间隔被采样, 但这个时间是波特率设置时间乘2吗?BR> 波特率时间间隔约为每一位输出时间的一半。
答2 不是的,这种解释是错误的。
下面从波特率计算方法的角度来解释。

波特率 = fclk / ( (K + 16) x 2 (n+2) )

作为波特率计算方法,在用户手册的14.4.3 波特率发生器操作一节中被描述。

倒数是波特率时间间隔。
在这个等式的分母中对应于(K + 16)的部分是被5位计数器分频的部分。
在等式中的 2 (n + 2) 部分中2 (n + 1) 是被分频器(图4-5中的分频器)分频的部分, 分频数由BRGC寄存器指定。
余数2 1相当于图4-15中与5位计数器相匹配之后的1/2(分频)

换句话说,上述等式表明最后的波特率考虑了所有的条件。
"波特率设置时间"在这里并没有体现,它是不需要的。
用上述等式可以粗略的计算波特率。
78serial
-0032
数据长度和奇偶校验之间的关系
1 在uPD784031的异步通讯模式中,在通讯字符配置中,数据长度为8时, 可以进行"没有奇偶校验"这个设置之外的设置吗?
1 可以的。
因为数据长度和奇偶校验规范是完全独立的,奇偶校验位能够独立于数据长度而被设置。
78serial
-0033
串行通讯期间不能接收正常数据
1 在uPD789022中,我想使用UART通讯功能接收数据, 但是使用接收缓冲寄存器(RXB00)时无法获得数据。
(RXB00获得的数据:所有的数据是00h。)
您能指出一个可能的原因吗?
(内部的时钟作为时钟使用。)
下列设置被用作在UART通讯下的接收设置
1.CSIM00 = 00h
2.BRGC00 = 10h
3.ASIM00 = FCh
4.PM20 = 1
1 PM20设置为1,但是PM22(RxD引脚)可能没有被设置为1(输入)?
当PM22是0时,引脚变为输出,正常的数据无法被接收。
请检查这点。
78serial
-0034
3线串行时钟可以从低电平启动吗?
1 在uPD784038中, 对于3线串行I/O模式时钟,我想在接收SCK0数据逻辑电平之前, 从一个低电平启动它,这是否可行?
数据接收同样以一个低电平结束(因为其他通讯伙伴的时钟沿是相反的)。
1 这是不可能的。
当从低电平启动时,数据时序会发生异常。
因为其他通讯伙伴的时序是未知的,不可能判断结果,因此,也就不能期望有正常的通讯。
2 有时钟占空比的限制吗?
此外,对于数据读取来说需要的高电平时间是多长?
2 这个规范涉及到脉冲宽度而不是占空比。
使用fxx代表CPU时钟的振动频率,

5 / fxx + 150 (ns)

是作为最小低电平和高电平宽度的要求。
如果上升沿意味着上升时间,这就不能指定了。
78serial
-0035
当使用串行功能时的设置(78K/0和78K/4的不同)
1 我到现在为止一直使用78K/0。
在78K/0中,对于串行I/O,复杂的设置例如P2和PM2的设置是必不可少的。
P2 I/O 端口的设置影响串行口的操作。
78K/4用户手册(文档号 U13570)中并不包括关于串行口设置的I/O 端口设置的描述。
我认为这意味着串行口设置比I/O 端口设置的优先级高。这个看法是正确的吗?
1 不正确。
如果你参考交替功能端口的结构图,你就会发现需要PM2和P2的设置。
具体的说,必须向对应于串口引脚的输出锁存器写入0,向用于串行输入引脚的PM2写入1, 向用于输出引脚的PM2写入0。
78serial
-0036
当不使用外部时钟的时候,我能使用ASCK引脚作为端口吗?[78K/4]
1 这个问题关系到uPD784216A的异步串行接口。
当T01(TM1)输出被选择作为波特率发生器控制寄存器的设置的时候,我认为不必要输入一个外部时钟。
即使这个引脚被用于端口模式也没有问题吗? (ASCK 引脚) (输入,输出)
1 如果不使用外部时钟,ASCK引脚可以被用作端口。
2 不知我这样假设是否正确,内部使用的时钟被输出到T01引脚?
2 如果是控制定时器1的TOE1被设置的话,这个内部使用的时钟就被输出, 但是如果TOE1是0的话,就不被输出。



   LEGAL    最新之产品资料, 请参阅英文版
 请用Internet Explorer浏览本网站以达最佳效果。
  © 2005-2008  NEC Electronics China Limited