Forums

COP和外部复位之间的区别

开始于 eqh2 2006年11月8日
COP重置和外部加电之间是否有任何区别
重置?我意识到COP有其自己的向量,如果
外部复位不会主动将其拉低。
但是,在我的代码中,COP向量和重置向量都指向相同的
_启动代码。因此,它们的行为不应该完全一样吗?我是
担心某些寄存器未重置为其重置值,或
一些一次写入寄存器可能不允许另一次写入
COP重置后。

我的引导加载程序出现问题,如果电源打开,行为会有所不同
重置与从应用程序跳回到引导加载程序。

我正在使用COP跳回到引导加载程序,专门是为了避免
担心一次写入寄存器。

任何线索都将有所帮助。

-担
担,

引导加载程序特别难以调试。

以下是一些答案和注释。

希望这可以帮助。

Steve Russell

在2006年11月8日01:31 PM,eqh2写道:
>COP重置和 external power up
>重置?我意识到COP有其自己的向量,如果
>外部复位不会主动将其拉低。
>但是,在我的代码中,COP向量和重置向量都指向相同的
>_启动代码。因此,它们的行为不应该完全一样吗?

相对于系统其余部分的时序可能有所不同。

COP复位的/ RESET信号的断言比
外部复位设备对/ RESET的声明。

我不认为硬件应该注意到这一点或关心,但MCU
似乎用它来告诉COP重置和
外部复位。

>我担心某些寄存器未重置为 其重置值或
>一些一次写入寄存器可能不允许之后的另一次写入
>the COP reset.

重置是重置,无论来源如何。寄存器设置为其
重置值,您的程序每次写入仅一次写入
重置后注册。

>我的引导程序行为出现问题 differently if power
>重置与从应用程序跳回到引导加载程序。

如果您使用的是BDM调试器,则可能无法保持通信
重置后。 BDM调试器必须在特殊单片机中启动MCU
模式,并通过写入
寄存器。这些影响可能产生令人困惑的症状。

>我正在使用COP跳回到引导加载程序 专门避免
>担心一次写入寄存器。

这似乎是一个好方法。问题可能是普通重置
代码写入引导加载程序需要写入的一次写入寄存器
以不同的值写入。这可能是处理闪光灯所必需的
保护或安全。

>任何线索都将有所帮助。
>
>-Dan
对所有SCI用户的跟进和警告...

我发现我的引导程序问题。是的,这些很难
调试...不,结果与COP无关。

基本的问题是我没有正确初始化uart。它
看来我开机时出现了帧错误(可能是由于
RS-485收发器,因此该部分不适用于大多数人)。
但是我没有正确清除串行init中的所有错误标志,所以我
丢失了第一个rx字节。如果我启动了引导程序
之所以可以,是因为之前必须进行握手。
下载开始。如果我从应用程序跳到
COP重置的引导加载程序中,握手已在
应用程序,下载的第一个字节已丢失
靴子。

所以这是我的警告...
如果您使用的是SCI,建议您停止使用
现在就做,看看您的SCI初始化,并确保您
正在通过读取状态寄存器清除所有错误标志,然后
数据寄存器。此序列还将清除所有挂起的标志
在启用它们之前会导致中断。我没见过
这在我看过的应用笔记中。我的(用于MC9S12XDT256)搭配
像这样...

void Init_serial(uWord baud)//设置串行接口并
s列
{
uByte temp;
rxstart = rxend = rxcnt = 0;
txstart = txend = txcnt = 0;
SCI0BD_SBR = baud;

SCI0CR1 = 0; // 8位,无奇偶校验

temp = SCI0SR1; //读取状态寄存器
temp = SCI0DRL; //读取数据寄存器-此序列清除所有
错误

//打开接收中断,发送器,接收器
SCI0CR2 = SCI0CR2_RIE_MASK | SCI0CR2_TE_MASK | SCI0CR2_RE_MASK;
}
---在6 ...中,“ eqh2”写道:
>所以这是我的警告...
>如果您使用的是SCI,建议您停止使用
>现在就做,看看您的SCI初始化并
>确保通过读取状态清除所有错误标志
>寄存器,然后是数据寄存器。

是的,我从文档中得知错误标志就像一个
RDRF的扩展部分,使您知道需要注意。如果
您检查RDRF时,还要经常检查err标志,以了解是否存在
另一个问题,甚至数据传入可能无效。

我检查的方式是读取状态,看是否有错误
检测到,并读取rx字节。我以为当我读到它时
会清除所有err标志,如果我可以忽略该字节
发现了错误。麻烦的是,有时它跳过了一些
帧,甚至开始停止,直到我重置。

误导的尝试
首先,我遇到了不必要的麻烦,因为我不得不更换
接通电源后,单元上的MCU。我唯一的替代
曾经是一个旧的口罩(1K79X)。我开始看到由SCI造成的勘误
类似的问题,并认为仍然存在问题
与旧的勘误表有关的较新的蒙版。最终我
我意识到我忘记了哪个MCU有哪些症状。

解决方案
事实证明,无论面罩如何,最难以捉摸的问题是
就是我不能确保自己清除OR。你知道它已经清除
通过(1)读取SCISR1和(2)读取SCIDRL(DR)。诀窍是我只
在读取DR之前检查一次OR。如果OR发生在正确的位置
读完SCISR1之后,我最终清除了RDRF而未清除
或者。我决定,即使我在灾难恢复之前检查状态,也需要
之后立即再次检查状态,以查看OR是否在不久之前发生
阅读DR。当然,由于我将其削减到接近极限,所以我
还提出了HPRIO的(SCI1)中断优先级,因此
优先于其他中断,并且不再丢失任何数据包。