⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d0acc9a97d9e001d14fdda4a5e9541d7

📁 NIOSII的液晶显示ip 核
💻
字号:
//BitBlt.c#include "system.h"//#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include <sys/alt_cache.h>#include "anywhere_avalon_lcd_regs.h"#include "anywhere_avalon_bitblt_regs.h"#define TEST_TIMES    4000int main (void) __attribute__ ((weak, alias ("alt_main")));//初始化LCD子程序//这里参考了第七章的设计程序void init_LCD(alt_u32 framebuffer){  alt_u32 nBGOffset;  alt_u32 nFG1Offset;  alt_u16 nBGWidth;  alt_u16 nBGHeight;  alt_u16 nFG1Width;  alt_u16 nFG1Height;  alt_u16 nFG1PosX;  alt_u16 nFG1PosY;  alt_u8  nFG1Alpha;  alt_u16 nFG1TransColor;  alt_16 nStepX;  alt_16 nStepY;  nBGOffset=framebuffer;  nBGWidth=640;  nBGHeight=480;  nFG1Offset=nBGOffset+nBGWidth*nBGHeight*2;  nFG1Width=80;  nFG1Height=80;  nFG1PosX=100;  nFG1PosY=100;  nFG1Alpha=128;  nFG1TransColor=0x1234;  nStepX=2;  nStepY=2;    //initialize LCD Controller  //Enable 2 layers  IOWR_ANYWHERE_AVALON_LCD_LAYER_EN(CONTROLLER_BASE,0x03);  //Set read mode  IOWR_ANYWHERE_AVALON_LCD_READ_MODE(CONTROLLER_BASE,0x03);  //Enalbe transparency  IOWR_ANYWHERE_AVALON_LCD_TRANS_EN(CONTROLLER_BASE,0x02);  //Set layer start address  IOWR_ANYWHERE_AVALON_LCD_BG_STARTADDR(CONTROLLER_BASE,nBGOffset);  IOWR_ANYWHERE_AVALON_LCD_FG1_STARTADDR(CONTROLLER_BASE,nFG1Offset);  //Set foreground layer 1  IOWR_ANYWHERE_AVALON_LCD_FG1_WIDTH(CONTROLLER_BASE,nFG1Width);  IOWR_ANYWHERE_AVALON_LCD_FG1_HEIGHT(CONTROLLER_BASE,nFG1Height);  IOWR_ANYWHERE_AVALON_LCD_FG1_X(CONTROLLER_BASE,nFG1PosX);  IOWR_ANYWHERE_AVALON_LCD_FG1_Y(CONTROLLER_BASE,nFG1PosY);  IOWR_ANYWHERE_AVALON_LCD_FG1_ALPHA(CONTROLLER_BASE,nFG1Alpha);  IOWR_ANYWHERE_AVALON_LCD_FG1_TRANSCOLOR(CONTROLLER_BASE,nFG1TransColor);  //Enable LCD Controller  IOWR_ANYWHERE_AVALON_LCD_CTRL(CONTROLLER_BASE,0x01);}//纯软件的随机块填充子程序void solid_fill(alt_u32 framebuffer){  alt_u32 framebuffer_offset;     framebuffer_offset = framebuffer;    alt_u32 data_offset;  alt_u32 x_pos;  alt_u32 y_pos;  alt_u32 width;  alt_u32 height;  alt_u16 color;    int i,j;  for(i = 0; i < TEST_TIMES; i++ )  {    color = rand();    x_pos = rand() % 640;    y_pos = rand() % 480;    width = (rand() % 640) % (640 - x_pos);    height = (rand() % 480) % (480 - y_pos);      data_offset = framebuffer_offset;    data_offset += (x_pos + y_pos * 640) * 2;        for(j = 0; j < height; j++)    {      memset(data_offset, color, width);      data_offset += 640 * 2;     }    alt_dcache_flush_all();   }}//BitBlt IP模块的随机块填充子程序void solid_fill_with_HA(alt_u32 framebuffer){  alt_u32 framebuffer_offset;     framebuffer_offset = framebuffer;  alt_u32 data_offset;  alt_u32 x_pos;  alt_u32 y_pos;  alt_u32 width;  alt_u32 height;    alt_u16 color;  int i,j;  for(i = 0; i < TEST_TIMES; i++ )  {    color = rand();    x_pos = rand() % 640;    y_pos = rand() % 480;    width = (rand() % 640) % (640 - x_pos);    height = (rand() % 480) % (480 - y_pos);      data_offset = framebuffer_offset;    data_offset += (x_pos + y_pos * 640) * 2;       IOWR_ANYWHERE_AVALON_BITBLT_DEST_START_ADR(ANYWHERE_AVALON_BITBLT_0_BASE,data_offset); //设置BitBLT的目的开始地址    IOWR_ANYWHERE_AVALON_BITBLT_DEST_MEM_OFFSET(ANYWHERE_AVALON_BITBLT_0_BASE,640); //设置BitBLT的目的偏移量    IOWR_ANYWHERE_AVALON_BITBLT_WIDTH(ANYWHERE_AVALON_BITBLT_0_BASE,width); //设置BitBLT的块宽度    IOWR_ANYWHERE_AVALON_BITBLT_HEIGHT(ANYWHERE_AVALON_BITBLT_0_BASE,height); //设置BitBLT的块高度    IOWR_ANYWHERE_AVALON_BITBLT_FOREGROUND(ANYWHERE_AVALON_BITBLT_0_BASE,color); //设置BitBLT的块的颜色(前景层)    IOWR_ANYWHERE_AVALON_BITBLT_CMD(ANYWHERE_AVALON_BITBLT_0_BASE,0x03); //向BitBLT IP发送写命令  }}//延时函数int delay(int time){    volatile int i;    i = 0;    while (i<time)    {      i++;    }  return(0);}//main函数int alt_main (void){  alt_u8 led = 0x2;  alt_u8 dir = 0;    alt_u32 framebuffer_offset;     framebuffer_offset = EXT_SSRAM_BASE;    init_LCD(framebuffer_offset);    while (1)   {    solid_fill(framebuffer_offset);    delay(10000000);    solid_fill_with_HA(framebuffer_offset);    delay(10000000);  }  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -