中级会员
 
- 积分
- 227
- 金钱
- 227
- 注册时间
- 2018-6-14
- 在线时间
- 54 小时
|

楼主 |
发表于 2018-6-15 11:23:32
|
显示全部楼层
原子哥,我移植完了,还是不行 ,程序死在u8 hjpgd_decode(u8* pname)函数JPEG硬件解码图片,观察了hjpgd.inbuf[hjpgd.inbuf_write_ptr].sta这个值永远为0x01:
JPEG_DMA_Start(); //启动DMA传输
while(1)
{
SCB_CleanInvalidateDCache(); //清空D catch
if(hjpgd.inbuf[hjpgd.inbuf_write_ptr].sta==0&&fileover==0) //有buf为空
{
res=f_read(ftemp,hjpgd.inbuf[hjpgd.inbuf_write_ptr].buf,JPEG_DMA_INBUF_LEN,&br);//填满一个缓冲区
if(res==FR_OK&&br)
{
hjpgd.inbuf[hjpgd.inbuf_write_ptr].size=br; //读取
hjpgd.inbuf[hjpgd.inbuf_write_ptr].sta=1; //buf满
}else if(br==0)
{
timecnt=0; //清零计时器
fileover=1; //文件结束了...
}
if(hjpgd.indma_pause==1&&hjpgd.inbuf[hjpgd.inbuf_read_ptr].sta==1)//之前是暂停的了,继续传输
{
JPEG_IN_DMA_Resume((u32)hjpgd.inbuf[hjpgd.inbuf_read_ptr].buf,hjpgd.inbuf[hjpgd.inbuf_read_ptr].size); //继续下一次DMA传输
hjpgd.indma_pause=0;
}
hjpgd.inbuf_write_ptr++;
if(hjpgd.inbuf_write_ptr>=JPEG_DMA_INBUF_NB)hjpgd.inbuf_write_ptr=0;
}
if(hjpgd.outbuf[hjpgd.outbuf_read_ptr].sta==1) //buf里面有数据要处理
{
mcublkindex+=hjpgd.ycbcr2rgb(hjpgd.outbuf[hjpgd.outbuf_read_ptr].buf,(u8*)rgb565buf,mcublkindex,hjpgd.outbuf[hjpgd.outbuf_read_ptr].size);
hjpgd.outbuf[hjpgd.outbuf_read_ptr].sta=0; //标记buf为空
hjpgd.outbuf[hjpgd.outbuf_read_ptr].size=0; //数据量清空
hjpgd.outbuf_read_ptr++;
if(hjpgd.outbuf_read_ptr>=JPEG_DMA_OUTBUF_NB)hjpgd.outbuf_read_ptr=0;//限制范围
if(mcublkindex==hjpgd.total_blks)
{
break;
}
}else if(hjpgd.outdma_pause==1&&hjpgd.outbuf[hjpgd.outbuf_write_ptr].sta==0) //out暂停,且当前writebuf已经为空了,则恢复out输出
{
JPEG_OUT_DMA_Resume((u32)hjpgd.outbuf[hjpgd.outbuf_write_ptr].buf,JPEG_DMA_OUTBUF_LEN);//继续下一次DMA传输
hjpgd.outdma_pause=0;
}
timecnt++;
if(fileover)//文件结束后,及时退出,防止死循环
{
if(hjpgd.state==JPEG_STATE_NOHEADER)break; //解码失败了
if(timecnt>0X3FFF)break; //超时退出
}
} //超时退出
}
} |
|