cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
阅读:2470回复:18

s3c2440/WINCE4.2的系统,当系统正在发声时,挂起系统再唤醒有时没有声音,这是怎么回事?

楼主#
更多 发布于:2007-06-06 14:29
大家好,我现在系统需要做睡眠唤醒功能,可是奇怪的是,当系统正在发声时,挂起,再唤醒有时会没有声音。比如播放视频文件的时候,唤醒之后有时有声音,视频文件正常播放,有时就没声音了,之后点击触摸屏,没声音,再点击一次,有声音,此时调试串口会出现一个堆栈溢出的错误。检查发现发现是正常唤醒的时候会重新调用wav_iocontrol函数写音频数据,再启动DMA传输,可是没正常唤醒的时候就没有调用wav_iocontrol函数,所以也就没有声音。
不知道有没有人遇到这样的问题,检查了两天,我的音频的硬件传输层应该是没有问题,因为出错的时候根本都还没有启动硬件传输,没有找到问题。
NAND Flash烧录器|烧写器|编程器
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-06-07 17:59
你看看是不是唤醒后没有打开OUTPUT DMA,我以前碰倒过这种情况,
hzwwin
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2008-01-16
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-07 19:15
楼主能否简单说下睡眠唤醒功能怎么实现的
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-06-07 20:08
wince_lover兄好!!
我曾经尝试过在audio的powerup函数里边加上一个CeSetPowerEevent()函数去触发一个线程去执行StartupOutputDMA(),StartupOutputDMA()函数里边有一个transferdata()负责具体发送音频数据,可是此时会出现Data abort 的线程错误,不成功,你有没有QQ我向你请教一下。
hzwwin 兄:
一般sansung的BSP的kernel里边会有一个power文件实现睡眠唤醒的具体的事情,你应该只需要调用一个函数就可以了。
NAND Flash烧录器|烧写器|编程器
dfgeoff
驱动牛犊
驱动牛犊
  • 注册日期2004-07-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望69点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-08 10:45
那音频设备(芯片)是否掉过电?是否需要重新初始化?是否从睡眠状态返回到工作状态了?可以加几个调试信息,看看能不能读写该芯片。
日本-倭子-该死! 抵制日货! 敢犯我中华者,虽远必诛!
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-02 16:40
你看看是不是唤醒后没有打开OUTPUT DMA,我以前碰倒过这种情况,

请教一下怎样打开OUTPUT DMA?????????????
swallow_xyf
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2007-08-03 09:26
调用StartOutputDMA();这个函数
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-08-03 14:07
楼上的兄弟,我在power up中调用StartOutputDMA(); power on后TCPMP播放就会死机.
swallow_xyf
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-08-03 16:00
power down之前TCPMP播放器处于PAUSE或STOP状态,power on后play就OK!
swallow_xyf
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-04 09:12
wince_lover兄,
要怎样调用StartOutputDMA()?
swallow_xyf
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-08-04 09:40
我是在POWERDOWN的时候检测是否正在播放,如果是,用一个变量标记。
在POWERUP时将检查这个标记是否置1,如果是1,调SetInterruptEvent唤醒线程。在线程中StartOutputDMA,清该标记
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-08-06 17:37
wince_lover兄,
我用自己定义的#define SYSINTR_MYINTR (SYSINTR_FIRMWARE+22)
来做,线程初始化是OK,进入了等待.在POWER DOWN时设了标志,按POWER键后一点反映都没有(不能POWER ON),我现在还没有检测是否播放.你有没有qq,我的QQ是:404721676,能否加QQ请教你一下.非常谢谢你的指点.
swallow_xyf
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
12楼#
发布于:2007-08-07 14:45
你应该检查一下,是系统根本没有唤醒,还是唤醒了,在执行某一个驱动的POWERUP函数死掉了?
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-08-07 15:29
    bSuccess = InterruptInitialize(SYSINTR_MYINTR, m_hAudioInterrupt_My, NULL, 0);
    if (!bSuccess)
    {
        dwErr = GetLastError();
        RETAILMSG(1,(TEXT("My audio interrupt init fail!: %u\r\n"), dwErr));
        return FALSE;
    }      
    
    m_hAudioInterruptThread_My = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
                                            0,
                                            (LPTHREAD_START_ROUTINE)CallInterruptThread_My,
                                            NULL,
                                            0,
                                            NULL);
原来是中断初始化没有成功,刚开始没有加  if (!bSuccess),所以线程创建OK,加了返回之后,在
    if (!bSuccess)
    {
        dwErr = GetLastError();
        RETAILMSG(1,(TEXT("My audio interrupt init fail!: %u\r\n"), dwErr));
        return FALSE;
    }      
返回了.我不知道为什么会这样?
swallow_xyf
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-08-07 18:07
void CallInterruptThread_My(HardwareContext *pHWContext)
{
    while(1)
    {
        RETAILMSG(1,(TEXT("My thread\n")));
        WaitForSingleObject(m_hAudioInterrupt_My, INFINITE);
        pHWContext->StartOutputDMA();    
    }      
}

BOOL InitInterruptThread_My()
{    
    m_hAudioInterrupt_My = CreateEvent( NULL, FALSE, FALSE, NULL);

    if (!m_hAudioInterrupt_My)
    {
        return FALSE;
    }

    m_hAudioInterruptThread_My = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
                                            0,
                                            (LPTHREAD_START_ROUTINE)CallInterruptThread_My,
                                            NULL,
                                            0,
                                            NULL);    
    return TRUE;
}

void HardwareContext::PowerUp()
{
    I2S_Init();
    AudioMute((DMA_CH_OUT | DMA_CH_MIC), FALSE);        // 030711
    CeSetPowerOnEvent(m_hAudioInterrupt_My);
}
这样也没有声音,这是为什么?
swallow_xyf
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2007-08-07 21:08
你把#define SYSINTR_MYINTR (SYSINTR_FIRMWARE+22)
把22改小点
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-08-09 18:15
wince_lover兄,
现在power on后有声音了,不过刚power on后声音会顿两下,感觉就象系统忙
swallow_xyf
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
17楼#
发布于:2007-08-10 14:16
那你稍微延时一下再打开试试
xiaoyanfei
驱动牛犊
驱动牛犊
  • 注册日期2006-02-18
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望77点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-08-13 10:46
谢谢 wince_lover
swallow_xyf
游客

返回顶部