【散分提问】12M晶振使能问题

时间:2021-02-23 23:33:11
最近遇到个问题。系统通过响应GPIO口例如GPIO0这个IO口中断实现一个低功耗休眠的动作。一些机器上正常,功耗小于5mA,12M晶振工作停止,32.768正常工作。但是现在的一个案子上休眠都休眠下去了。但是12M晶振没有停止,一直有个50mA在,程序上已经试图在休眠的地方加入设定晶振使能的控制寄存器关闭,但是依然存在12M,当然功耗依然没下来。请问下各位高手有没有遇到过这样的情况。下面在列下问题

1.目的为降低功耗;
2.当前测试发现原因主芯片供应的12M晶振没有被关闭,强行将12M对地接后功耗降低至1mA;
3.原始功能是通过按键休眠实现低功耗,同时12M也关闭;
4.主芯片为SIRF A3;
5.尝试在相应响应休眠的程序上加入对12M使能的控制但依然无效;

求助。解决了再加分。

57 个解决方案

#1


自己先顶下。。。

#2


哈哈,这不叫散分啊。

#3


有诱惑的嫌疑。。。。。没办法。。。引高手进来。

#4


控制没作用?没控制到?没指到对应的物理地址?

#5


引用 4 楼 xqhrs232 的回复:
控制没作用?没控制到?没指到对应的物理地址?

谢谢 xqhrs232.。。。

物理地址??
他是两个线,从主芯片里出来,XIN XOUT进12M晶振。
没指到对应的物理地址?
这个什么叫物理地址。。。。他是一个寄存器。我直接写寄存器控制的。。这样不行吗?汗。。
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
这样定义的。
// define power manager registers
struct powerregs {
struct pwrctrl  pmr_ctrl;
struct pwrconfig  pmr_config;
struct pwrwakeup  pmr_wakeup;
struct pwrsleepstatus  pmr_sleepstatus;
unsigned int pmr_scratchpad;
UCHAR                   pad[8];  // padded 64-bits
struct pwroscstatus  pmr_oscstatus;
struct pwrclkswitch  pmr_clkswitch;
UCHAR                   pad1[4];
struct pwrpll1config  pmr_pll1config;
struct pwrpll2config  pmr_pll2config;
struct pwrclkenable  pmr_clkenable;
struct pwroscwait  pmr_oscwait;  // 0x034
unsigned int   pmr_stoplevel;  // 0x38
unsigned int  pmr_pinrelease; // 0x3c
struct pwrioclkratio  pmr_ioclkratio; // 0x40
unsigned int  pmr_xinratio;  // 0x44
struct pwrMemCtrlbits   pmr_memctrl; //0x48
struct pwrDelayCtrl0 pmr_delayctrl0; //0x4c
struct pwrDelayCtrl1 pmr_delayctrl1; //0x50
};


#6


我直接写寄存器位。

#7


引用 6 楼 xumercury 的回复:
我直接写寄存器位。

怎么写的?

#8


硬件上不懂,看看两根引脚的波形正确么?

#9


一般 5mA   这个功耗 不小哦! 你的片子米用过 

#10


引用 9 楼 M0521 的回复:
一般 5mA  这个功耗 不小哦! 你的片子米用过 


5ma还不小?

#11


引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?

牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

#12


引用 9 楼 M0521 的回复:
一般 5mA   这个功耗 不小哦! 你的片子米用过

已经很小了。。。哎。。。。电路设计的。。。不说了。。不做评价。高手有没有其他建议给小弟的。。。。
晶振一般怎么控制工作的。

#13


引用 10 楼 gooogleman 的回复:
引用 9 楼 M0521 的回复:
一般 5mA  这个功耗 不小哦! 你的片子米用过


5ma还不小?

理论上。。。。。sirf A3待机功耗是微安级的。。。。。。也就是几百微安。。uA....
我把12M 欧掉了就1mA。。。。

#14


不一定是程序问题 调试时看你设置的那寄存器是否如你想改变没
若是 可能芯片的事 
路过

#15


引用 14 楼 jgj58 的回复:
不一定是程序问题 调试时看你设置的那寄存器是否如你想改变没
若是 可能芯片的事
路过

其他的都没问题啊。。。。我现在非常之迷茫。。。。硬件说不是硬件问题。软件又查不出来。。。。迷茫啊。。

#16


引用 7 楼 wangxin_801115 的回复:
引用 6 楼 xumercury 的回复:
我直接写寄存器位。

怎么写的?


上面有写

#17


顶下。各位大侠帮忙啊

#18


看你的A3的datasheet怎么写的?如果是用的无源晶振的话,换一个有源金振(是金振,不是晶振)试验一下。

#19


引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么? 


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。 

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。

#20


帮顶了。

#21


其他的板子都好用就一个不好用~
那肯定是硬件的事了                                              

#22


友情up,这个真的不会

#23


引用 18 楼 njtu_shiyl 的回复:
看你的A3的datasheet怎么写的?如果是用的无源晶振的话,换一个有源金振(是金振,不是晶振)试验一下。

高手。。不懂。。。。
datasheet里面是这样写 
Internal 12MHz and 32.768KHz oscillator (external crystal needed) 
这个是属于哪个类?
不过我感觉也不是晶振的问题。其他产品上用的都是一样的东东。。。。

#24


引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。

米国。。。。厉害了。。。祝顺利。。

#25


引用 21 楼 lmlmlmnew 的回复:
其他的板子都好用就一个不好用~
那肯定是硬件的事了

。。。。。。老板说是软件。。我无语。
产品不同。
但是硬件设计上。。。我们没办法决定。

理论上跟硬件其实没关系。。我对比了两个产品的原理图。一个是用按键下拉,我们现在是用MCU下拉。两个其实是一样的原理。但是就是关不掉12M。

#26


引用 24 楼 xumercury 的回复:
引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复: 
引用 8 楼 codewarrior 的回复: 
硬件上不懂,看看两根引脚的波形正确么? 


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。 

外话。3530耍的怎么样了 

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。 
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。 


米国。。。…

俺不是很懂硬件。不过我觉得你们得首先排除是不是硬件问题,如果是的话,软件上debug一辈子也不一定能找出症结。
你要看的不是主芯片的datasheet,应该看看这颗晶振的参数,如果需要关闭它,需要按什么时序发送命令,先确保晶振得到了正确的命令。

#27


SIRF A4下对某些GPIO控制需要有特殊控制,看样子你GPIO口没有控制,如果控制到了,那你就把这个GPIO口设置成输入。那应该就会存在功耗了。

#28


SIRF A3下对某些GPIO控制需要有特殊控制技巧,看样子你的GPIO口没有控制到。如果控制到了,还有输出功耗,那你就把这个GPIO口设置成输入口。那应该就不会再存在功耗了。

#29


引用 28 楼 cq520zw 的回复:
SIRF A3下对某些GPIO控制需要有特殊控制技巧,看样子你的GPIO口没有控制到。如果控制到了,还有输出功耗,那你就把这个GPIO口设置成输入口。那应该就不会再存在功耗了。

谢谢CQ.
有个问题。。。。12M那组晶振并不是GPIO口啊。。。我现在的问题是12M关不掉。。XIN XOUT不是GPIO。主要问题就是在12M并没有关闭导致功耗过大。这个12M有没有什么建议把它关掉。软件或者硬件问题??

#30


引用 26 楼 codewarrior 的回复:
引用 24 楼 xumercury 的回复:
引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是…


了解。。我再看看。谢谢啦。时序的问题倒真是个大问题。

#31


WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

#32


引用 31 楼 cq520zw 的回复:
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

谢谢建议。我试验下

#33


引用 31 楼 cq520zw 的回复:
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

不行。。诶。。还是12M有。。难道是没控制到?

#34


那就是没有控制到,能描述一下开机到while(1);之间的波形吗? 发一下这个结构体。还有A3关于这个寄存器的说明文档(我没有A4文档)

#35


我没有A3的文档

#36


发一下pwrclkenable这个结构体

#37


//Power Manager Clocks Enable Register (PWR_CLK_ENABLE) - 0x0030 write-only
struct pwrclkenable {
unsigned dsp  :1; // 0,default 0; DSP core clock enable 1 : reset
unsigned rom  :1; // 1,FLASH Controller clock enable; default 1
unsigned dma  :1; // 2,DMA Controller clock enable
unsigned lcd  :1; // 3,LCD Controller clock enable
unsigned gps  :1; // 4,GPS clock enable
unsigned usb  :1; // 5,USB Core clock enable
unsigned pcmcia  :1; // 6,PCMCIA Core clock enable
unsigned cam  :1; // 7,Camera clock enable
unsigned codec  :1; // 8,CODEC clock enable
unsigned sp0  :1; // 9,UART, serial port 0,6,7 clock enable
unsigned sp1  :1; // 10,serial port 1 clock enable
unsigned sp2  :1; // 11,serial port 2 clock enable
unsigned sp3  :1; // 12,serial port 3 clock enable
unsigned sp4  :1; // 13,serial port 4 clock enable
unsigned sp5  :1; // 14,serial port 5 clock enable
unsigned ipolate  :1; // 15,interpolation bolci enable
unsigned ext  :1; // 16,extension port clock enable
unsigned sdio  :1; // 17,SD interface clock enable
unsigned sm  :1; // 18,clock output enable
unsigned copy  :1; // 19,PCI copy block enable
unsigned i2c  :1; // 20,
unsigned io :1; // 21,io clock enable
unsigned pci :1; // 22,pci interface clock enable
unsigned cko0  :1; // 23
unsigned cko1 :1; // 24,
unsigned can0  :1; // 25, CAN BUS 0
unsigned can1 :1; // 26, CAN BUS 1
unsigned padarb :1; // 27, pad arbitration clock enable
unsigned xin :1; // 28, XIN clock enable
unsigned xinw :1; // 29, XINW interface clock enable
unsigned ide :1; // 30, IDE
unsigned rsvd1  :1; // reserved
};

#38


引用 34 楼 cq520zw 的回复:
那就是没有控制到,能描述一下开机到while(1);之间的波形吗? 发一下这个结构体。还有A3关于这个寄存器的说明文档(我没有A4文档)

以上电就是一个标准的12M正弦波型,非常正常,我要做的是休眠的时候把12M关闭。
现在休眠我已经做了。也就是将GPIO0 拉底。系统其他部分都是休眠状态了。但是12M并没有关闭。
我也找其他的同行对了下code。没发现异常,别人的也是一样的。。。但是就是能关掉12M不知道是不是没找到还是看错了。。汗。
理论上修改的地方应该是sleep.c 或者是 off.c里面的一些函数,难道是我程序修改思路错了?

#39


我那样写的目的是看一下你是不是能控制住寄存器。

#40


引用 39 楼 cq520zw 的回复:
我那样写的目的是看一下你是不是能控制住寄存器。

目前看来不知道是没有控制到还是根本就没有执行到。。现在比较迷茫。呵呵

#41


那你在while(1)之前;增加一个条打印语句:原型RETAILMSG(1,(L"这里填入你需要输出的信息"));

#42


恩。试试看先。打印信息可能还没执行到就可能因为断电导致成了乱码或者就没有显示出来。

#43


没有打印信息。。。不知道是什么地方有问题。可能根本就是函数没跑到。。再检查下

#44


那就是一直都没有执行到这部分。。。。你看一下你的代码

#45


电路上设计一个关段,增加电路。

#46


引用 45 楼 wohoo2002 的回复:
电路上设计一个关段,增加电路。

谢谢wohoo。能不能介绍下什么电路。我不是主要做硬件的。我是软件负责,汗。。。关段是什么不懂。。

#47


引用 44 楼 cq520zw 的回复:
那就是一直都没有执行到这部分。。。。你看一下你的代码

code太多了。。汗。。
我现在怀疑是APM部分的问题。也就是advance power manager的问题。再查下

#48


你现在都已经知道WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0); 
没有执行,怎么不再在软件部分跟下去,你把WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0); 
放到休眠和关机之前,保证让他执行到。你再看波形。。。。软体能实现何必要去修改硬件?关注了一个下午了。唉。。。。我自己的驱动却还没有调试完。。。我闪人先。。。。这个问题,使用软体一定是能实现的(我在A4下做过类似的东西)。

#49


引用 48 楼 cq520zw 的回复:
你现在都已经知道WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
没有执行,怎么不再在软件部分跟下去,你把WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
放到休眠和关机之前,保证让他执行到。你再看波形。。。。软体能实现何必要去修改硬件?关注了一个下午了。唉。。。。我自己的驱动却还没有调试完。。。我闪人先。。。。这个问题,使用软体一定是能实现…

这个案子硬件比较怪异。软件上也没了支持。呃。。。
主要是一个个排除下。谢谢cq了。现在找到了一些方法去处理下。
整定了就马上结贴

#50


WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin, 0);
已经用其他办法验证了。没有将晶振关闭。。。呵呵。比较麻烦了。。

#1


自己先顶下。。。

#2


哈哈,这不叫散分啊。

#3


有诱惑的嫌疑。。。。。没办法。。。引高手进来。

#4


控制没作用?没控制到?没指到对应的物理地址?

#5


引用 4 楼 xqhrs232 的回复:
控制没作用?没控制到?没指到对应的物理地址?

谢谢 xqhrs232.。。。

物理地址??
他是两个线,从主芯片里出来,XIN XOUT进12M晶振。
没指到对应的物理地址?
这个什么叫物理地址。。。。他是一个寄存器。我直接写寄存器控制的。。这样不行吗?汗。。
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
这样定义的。
// define power manager registers
struct powerregs {
struct pwrctrl  pmr_ctrl;
struct pwrconfig  pmr_config;
struct pwrwakeup  pmr_wakeup;
struct pwrsleepstatus  pmr_sleepstatus;
unsigned int pmr_scratchpad;
UCHAR                   pad[8];  // padded 64-bits
struct pwroscstatus  pmr_oscstatus;
struct pwrclkswitch  pmr_clkswitch;
UCHAR                   pad1[4];
struct pwrpll1config  pmr_pll1config;
struct pwrpll2config  pmr_pll2config;
struct pwrclkenable  pmr_clkenable;
struct pwroscwait  pmr_oscwait;  // 0x034
unsigned int   pmr_stoplevel;  // 0x38
unsigned int  pmr_pinrelease; // 0x3c
struct pwrioclkratio  pmr_ioclkratio; // 0x40
unsigned int  pmr_xinratio;  // 0x44
struct pwrMemCtrlbits   pmr_memctrl; //0x48
struct pwrDelayCtrl0 pmr_delayctrl0; //0x4c
struct pwrDelayCtrl1 pmr_delayctrl1; //0x50
};


#6


我直接写寄存器位。

#7


引用 6 楼 xumercury 的回复:
我直接写寄存器位。

怎么写的?

#8


硬件上不懂,看看两根引脚的波形正确么?

#9


一般 5mA   这个功耗 不小哦! 你的片子米用过 

#10


引用 9 楼 M0521 的回复:
一般 5mA  这个功耗 不小哦! 你的片子米用过 


5ma还不小?

#11


引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?

牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

#12


引用 9 楼 M0521 的回复:
一般 5mA   这个功耗 不小哦! 你的片子米用过

已经很小了。。。哎。。。。电路设计的。。。不说了。。不做评价。高手有没有其他建议给小弟的。。。。
晶振一般怎么控制工作的。

#13


引用 10 楼 gooogleman 的回复:
引用 9 楼 M0521 的回复:
一般 5mA  这个功耗 不小哦! 你的片子米用过


5ma还不小?

理论上。。。。。sirf A3待机功耗是微安级的。。。。。。也就是几百微安。。uA....
我把12M 欧掉了就1mA。。。。

#14


不一定是程序问题 调试时看你设置的那寄存器是否如你想改变没
若是 可能芯片的事 
路过

#15


引用 14 楼 jgj58 的回复:
不一定是程序问题 调试时看你设置的那寄存器是否如你想改变没
若是 可能芯片的事
路过

其他的都没问题啊。。。。我现在非常之迷茫。。。。硬件说不是硬件问题。软件又查不出来。。。。迷茫啊。。

#16


引用 7 楼 wangxin_801115 的回复:
引用 6 楼 xumercury 的回复:
我直接写寄存器位。

怎么写的?


上面有写

#17


顶下。各位大侠帮忙啊

#18


看你的A3的datasheet怎么写的?如果是用的无源晶振的话,换一个有源金振(是金振,不是晶振)试验一下。

#19


引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么? 


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。 

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。

#20


帮顶了。

#21


其他的板子都好用就一个不好用~
那肯定是硬件的事了                                              

#22


友情up,这个真的不会

#23


引用 18 楼 njtu_shiyl 的回复:
看你的A3的datasheet怎么写的?如果是用的无源晶振的话,换一个有源金振(是金振,不是晶振)试验一下。

高手。。不懂。。。。
datasheet里面是这样写 
Internal 12MHz and 32.768KHz oscillator (external crystal needed) 
这个是属于哪个类?
不过我感觉也不是晶振的问题。其他产品上用的都是一样的东东。。。。

#24


引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。

米国。。。。厉害了。。。祝顺利。。

#25


引用 21 楼 lmlmlmnew 的回复:
其他的板子都好用就一个不好用~
那肯定是硬件的事了

。。。。。。老板说是软件。。我无语。
产品不同。
但是硬件设计上。。。我们没办法决定。

理论上跟硬件其实没关系。。我对比了两个产品的原理图。一个是用按键下拉,我们现在是用MCU下拉。两个其实是一样的原理。但是就是关不掉12M。

#26


引用 24 楼 xumercury 的回复:
引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复: 
引用 8 楼 codewarrior 的回复: 
硬件上不懂,看看两根引脚的波形正确么? 


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。 

外话。3530耍的怎么样了 

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。 
我的意思是你看看波形,关闭的命令发送出去没有,时序是否正确。 


米国。。。…

俺不是很懂硬件。不过我觉得你们得首先排除是不是硬件问题,如果是的话,软件上debug一辈子也不一定能找出症结。
你要看的不是主芯片的datasheet,应该看看这颗晶振的参数,如果需要关闭它,需要按什么时序发送命令,先确保晶振得到了正确的命令。

#27


SIRF A4下对某些GPIO控制需要有特殊控制,看样子你GPIO口没有控制,如果控制到了,那你就把这个GPIO口设置成输入。那应该就会存在功耗了。

#28


SIRF A3下对某些GPIO控制需要有特殊控制技巧,看样子你的GPIO口没有控制到。如果控制到了,还有输出功耗,那你就把这个GPIO口设置成输入口。那应该就不会再存在功耗了。

#29


引用 28 楼 cq520zw 的回复:
SIRF A3下对某些GPIO控制需要有特殊控制技巧,看样子你的GPIO口没有控制到。如果控制到了,还有输出功耗,那你就把这个GPIO口设置成输入口。那应该就不会再存在功耗了。

谢谢CQ.
有个问题。。。。12M那组晶振并不是GPIO口啊。。。我现在的问题是12M关不掉。。XIN XOUT不是GPIO。主要问题就是在12M并没有关闭导致功耗过大。这个12M有没有什么建议把它关掉。软件或者硬件问题??

#30


引用 26 楼 codewarrior 的回复:
引用 24 楼 xumercury 的回复:
引用 19 楼 codewarrior 的回复:
引用 11 楼 xumercury 的回复:
引用 8 楼 codewarrior 的回复:
硬件上不懂,看看两根引脚的波形正确么?


牛人。波形很漂亮的。。。= =问题是我要关掉那个波形。。。。

外话。3530耍的怎么样了

我菜鸟。3430板子还没买到手,马上要去美国出差一个月,等回来再买,或者干脆在那边买小狗板了。
我的意思是你看看波形,关闭的命令发送出去没有,时序是…


了解。。我再看看。谢谢啦。时序的问题倒真是个大问题。

#31


WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

#32


引用 31 楼 cq520zw 的回复:
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

谢谢建议。我试验下

#33


引用 31 楼 cq520zw 的回复:
WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
while(1);
之后你量波形。。。。

不行。。诶。。还是12M有。。难道是没控制到?

#34


那就是没有控制到,能描述一下开机到while(1);之间的波形吗? 发一下这个结构体。还有A3关于这个寄存器的说明文档(我没有A4文档)

#35


我没有A3的文档

#36


发一下pwrclkenable这个结构体

#37


//Power Manager Clocks Enable Register (PWR_CLK_ENABLE) - 0x0030 write-only
struct pwrclkenable {
unsigned dsp  :1; // 0,default 0; DSP core clock enable 1 : reset
unsigned rom  :1; // 1,FLASH Controller clock enable; default 1
unsigned dma  :1; // 2,DMA Controller clock enable
unsigned lcd  :1; // 3,LCD Controller clock enable
unsigned gps  :1; // 4,GPS clock enable
unsigned usb  :1; // 5,USB Core clock enable
unsigned pcmcia  :1; // 6,PCMCIA Core clock enable
unsigned cam  :1; // 7,Camera clock enable
unsigned codec  :1; // 8,CODEC clock enable
unsigned sp0  :1; // 9,UART, serial port 0,6,7 clock enable
unsigned sp1  :1; // 10,serial port 1 clock enable
unsigned sp2  :1; // 11,serial port 2 clock enable
unsigned sp3  :1; // 12,serial port 3 clock enable
unsigned sp4  :1; // 13,serial port 4 clock enable
unsigned sp5  :1; // 14,serial port 5 clock enable
unsigned ipolate  :1; // 15,interpolation bolci enable
unsigned ext  :1; // 16,extension port clock enable
unsigned sdio  :1; // 17,SD interface clock enable
unsigned sm  :1; // 18,clock output enable
unsigned copy  :1; // 19,PCI copy block enable
unsigned i2c  :1; // 20,
unsigned io :1; // 21,io clock enable
unsigned pci :1; // 22,pci interface clock enable
unsigned cko0  :1; // 23
unsigned cko1 :1; // 24,
unsigned can0  :1; // 25, CAN BUS 0
unsigned can1 :1; // 26, CAN BUS 1
unsigned padarb :1; // 27, pad arbitration clock enable
unsigned xin :1; // 28, XIN clock enable
unsigned xinw :1; // 29, XINW interface clock enable
unsigned ide :1; // 30, IDE
unsigned rsvd1  :1; // reserved
};

#38


引用 34 楼 cq520zw 的回复:
那就是没有控制到,能描述一下开机到while(1);之间的波形吗? 发一下这个结构体。还有A3关于这个寄存器的说明文档(我没有A4文档)

以上电就是一个标准的12M正弦波型,非常正常,我要做的是休眠的时候把12M关闭。
现在休眠我已经做了。也就是将GPIO0 拉底。系统其他部分都是休眠状态了。但是12M并没有关闭。
我也找其他的同行对了下code。没发现异常,别人的也是一样的。。。但是就是能关掉12M不知道是不是没找到还是看错了。。汗。
理论上修改的地方应该是sleep.c 或者是 off.c里面的一些函数,难道是我程序修改思路错了?

#39


我那样写的目的是看一下你是不是能控制住寄存器。

#40


引用 39 楼 cq520zw 的回复:
我那样写的目的是看一下你是不是能控制住寄存器。

目前看来不知道是没有控制到还是根本就没有执行到。。现在比较迷茫。呵呵

#41


那你在while(1)之前;增加一个条打印语句:原型RETAILMSG(1,(L"这里填入你需要输出的信息"));

#42


恩。试试看先。打印信息可能还没执行到就可能因为断电导致成了乱码或者就没有显示出来。

#43


没有打印信息。。。不知道是什么地方有问题。可能根本就是函数没跑到。。再检查下

#44


那就是一直都没有执行到这部分。。。。你看一下你的代码

#45


电路上设计一个关段,增加电路。

#46


引用 45 楼 wohoo2002 的回复:
电路上设计一个关段,增加电路。

谢谢wohoo。能不能介绍下什么电路。我不是主要做硬件的。我是软件负责,汗。。。关段是什么不懂。。

#47


引用 44 楼 cq520zw 的回复:
那就是一直都没有执行到这部分。。。。你看一下你的代码

code太多了。。汗。。
我现在怀疑是APM部分的问题。也就是advance power manager的问题。再查下

#48


你现在都已经知道WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0); 
没有执行,怎么不再在软件部分跟下去,你把WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0); 
放到休眠和关机之前,保证让他执行到。你再看波形。。。。软体能实现何必要去修改硬件?关注了一个下午了。唉。。。。我自己的驱动却还没有调试完。。。我闪人先。。。。这个问题,使用软体一定是能实现的(我在A4下做过类似的东西)。

#49


引用 48 楼 cq520zw 的回复:
你现在都已经知道WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
没有执行,怎么不再在软件部分跟下去,你把WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin,0);
放到休眠和关机之前,保证让他执行到。你再看波形。。。。软体能实现何必要去修改硬件?关注了一个下午了。唉。。。。我自己的驱动却还没有调试完。。。我闪人先。。。。这个问题,使用软体一定是能实现…

这个案子硬件比较怪异。软件上也没了支持。呃。。。
主要是一个个排除下。谢谢cq了。现在找到了一些方法去处理下。
整定了就马上结贴

#50


WRITE_BITFIELD(struct pwrclkenable, &(v_pPowerRegs->pmr_clkenable), xin, 0);
已经用其他办法验证了。没有将晶振关闭。。。呵呵。比较麻烦了。。