OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 484|回复: 6

emWin5.44开始支持STM32F7的硬件JPEG解码了!!

[复制链接]

  离线 

72

主题

6543

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
13036
金钱
13036
注册时间
2013-11-13
在线时间
1490 小时
发表于 2018-6-20 15:01:02 | 显示全部楼层 |阅读模式
正点原子公众号
最近在做RT1052和H7的emWin例程,下载了最新的emWin5.26版本,发现在38章新增了硬件JPEG解码章节,明确支持了是个STM32F7用的。我们都知道STM32F767/769开始带了硬件JPEG解码,现在emWin支持了这个硬件JPEG解码,以后用emWIn做有图片的界面将会大大的提高刷屏速度!!


4@FSK~UCQQ2TUF76PMS9.png
可以看到需要emOS的支持,其实其他的OS也可以,就是用到了emOS做任务同步用的。emWin官方已经提供了JPEG硬件解码层的代码,安装最新的MDK就可以得到最新的emWin,我这里安装的是MDK5.25,路径如下:D:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.6.0\emWin\Sample\JPEGConf,如下图:
(WTU1QEL(M$W4HO2AN8D2BX.png
理论上把这两个文件放到工程里面即可。可以看一下源码,如下:

ZA$Y}GTS6QBZF(AH5$RN(`V.png
源码里面用到了emOS的东西,明显是做任务同步用的,可以用UCOS或者FreeRTOS的信号量或者事件替换掉






开往春天的手扶拖拉机
回复

使用道具 举报

  离线 

227

主题

680

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1573
金钱
1573
注册时间
2012-10-28
在线时间
258 小时
发表于 2018-6-21 09:28:19 | 显示全部楼层
本帖最后由 hpdell 于 2018-6-21 09:29 编辑

你好,我安装的也是 mdk v5.25 版本的,没有找到你所说的那个目录啊,

我的目录貌似是 v7.4.1的,路径如下

C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.4.1\emWin\Sample

另外,这个emwin v5.44 版本的哪里可以下载到啊 ???

如果方面的话,能否发上来共享一下 ???
回复 支持 反对

使用道具 举报

  离线 

72

主题

6543

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
13036
金钱
13036
注册时间
2013-11-13
在线时间
1490 小时
 楼主| 发表于 2018-6-21 10:01:21 | 显示全部楼层
hpdell 发表于 2018-6-21 09:28
你好,我安装的也是 mdk v5.25 版本的,没有找到你所说的那个目录啊,

我的目录貌似是 v7.4.1的,路径如 ...

那是因为你没有更新整个MDK的包!
OT)LM0BOD]5P8]B5[2X5[A5.png
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

  离线 

227

主题

680

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1573
金钱
1573
注册时间
2012-10-28
在线时间
258 小时
发表于 2018-6-22 11:00:55 | 显示全部楼层
zuozhongkai 发表于 2018-6-21 10:01
那是因为你没有更新整个MDK的包!

好的,我试试看
回复 支持 反对

使用道具 举报

  离线 

12

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-7-2
在线时间
32 小时
发表于 昨天 23:04 | 显示全部楼层
正点原子公众号
目前  用硬解码遇到了问题,使用的实例图片进行解码,横屏只能显示600*480的部分,显示正常。
然后  我吧图片放倒,在进行解码,于是乎图片就会错位
回复 支持 反对

使用道具 举报

  离线 

12

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-7-2
在线时间
32 小时
发表于 昨天 23:27 | 显示全部楼层
600*320的图片倒着放好着呢,800*480的图却有问题
1531668126232.jpg
1531668303102.jpg
1531668385746.jpg
回复 支持 反对

使用道具 举报

  离线 

12

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-7-2
在线时间
32 小时
发表于 昨天 23:31 | 显示全部楼层
void LCD_CopyBuffer_YCbCr_To_RGB(uint32_t *pSrc, uint16_t x, uint16_t y,uint16_t xsize, uint16_t ysize,uint32_t ChromaSampling)
{
        uint32_t psx,psy,xnum,ynum;
        uint32_t cssMode = DMA2D_CSS_420;
        uint32_t inputLineOffset = 0;
        uint32_t destination;
        uint32_t regValue, regMask;  
        uint32_t timeout=0;

        if(ChromaSampling == JPEG_420_SUBSAMPLING)
        {
                cssMode = DMA2D_CSS_420;
                inputLineOffset = xsize % 16;
                if(inputLineOffset != 0)
                {
                        inputLineOffset = 16 - inputLineOffset;
                }   
        }
        else if(ChromaSampling == JPEG_444_SUBSAMPLING)
        {
                cssMode = DMA2D_NO_CSS;
                inputLineOffset = xsize % 8;
                if(inputLineOffset != 0)
                {
                        inputLineOffset = 8 - inputLineOffset;
                }   
        }
        else if(ChromaSampling == JPEG_422_SUBSAMPLING)
        {
                cssMode = DMA2D_CSS_422;
                inputLineOffset = xsize % 16;
                if(inputLineOffset != 0)
                {
                        inputLineOffset = 16 - inputLineOffset;
                }      
        }
       
        destination = ((u32)ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize*(lcdltdc.pwidth*y + x));  

        regValue = DMA2D_INPUT_YCBCR | (DMA2D_REPLACE_ALPHA << 16) | \
                        (DMA2D_REGULAR_ALPHA << 20)| \
                        (DMA2D_RB_REGULAR << 21)   | \
                        (0xFFU << 24)               | \
                        (cssMode << 18);
                       
        regMask  = DMA2D_BGPFCCR_CM | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_AI | DMA2D_BGPFCCR_RBS | DMA2D_FGPFCCR_CSS;

        RCC->AHB1ENR   |= 1<<23;                                                                        //使能DM2D时钟
        DMA2D->CR              = 1<<16;                                                                        //Memory-to-memory with PFC
        DMA2D->OPFCCR          = DMA2D_OUTPUT_RGB565;                                                //色彩
    DMA2D->OOR                = lcdltdc.pwidth - xsize;                                        //行偏移量
        DMA2D->OPFCCR  |= (DMA2D_REGULAR_ALPHA << 20);                                //常规混合
        DMA2D->OPFCCR  |= (DMA2D_RB_REGULAR << 21);                                    //Regular mode (RGB or ARGB)       
        DMA2D->FGPFCCR |= (regMask & regValue);                                      //前景PFC控制       
        DMA2D->FGOR            = inputLineOffset;                                                        //前景抵消
        DMA2D->NLR             = (uint32_t)(xsize << 16) | (uint16_t)ysize;  //行和列
        DMA2D->OMAR            = (uint32_t)destination;                                        //显示位置
        DMA2D->FGMAR           = (uint32_t)pSrc;  
       
    DMA2D->CR          |= 1<<0;                        //启动DMA2D
        while((DMA2D->ISR&(1<<1))==0)        //等待传输完成
        {
                timeout++;
                if(timeout>0X1FFFFF)break;        //超时退出
        }
        DMA2D->IFCR|=1<<1;                                //清除传输完成标志         
}
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-16 05:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */