硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

硬件设计原理图

功能介绍

ADSP-EDU-BF53x 开发板上的液晶屏为 480*272 尺寸真彩 TFT 液晶屏,其型号为 WXCAT43-TG3#001R。

WXCAT43-TG3#001R 为 24Bit 的液晶屏,数据输入格式为 RGB888。ADSP-BF53x 的 PPI 接口只有 16 根数据线,所以接入方式为 RGB565,将 RGB 的低位数据线直接接地,以匹配数据线的不足。

WXCAT43-TG3#001R 的背光开关由 CPLD 控制,其映射于 CPLD 的 DEVICE_OE 寄存器。其背光亮度由 Timer0控制,通过配置 Timer0 输出 PWM 脉冲的脉宽来改变亮度。

DEVICE_OE 寄存器(读/写):
DEVICE_OE 寄存器地址:0x20320000
DEVICE_OE 寄存器设置硬件设备上一些控制管脚的电平状态。

DEVICE_OE 寄存器位功能:

LCDBK_OE:液晶屏背光控制位
1:关闭 TFT 液晶屏背光
0:使能 TFT 液晶屏背光

PPI_SET1~0:PPI 选择位
00:选通 CMOS PPI 时钟,使能 CMOS
01:选通 TFT PPI 时钟

选通 板卡为扩展接口的 PPICLK 提供时钟
1x:选通 PPI 时钟由扩展接口输入

选通液晶屏,需将 LCDBK_OE 位设置为 0,PPI_SET0 位设置为 1,PPI_SET1 位设置为 0。

Timer0 寄存器配置:
TIMER0_CONFIG 寄存器:配置 Timer 工作模式。
TIMER0_WIDTH 寄存器:配置脉冲宽度。
TIMER0_PERIOD 寄存器:配置波形周期。

硬件连接示意图

代码实现功能

代码实现了通过文件系统读出一幅 BMP24 格式 480*272 点阵的位图图片数据,将数据做转换后变为 RGB888格式数据,再将 RGB888 格式数据转为 RGB565 格式,通过 PPI 接口使用 PPIDMA 将数据送给液晶屏。通过
Init_Timers0 函数可以配置背光亮度。代码中的 color_bar 函数,可以产生彩条数据,在液晶屏上产生彩条。

调试步骤

1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好。
2. 先给 ADSP-EDU-BF53x 开发板上电,再为仿真器(ICE)上电。
3. 运行 VisualDSP++ 5.0 软件,选择合适的 BF533 的 session 将仿真器与软件连接。
4. 加载 VisualDSP++ 5.0 工程文件 BF53x_TFT_480_272.dpj,编译并全速运行。

测试结果

板卡上的 TFT 显示一幅卡通图像。

液晶屏上显示的 BMP24 文件的图像。

程序源码

CPU.C

#include <cdefBF533.h>

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_Timers0(int dat)
{
*pTIMER0_CONFIG = 0x0019;
*pTIMER0_WIDTH = dat;
*pTIMER0_PERIOD = 2000;
}

void Enable_Timers0(void)
{
*pTIMER_ENABLE|= 0x0001;
asm(“ssync;”);
}

void Disable_Timers0(void)
{
*pTIMER_DISABLE |= 0x0001;
}

TFF_lcd.c

#include <cdefBF533.h>

section(“sdram0_bank1”) unsigned char DisplayBuffer[272][1440] ;
section(“sdram0_bank1”) unsigned char DisplayBuffer_565[272][1440] ;
section(“sdram0_bank1”) unsigned char TempBuffer_img[272][1440] ;
section(“sdram0_bank1”) unsigned char Inputdata[391734];

void InitDMA(void)
{
int addr;
addr = &DisplayBuffer_565;
addr -= 1920;
*pDMA0_START_ADDR = addr;

*pDMA0_X_COUNT = 480;
*pDMA0_X_MODIFY = 2;
*pDMA0_Y_COUNT = 286;
*pDMA0_Y_MODIFY = 2;
*pDMA0_CONFIG = 0x1034;

}

void InitPPI(void)
{
*pPPI_CONTROL = 0x781e;
*pPPI_DELAY = 0;
*pPPI_COUNT = 479;
*pPPI_FRAME = 286;
}

void InitTimer(void)
{
*pTIMER1_PERIOD = 525;
*pTIMER1_WIDTH = 41;
*pTIMER1_CONFIG = 0x00a9;
*pTIMER2_PERIOD = 150150;
*pTIMER2_WIDTH = 5250;
*pTIMER2_CONFIG = 0x00a9;
}

void PPI_TMR_DMA_Enable(void)
{
*pDMA0_CONFIG |= 0x1;
asm(“ssync;”);
InitTimer();
*pPPI_CONTROL |= 0x1;
asm(“ssync;”);
*pTIMER_ENABLE|= 0x0006;
asm(“ssync;”);
}

void PPI_TMR_DMAR_Disable(void)
{
*pDMA0_CONFIG &= (~0x1);
*pPPI_CONTROL &= (~0x1);
}

void bgrtorgb24(void)
{
int i,j;
int a,b,c;
for(i=0;i<272;i++)
{
for(j=0;j<1440;j++)
{
TempBuffer_img[i][j] = Inputdata[i1440+j+54];
}
}
for(i=0;i<272;i++)
{
for(j=0;j<480;j++)
{
a = TempBuffer_img[i][j
3];
b = TempBuffer_img[i][j3+1];
c = TempBuffer_img[i][j
3+2];
TempBuffer_img[i][j3] = c;
TempBuffer_img[i][j
3+1] = b;
TempBuffer_img[i][j*3+2] = a;
}
}

for(i=0;i<272;i++)
{for(j=0;j<1440;j++){DisplayBuffer[i][j] = (TempBuffer_img[271-i][j]); }
}

}

void color_bar(void)
{
int i,j;

 for(i=0;i<272;i++)
{for(j=0;j<40;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0x00;DisplayBuffer[i][j*3+2] = 0x00;}for(j=40;j<80;j++){DisplayBuffer[i][j*3+0] = 0xff;DisplayBuffer[i][j*3+1] = 0x00;                                                                                                                                                                                                                                                                                                            DisplayBuffer[i][j*3+1] = 0x00;DisplayBuffer[i][j*3+2] = 0x00;//red}for(j=80;j<120;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0x00;//green}for(j=120;j<160;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0x00;DisplayBuffer[i][j*3+2] = 0xff;//blue}for(j=160;j<200;j++){DisplayBuffer[i][j*3+0] = 0xff;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0x0;//red+green}for(j=200;j<240;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0xff;//red+blue}for(j=240;j<280;j++){DisplayBuffer[i][j*3+0] = 0xff;DisplayBuffer[i][j*3+1] = 0x00;DisplayBuffer[i][j*3+2] = 0xff;//green+blue}for(j=280;j<320;j++){DisplayBuffer[i][j*3+0] = 0xff;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0xff;}for(j=320;j<360;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0x00;//green}for(j=360;j<400;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0x00;DisplayBuffer[i][j*3+2] = 0xff;//blue}for(j=400;j<440;j++){DisplayBuffer[i][j*3+0] = 0xff;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0x0;//red+green}for(j=440;j<480;j++){DisplayBuffer[i][j*3+0] = 0x00;DisplayBuffer[i][j*3+1] = 0xff;DisplayBuffer[i][j*3+2] = 0xff;//red+blue}}

}

void RGB888_RGB565(unsigned char *src, int src_len, unsigned char *dst)
{
int i = 0;
int j = 0;

if (src_len % 3 != 0)
{return;
}
for (i = 0; i < src_len; i += 3)
{dst[j+1] = src[i+2] &0xf8; //B dst[j+1] |= ((src[i+1]>>5) & 0x07);//GHdst[j] = ((src[i+1]<<3) & 0xe0);  //GL  dst[j] |= ((src[i]>>3) &0x1f);    //rj += 2;  }

}

Main.c

#include <stdio.h>
#include <cdefBF533.h>

extern unsigned char DisplayBuffer[272][1440] ;
extern unsigned char DisplayBuffer_565[272][1440] ;
extern unsigned char Inputdata[];

void main(void)
{
FILE *fp;
int lenth;
Set_PLL(16,4);
Init_EBIU();
Init_SDRAM();

LCDBK_Disable();fp = fopen("../1.bmp", "rb");
lenth = fread(Inputdata, 1, 391734, fp);
fclose(fp);bgrtorgb24();

// color_bar();

RGB888_RGB565(DisplayBuffer,391680,DisplayBuffer_565);InitDMA();
InitPPI();
InitTimer();
PPI_TMR_DMA_Enable();
LCD_Enable();
Init_Timers0(1999);//1~1999 控制背光亮度
Enable_Timers0();
LCDBK_Enable();
while(1);

}

ADI Blackfin DSP处理器-BF533的开发详解20:4.3寸LCD液晶屏的设计与应用(含源码)相关推荐

  1. ADI Blackfin DSP处理器-BF533的开发详解1:软件和硬件的准备

    BF533是ADI Blackfin系列DSP处理器里的最经典型号,这个DSP我用了20年,单就这一颗DSP来讲,我相信国内应该没有比我更资深的了,下面就来说一说这颗DSP. 这颗IC是Blackfi ...

  2. ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

    我们从最基础的GPIO开始,先讲外设,这玩意不管是单片机,还是ARM,又或是FPGA,甚至SOC的芯片,都有GPIO,有共性,就好理解,让我们看看在ADI的DSP里头,GPIO是怎么一回事吧. 硬件准 ...

  3. ADI Blackfin DSP处理器-BF533的开发详解58:DSP控制ADXL345三轴加速度传感器的应用(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度 ...

  4. ADI Blackfin DSP处理器-BF533的开发详解60:DSP控制ADXL345三轴加速度传感器-电子水平仪(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度 ...

  5. ADI Blackfin DSP处理器-BF533的开发详解21:RTC实时时钟的原理及应用(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-BF53x ...

  6. ADI Blackfin DSP处理器-BF533的开发详解55:CVBS输入-DSP和ADV7180的应用详解(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 CVBS IN 视频输入 硬件实现原理 CVB ...

  7. ADI Blackfin DSP处理器-BF533的开发详解25:USB接口设计(含源代码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 跟网口一样,USB这 ...

  8. ADI Blackfin DSP处理器-BF533的开发详解80:uClinux在BF上的应用详解

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 Blackfin可以跑操作系统,因为他作为一个 ...

  9. ADI Blackfin DSP处理器-BF533的开发详解15:RS232串口的实现(含源代码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 实现原理 ADSP-EDU-B ...

最新文章

  1. Krona绘制物种或功能组成圈图
  2. java. xerces转xml_Xerces -C++遇到的xml编码转换问题
  3. ORACLE表空间的相关操作
  4. SQL 每行随机产生数字
  5. jquery简单实现点击弹出层效果实例
  6. 各浏览器的Hack写法【转】
  7. java基础题目的网站_Java基础题目
  8. 2021-10-28 ACWING826 单链表
  9. 互联网摸鱼日报(2022-10-17)
  10. AutoRunner检查点之校验消息框
  11. Matlab中单元数组和结构数组
  12. 从小学4年级的数学课开始解释线性回归
  13. apple pencil二代值不值得买?iPad电容笔测评
  14. 道德经 道可道,非常道。
  15. Android App内截屏监控及涂鸦功能实现
  16. 冰刃-删除顽固文件的利器!
  17. 少儿学编程好还是奥术好
  18. ubuntu 14.04源更新(sources.list)
  19. 《Uncertainty-aware Joint Salient Object and Camouflaged Object Detection》—CVPR2021—SOD+COD
  20. python下载批量图片

热门文章

  1. 离线安装/断网安装python第三方库
  2. [BI] 搭建开源BI平台Superset,连接Oracle数据库
  3. 区块链的发展及优缺点
  4. ARM体系结构与编程总结
  5. 理论篇五: 如何设计游戏棋牌平台 - 服务端 - 棋牌设计 - 一切皆步骤
  6. 士兵职业基本适应性测试软件,士兵职业基本适应性检测系统 类型1.2.3怎么分...
  7. android中监听的作用,Android里的AdapterView中OnItemClickListener监听器四个参数的含义...
  8. 多维度深入剖析QLC SSD硬件延迟的来源
  9. Python技法之简单递归下降Parser的实现方法
  10. 单场淘汰制场次计算方法_球类运动比赛的编排方法