|
发表于 2006-4-30 01:06:00
|
显示全部楼层
<DIV class=quote><B>以下是引用<I>aquasnake</I>在2006-4-26 12:27:00的发言:</B>
<P>开机:</P>
<P>A, PMU上电,RESET立即输出0</P>
<P>B, PMU检测VPWR电压/电流</P>
<P> -1, 若在规定允许范围内,内部LDO使能,输出各路电压,RESET延迟一定时间后变1;此时DBB(ARM)已工作,程序BOOT,状态FLAG设为OFF,并进入SLEEP模式等待POW_ON_INT中断唤醒.此虽为关机状态实则SLEEP</P>
<P> -2, 若不在额定区域内(欠压\过压\过流),则保护,RESET维持0;此时系统等于断电,PMU输入保护</P>
<P>C, 若通过B-1,等待POW_ON/OFF_KEY输入0(或1,由不同检测输入口判决)电平,产生开机中断(PWR_ON_INT)至DBB.程序计时...计时到,DBB 检测POW_ON/OFF_KEY(这个键分2路,一路到PMU开机检测,另一路到DBB的KEY ARRAY的GPIO中的一个RTN PIN作为退出/开关机功能键)是否为按下(0)</P>
<P> -1, 若是则判决为长按,状态FLAG设为ON,OS开TASK,INITIAL各周边,点亮LCM.....DOWNLOAD SIM卡数据,使能RF,搜网\注册...</P>
<P> -2, 若否,则判决为误触发干扰或短按,进入SLEEP</P>
<P>=======================================================================</P>
<P>关机:</P>
<P>STATUS为ON的状态下,POW_ON/OFF_KEY RTN中断后开任务计时, 计时到再获取键值,若仍是POW_ON/ OFF,则状态FLAG设为OFF,保护数据,退出TASK,进入SLEEP</P>
<P align=right><FONT color=red>+5 RD币</FONT></P></DIV>
这位老兄估计是搞硬件出生的。本人做底层的。深入研究从按键到RTOS成功调度。
关于你说的硬件部分,前面表示赞同。SW部分你的描述太简单,至少没有说那些变量如何被初始化起来,如何初始值在flash中会到RAM中。关于后部分按键长按的检测机制,我不了解你的系统,不做评论。
你说的也正确,我主要讲了boot,关于硬件的上电过程。我们的系统是这样设计的。
按POWER键,VBatt和PMIC接上,如果电池电压比较高,则LDO输出电压。否则电池需要pre-charge,系统无法启动,这个时候即使有charger连着也无法启动。 如果PMIC认为可以启动(Vbatt高于预充电电压),则输出适当的RESET信号。然后ARM转到RESET向量地址(也就是0地址)。
我们的方案中,POWER键是否长按是靠SW识别的,所以有两种机制,RESET后的jump目标代码立即识别,还是先初始化一段时间后再识别。余下如我上面所述。[br]<p align=right><font color=red>+3 RD币</font></p> |
|