搜索
 找回密码
 立即注册

简单一步 , 微信登陆

PM下通过串口唤醒

作者:creass | 时间:2016-5-28 12:30:04 | 阅读:6265| 只看该作者
PM下通过串口唤醒
本文以MSD3391为例介绍一下PM下串口唤醒的做法,其他平台可以参考使用(如果IC 没有PM MCU的话,不适用此方法)。
1,          硬件连接
PM下有专门的UART口,它与MIPS的几组串口(即正常的升级调试口,UART2口等)是不同的,由于PM下,MIPS的几组串口都是关掉的,所以要实现PM下串口唤醒功能,就需要将MIPS上使用的RX pin并联到PM下UART口的RX pin上(PM_UART_RX(PIN_205脚)),这样就保证了PM下串口能够接收到上位机发送来的串口信息。。

       另外,在开机状态下,PM_UART_RXPIN_205脚)这个pin要保证不做其他用途,否则会无法正常进入到PM下。
2PM软件更改
(1),PM下的波特率按照客户的需求修改
#defineUART1_BAUDRATE             9600//9600//38400
(2)drvPM.C
按照客户的串口spec修改命令解析函数
_MDrv_PM_Uart1RxData和_MDrv_PM_Uart1ParseData
  
static  void _MDrv_PM_Uart1RxData(void)
  
{
  
    U16 timeout;
  
    gu8Uart1Detected = FALSE;
  
  
    for(gu8Uart1BufIndex = 0;gu8Uart1BufIndex  < MAX_UART1_CMD_LENGTH;gu8Uart1BufIndex++)
  
    {
  
        timeout = 0;
  
        while((!(S1CON&BIT0)) &&  (timeout <= SEARL_INPUT_TIMEOUT))
  
        {    timeout++; }
  
        //{    timeout++;   MDrv_PM_ClearWDT();  }    //To Do
  
  
        if(S1CON&BIT0)
  
        {
  
            /* LGE, taburin : 20081122, skip  first data if it's not 'k' / 'K' + 'm' / 'M'*/
  
            if ( gu8Uart1BufIndex == 1 )
  
            {
  
                if ( gu8Uart1CmdBuf[0] != 'k'
  
#ifndef CONVERT_LOWERCASE
  
                    &&  gu8Uart1CmdBuf[0] != 'K'
  
                    && gu8Uart1CmdBuf[0] !=  'M'
  
#endif
  
                    &&  gu8Uart1CmdBuf[0] != 'm')  //这些条件要根据客户的串口协议来修改
  
                {
  
                    gu8Uart1BufIndex = 0;
  
                }
  
            }
  
….
  
static  BOOLEAN _MDrv_PM_Uart1ParseData(void)
  
{
  
    U8 Data_Ready = FALSE;
  
    U8 CMD_Ready = FALSE;
  
    U8 isStatusReturn = FALSE;
  
    //U8 ucBuf[2];
  
  
    if(gu8Uart1Detected == FALSE)
  
    {
  
        MDrv_PM_Uart1_Tx('F');
  
  
        return CMD_Ready;
  
    }
  
    if((gu8Uart1CmdBuf[0]  ==0xXX)&&(gu8Uart1CmdBuf[1] ==0xXX)
  
        &&(gu8Uart1CmdBuf[2]  ==0xXX)&&(gu8Uart1CmdBuf[3] ==0xXX)
  
        &&(gu8Uart1CmdBuf[4]  ==0xXX)) //这里按照客户串口协议中POWER命令来改写
  
    {
  
        // "PON"
  
        CMD_Ready = TRUE;
  
}
  
…….
  
}
  
(3) MDrv_PM_Init函数中要保证执行MDrv_PM_IntUart1(TRUE);
(4) MDrv_PM_ISR(void)函数中要保证执行_MDrv_PM_ISR_UART1(TRUE)
(5)ENABLE_UART不要打开

收藏
收藏0
分享
分享
点赞
点赞1
反对
反对0
hahaahhahaha!!123
回复

使用道具 举报

大神点评1

沙发#
xuludestiny 发表于:2016-7-5 17:55:20
有用偶,mstar方案应该都是这个原理了
把水灌满
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
手机版