您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [原创]bf518控制AT070TN83 V.1的7寸液晶显示... 
本帖共有2731个阅读者
发表帖子 发表投票 回复主题
[原创]bf518控制AT070TN83 V.1的7寸液晶显示屏代码及总结说明
fashionly(论坛新手)
fashionly
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:195
积分:13
注册时间:2011/7/14
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
精华主题 精华帖子
[原创]bf518控制AT070TN83 V.1的7寸液晶显示屏代码及总结说明

bf518控制AT070TN83 V.1液晶显示屏代码及总结说明

搞了几天,终于整出来个color bar,写点东西大家分享。新人学点东西不容易啊~ 嘿嘿

从头开始写。

----------------------------------------------------------------------------------------------------------------------------

要在屏上显示图像,需要把图像存在内存中。

section("MEM_SDRAM0_BANK0")unsigned short int DisplayBuffer[525][800];
             //前消隐23行,中间480行有效数据,后消隐22行


此处需要在ldf文件中定义

  MEM_SDRAM0_BANK0        { TYPE(RAM) START(0x00000000) END(0x04000000) WIDTH(8) }

这块是不是开的有点大?我不知道。反正程序是可以用了。前辈们给指点一下。


----------------------------------------------------------------------------------------------------------------------------

接下来就是各种初始化

----------------------------------------------------------------------------------------------------------------------------

*pDMA0_START_ADDR = 0;
*pDMA0_X_COUNT = 800;//16位传输
*pDMA0_X_MODIFY = 2;
*pDMA0_Y_COUNT = 525;
*pDMA0_Y_MODIFY = 2;
*pDMA0_CONFIG = FLOW_AUTO | SYNC | DMA2D | WDSIZE_16 ;//243

这里PPI是16位传输数据,所以MODIFY=2,是这样吧。。。

Y_COUNT = 525是因为前消隐23行,中间480行有效数据,后消隐22行。消隐是个什么概念?大概就是占个地方让你看不到它,硬件原理的问题吧。。。自己百度去。

====================================================

*pPORTG_MUX |= 0xc080;//PG6|PG7|PG12;  //435 412 418
ssync();
    *pPORTG_FER |= PG6|PG7|PG5;//436
ssync();

*pTIMER0_PERIOD  = 928;//Thp AT070 P11
*pTIMER0_WIDTH  = 48;
*pTIMER0_CONFIG =  CLK_SEL | TIN_SEL | PERIOD_CNT | PWM_OUT;//496
*pTIMER1_PERIOD  = 928*525;//525*Thp
*pTIMER1_WIDTH  = 928*3;//3*Thp
*pTIMER1_CONFIG = CLK_SEL | TIN_SEL | PERIOD_CNT | PWM_OUT;
ssync();

看好多帖子都没有提到过MUX寄存器,由于我目前只用过518,是不是别的型号PPI接口都不需要指定?

另外在这里需要注意一点,在设计硬件的时候,需要先看一下硬件使用手册412页的表,据说像PPI这些有多个针脚可以指定的功能,必需按表里的分组设计针脚功能。说实话,硬件手册我基本上就没看,谁知道这地方怎么回事就给提个醒。

关于TIMER的设置,需要看屏的说明书,那几个参数说明书里都有。我也做了注释。在网上看了一篇文章,这部分就没写说明,参数我也是猜出来的。哈哈。

================================================

*pPORTF_MUX = 0x555;//435 411
ssync();
    *pPORTF_FER |= 0xFFFF;//436
ssync();
*pPPI_CONTROL = POLS  | 0x0010 | PORT_DIR | 0x3800 | XFR_TYPE;//897 | PACK_EN
*pPPI_DELAY = 0;//904
*pPPI_COUNT = 800-1; //

这部分到没什么太重要的东西,只是要提一句,网上很多例子都是pPPI_COUNT = 800*2-1;因为我在最初定义显示缓存的时候用的是unsigned short int DisplayBuffer,在VDSP里看了一下是16位的,另外在pPPI_CONTROL 里也设置的16位数据,所以我觉得这里pPPI_COUNT = 800-1应该没问题。
================================================
最后就是在内存中生成个color bar了,前后消隐行只是开始为了测试用的,在正常显示的时候,前23行黑色和最后22行白色的条是不会显示出来的。
for(i=0;i<23;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i][j]=0;//黑
  }
}
for(i=23;i<183;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i][j]=0xf800;//蓝
  }
}
for(i=183;i<343;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i][j]=0x7E0;//绿
  }
}
for(i=343;i<503;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i][j]=0x1f;//红
  }
}
for(i=503;i<525;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i][j]=0xffff;//白
  }
}
===========================================================================
最后要感谢scott给提供了一些编程资料,还有感谢frank最重要的一个提醒,我才把这个程序调好。开始编写的程序和上面的差不多,但显示出来的色条总是会向一个方向移动,研究了好多天也没搞明白怎么回事。后来frank说可能是处理速度的问题,让我把主频调到133M。改完马上就好了。呵呵。我的PPI接了50M的晶振,应该是这个原因吧。。。

第一次搞dsp,各种不懂,大家多指教!

chris ma 于2011年7月15日

QQ:5797378



「该帖子被 fashionly 在 2011-07-29 09:51:37 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/15 9:22:27
ben(论坛新手)
ben
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:125
积分:5
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢分享!


理想很丰满 现实很骨感
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/15 9:35:04
fashionly(论坛新手)
fashionly
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:195
积分:13
注册时间:2011/7/14
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

重要补充:

对上面程序进行了另一个测试,在一行中显示两种颜色,测试之后发现,图像整体偏离中心。

经过群里朋友“2012“的提醒,

将*pPPI_DELAY = 0;

改为*pPPI_DELAY = 45;

再次测试显示图像正常。

这个delay值是从网上的资料中找到的,原文说AT070TN83手册中给出延时40周期,但实测45周期比较好。



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/15 11:34:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

section("MEM_SDRAM0_BANK0")unsigned short int DisplayBuffer[525][800];
  

这个buffer建议开成unsigned char型的,这样你的数据空间不浪费。开成int 型是16位的,[525] 会浪费高位字节的内存资源。

MEM_SDRAM0_BANK0        { TYPE(RAM) START(0x00000000) END(0x04000000) WIDTH(8) }

这块是不是开的有点大?我不知道。反正程序是可以用了。前辈们给指点一下。

通过LDF文件中默认SDRAM分区为4个BANK,这是因为SDRAM有4个控制器,连续访问不同BANK的内存会比同一个BANK的快。通常情况下不需要我们再另开分区。section("MEM_SDRAM0_BANK0") ,这个不是分区的标识符,在LDF文件中会再次映射,你可以搜索LDF文件中MEM_SDRAM0_BANK0,找到定义空间属性的映射标识符,默认映射为“sdram0_bank0”。空间开大小无所谓,但不要超过它一个BANK的大小。

这里PPI是16位传输数据,所以MODIFY=2,是这样吧。。。

是,通常16bit修改是2,32bit修改为4

Y_COUNT = 525是因为前消隐23行,中间480行有效数据,后消隐22行。消隐是个什么概念?大概就是占个地方让你看不到它,硬件原理的问题吧。。。自己百度去。

消隐指不能显示到屏上的一些数据。通常视频设备每帧都是跨过很多行才开始接收显示有效数据。

看好多帖子都没有提到过MUX寄存器,由于我目前只用过518,是不是别的型号PPI接口都不需要指定

早期DSP管脚复用不需要通过MUX指定功能,如533不用配置。从bf54x系列开始,管脚复用必须告诉处理器使用什么功能,所以要配置MUX寄存器。

这部分到没什么太重要的东西,只是要提一句,网上很多例子都是pPPI_COUNT = 800*2-1;因为我在最初定义显示缓存的时候用的是unsigned short int DisplayBuffer,在VDSP里看了一下是16位的,另外在pPPI_CONTROL 里也设置的16位数据,所以我觉得这里pPPI_COUNT = 800-1应该没问题。

pPPI_COUNT 寄存器为PPI每行传输数据的次数,比如你采用串行RGB格式,每行320个数据,每个数据PPI要传3次(R,G,B分开传),那么这个值就是960-1 .代表传960次。如果是并行RGB,只需要写入你实际传输的次数-1即可。


最后要感谢scott给提供了一些编程资料,还有感谢frank最重要的一个提醒,我才把这个程序调好。开始编写的程序和上面的差不多,但显示出来的色条总是会向一个方向移动,研究了好多天也没搞明白怎么回事。后来frank说可能是处理速度的问题,让我把主频调到133M。改完马上就好了。呵呵。我的PPI接了50M的晶振,应该是这个原因吧。。。

彩条移动和速度没有关系,造成彩条移动原因有3种:

1. 时钟线上干扰过大,造成时钟多一个,通常显示为向左移。

2. 时序不匹配,PPI控制寄存器中要配置好POLS和POLC寄存器,不匹配会造成移屏,可尝试修改配置值。

3.DMA链路堵塞,数据从内存输出,如果内核频繁对内存操作,会造成PPIDMA数据堵塞,数据会错位,屏幕右移。一些中断也会造成这种现象。通常解决方法可以吧   EBIU_AMGCTL   寄存器 的DMA优先设置打开。即:

*pEBIU_AMGCTL  |= 0x0100;

这样会造成内核效率变慢,但可以有效解决移屏问题。









「该帖子被 andy 在 2011-07-15 11:37:52 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/7/15 11:36:10
四月天(论坛新手)
四月天
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:115
积分:3
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

羡慕,学习了.....


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/15 12:10:02
fashionly(论坛新手)
fashionly
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:195
积分:13
注册时间:2011/7/14
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy详细的回复。辛苦了!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/15 13:16:40
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

讨论的不错,加个精华,非常鼓励大家把开发经验写在这里分享啊!


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2011/7/15 20:29:08
尊贵身份标志
Tank(论坛版主)
Tank
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:125
积分:5
注册时间:2011/6/9
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

mark一下


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/7/16 14:24:40
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154482 Call, 1 Queries, Processed in 0.015625 second(s),