我最近制作了4个CC1110的模块,第一阶段焊接了两块,后来又焊接了两块,用的器件都是同一批次的。现在发现一个问题:四个模块的firmware都是一样的,可是发现后来焊接的两块有时候有点不正常,表现的现象如下:
正常的程序上电后,搜索空中的广播信号,然后跟主机进行握手加入队列。如果加入不成功,则驱动蜂鸣器发出声音(无源蜂鸣器,程序上使用for循环输出方波驱动)。
可是后来焊接的两个有时候会出现不能跟主机交互,并且发出的蜂鸣器声音比正常的明显频率偏低了很多。故障发生时测量26MHz的晶振型号正常。
似乎是由于某种原因,CC1110的实际工作频率降低了。但是我的程序初始化的时候是设置26MHz XTAL作为时钟源的。
该现象为偶发现像,发生的情况比较随机,没有发现特定的规律。
求帮助。
Shu Davin:
建议你设置一个IO口一直输出固定频率的方波,在不正常的时候使用示波器测试,波形有无变化?
开门狗是否打开,是否是软件复位造成?
jacky jacky:
我的软件中没有开启看门狗,按照你的建议,某个IO口一直输出固定频率的方波,发现,正常时,输出方波频率为2.6kHz,不正常时输出频率为1.3kHz,恰好频率降低了一半。请帮忙继续分析一下。26MHz振荡信号正常。
WZ:
回复 jacky jacky:
你看看CLKCON的寄存器和CLKSTA的是不是一样,有可能是切换到内部13M去了
jacky jacky:
回复 WZ:
下面是我的始终初始化程序,请参看有没有问题?
// Power up unused oscillator (HS XOSC). SLEEP &= ~SLEEP_OSC_PD; // Wait until the HS XOSC is stable. while( !(SLEEP & SLEEP_XOSC_S) ); // Change the system clock source to HS XOSC and set the clock speed to 26 MHz. CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC|CLKCON_TICKSPD)) | CLKSPD_DIV_1|TICKSPD_DIV_1; // Wait until system clock source has changed to HS XOSC (CLKCON.OSC = 0). while (CLKCON & CLKCON_OSC); // Power down the HS RCOSC, since it is not beeing used. // Note that the HS RCOSC should not be powered down before the applied // system clock source is stable (SLEEP.XOSC_STB = 1). SLEEP |= SLEEP_OSC_PD; /* Now everything is setup */