微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 单片机和linux有什么区别?

单片机和linux有什么区别?

时间:06-03 来源:网络整理 点击:

根据公式计算出显示器的频率:

  * 当HCLK=100MHz时,

  * Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x

  * {(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x

  * {2x(CLKVAL+1)/(HCLK)}]

  * = 60Hz

  * 3. LCDCON5:

  * 设置显示模式为16BPP时的数据格式: 5:6:5

  * 设置HSYNC、VSYNC脉冲的极性(这需要参考具体LCD的接口信号): 反转

  * 半字(2字节)交换使能

  */

  LCDCON1 = (CLKVAL_TFT_320240《《8) | (LCDTYPE_TFT《《5) | \

  (BPPMODE_16BPP《《1) | (ENVID_DISABLE《《0);

  LCDCON2 = (VBPD_320240《《24) | (LINEVAL_TFT_320240《《14) | \

  (VFPD_320240《《6) | (VSPW_320240);

  LCDCON3 = (HBPD_320240《《19) | (HOZVAL_TFT_320240《《8) | (HFPD_320240);

  LCDCON4 = HSPW_320240;

  // LCDCON5 = (FORMAT8BPP_565《《11) | (HSYNC_INV《《9) | (VSYNC_INV《《8) | \

  // (HWSWP《《1);

  LCDCON5 = (FORMAT8BPP_565《《11) | (HSYNC_INV《《9) | (VSYNC_INV《《8) | (VDEN_INV 《《 6) | \

  (HWSWP《《0);

  /*

  * 设置LCD控制器的地址寄存器LCDSADDR1~3

  * 帧内存与视口(view point)完全吻合,

  * 图像数据格式如下:

  * |----PAGEWIDTH----|

  * y/x 0 1 2 239

  * 0 rgb rgb rgb 。。。 rgb

  * 1 rgb rgb rgb 。。。 rgb

  * 1. LCDSADDR1:

  * 设置LCDBANK、LCDBASEU

  * 2. LCDSADDR2:

  * 设置LCDBASEL: 帧缓冲区的结束地址A[21:1]

  * 3. LCDSADDR3:

  * OFFSIZE等于0,PAGEWIDTH等于(240*2/2)

  */

  LCDSADDR1 = ((LCDBUFFER》》22)《《21) | LOWER21BITS(LCDBUFFER》》1);

  LCDSADDR2 = LOWER21BITS((LCDBUFFER+ \

  (LINEVAL_TFT_320240+1)*(HOZVAL_TFT_320240+1)*2)》》1);

  LCDSADDR3 = (0《《11) | (LCD_XSIZE_TFT_320240*2/2);

  /* 禁止临时调色板寄存器 */

  TPAL = 0;

  fb_base_addr = LCDBUFFER;

  bpp = 16;

  xsize = 320;

  ysize = 240;

  }

  ② 描点:

  /*

  * 画点

  * 输入参数:

  * x、y : 象素坐标

  * color: 颜色值

  * 对于16BPP: color的格式为0xAARRGGBB (AA = 透明度),

  * 需要转换为5:6:5格式

  * 对于8BPP: color为调色板中的索引值,

  * 其颜色取决于调色板中的数值

  */

  void PutPixel(UINT32 x, UINT32 y, UINT32 color)

  {

  UINT8 red,green,blue;

  switch (bpp){

  case 16:

  {

  UINT16 *addr = (UINT16 *)fb_base_addr + (y * xsize + x);

  red = (color 》》 19) & 0x1f;

  green = (color 》》 10) & 0x3f;

  blue = (color 》》 3) & 0x1f;

  color = (red 《《 11) | (green 《《 5) | blue; // 格式5:6:5

  *addr = (UINT16) color;

  break;

  }

  case 8:

  {

  UINT8 *addr = (UINT8 *)fb_base_addr + (y * xsize + x);

  *addr = (UINT8) color;

  break;

  }

  default:

  break;

  }

  }

  下面是在Linux的LCD驱动里修改的地方(arch\arm\mach-s3c2440\mach-smdk2440.c):

  /* 320x240 */

  staTIc struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {

  .regs = {

  .lcdcon1 = S3C2410_LCDCON1_TFT16BPP | \

  S3C2410_LCDCON1_TFT | \

  S3C2410_LCDCON1_CLKVAL(0x04),

  .lcdcon2 = S3C2410_LCDCON2_VBPD(1) | \

  S3C2410_LCDCON2_LINEVAL(239) | \

  S3C2410_LCDCON2_VFPD(5) | \

  S3C2410_LCDCON2_VSPW(1),

  .lcdcon3 = S3C2410_LCDCON3_HBPD(36) | \

  S3C2410_LCDCON3_HOZVAL(319) | \

  S3C2410_LCDCON3_HFPD(19),

  .lcdcon4 = S3C2410_LCDCON4_MVAL(13) | \

  S3C2410_LCDCON4_HSPW(5),

  .lcdcon5 = S3C2410_LCDCON5_FRM565 |

  S3C2410_LCDCON5_INVVLINE |

  S3C2410_LCDCON5_INVV |

  S3C2410_LCDCON5_INVVDEN |

  S3C2410_LCDCON5_PWREN |

  S3C2410_LCDCON5_HWSWP,

  },

  .gpccon = 0xaaaa56aa,

  .gpccon_mask = 0xffffffff,

  .gpcup = 0xffffffff,

  .gpcup_mask = 0xffffffff,

  .gpdcon = 0xaaaaaaaa,

  .gpdcon_mask = 0xffffffff,

  .gpdup = 0xffffffff,

  .gpdup_mask = 0xffffffff,

  .fixed_syncs = 1,

  .type = S3C2410_LCDCON1_TFT,

  .width = 320,

  .height = 240,

  .xres = {

  .min = 320,

.max =

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top