📄 ca320240_boot.c
字号:
/*
* $Id: ca320240.c,v 1.111.2.6.4.1 2004/02/06 08:58:59 hzk Exp $
* $Copyright: (c) 2004-2005,Vcom Corp.
* All Rights Reserved.$
*
* ca320240
*/
#include <vxworks.h>
#include <math.h>
#include <stdio.h>
#include "ca320240.h"
/*#include "start_bmp.c"*/
#define LCM_READ_TEST
#define LCM_ENABLE_WAIT
#define LCM_TIME_DELAY /*delay(50);*/
#define LCM_INIT_WAIT delay(500000);
#define LCM_TIMEOUT 0x77ffffff
void delay(unsigned int time)
{
while(time--){};
return;
}
/***********************************************************
写指令代码
cw---要写的指令代码
always return 0;
************************************************************/
int ca320240_pr1(unsigned char cw)
{
#ifdef LCM_ENABLE_WAIT
unsigned char ch;
unsigned int count=0;
unsigned char *ptr=(unsigned char *)CA0320240_CRADDR;
ch=*ptr;
while(ch & 0x40){
ch=*ptr;
count++;
if(count>LCM_TIMEOUT)break;/*reboot(0);*/
}
#else
unsigned char *ptr;
#endif
ptr=(unsigned char *)CA0320240_CWADDR;
*ptr=cw;
LCM_TIME_DELAY
return 0;
}
/***********************************************************
写参数及显示数据
cw---要写的指令代码
always return 0;
************************************************************/
int ca320240_pr2(unsigned char cw)
{
#ifdef LCM_ENABLE_WAIT
unsigned int count=0;
unsigned char ch;
unsigned char *ptr=(unsigned char *)CA0320240_CRADDR;
ch=*ptr;
while(ch & 0x40){
ch=*ptr;
count++;
if(count>LCM_TIMEOUT)break;/*reboot(0); */
}
#else
unsigned char *ptr;
#endif
ptr=(unsigned char *)CA0320240_DWADDR;
*ptr=cw;
LCM_TIME_DELAY
return 0;
}
/***********************************************************
读参数及显示数据
cw---要写的指令代码
return read data;
************************************************************/
unsigned char ca320240_pr3()
{
#ifdef LCM_ENABLE_WAIT
unsigned int count=0;
unsigned char ch;
unsigned char *ptr=(unsigned char *)CA0320240_CRADDR;
ch=*ptr;
while(ch & 0x40){
ch=*ptr;
count++;
if(count>LCM_TIMEOUT)break;/*reboot(0); */
}
#else
unsigned char ch;
unsigned char *ptr;
#endif
ptr=(unsigned char *)CA0320240_DRADDR;
ch=*ptr;
LCM_TIME_DELAY
return ch;
}
#ifdef LCM_READ_TEST
#if defined(PRJ_BUILD)
void lcd_write_test()
{
unsigned char *ptr;
ca320240_pr1(CA320240_CSRW);
ca320240_pr2(SAD2L);/*设置指针寄存器低8位*/
ca320240_pr2(SAD2H);/*设置指针寄存器高8位*/
while(1){
ptr=(unsigned char *)CA0320240_CWADDR;
*ptr=CA320240_CSRW;
LCM_TIME_DELAY
ptr=(unsigned char *)CA0320240_DWADDR;
*ptr=SAD2L;
LCM_TIME_DELAY
ptr=(unsigned char *)CA0320240_DWADDR;
*ptr=SAD2H;
LCM_TIME_DELAY
}
}
void lcd_read_test()
{
unsigned char ch;
unsigned int count=0;
unsigned char *ptr=(unsigned char *)CA0320240_CRADDR;
ch=*ptr;
while(1){
/*printf("%x\n",ch);*/
LCM_TIME_DELAY
ch=*ptr;
count++;
}
}
#define LCD_RW_TEST
void lcd_rw_test()
{
int i;
unsigned char ch;
#ifdef LCD_RW_TEST
while(1){
#endif
/*CSRW*/
ca320240_pr1(CA320240_CSRW);
ca320240_pr2(SAD2L);/*设置指针寄存器低8位*/
ca320240_pr2(SAD2H);/*设置指针寄存器高8位*/
/*MWRITE*/
ca320240_pr1(CA320240_MWRITE);
#ifndef LCD_RW_TEST
printf("\n");
#endif
for(i=0;i<256;i++){
ch=i;
ca320240_pr2(ch);
#ifndef LCD_RW_TEST
printf("%x ",ch);
#endif
}
/*CSRW*/
ca320240_pr1(CA320240_CSRW);
ca320240_pr2(SAD2L);/*设置指针寄存器低8位*/
ca320240_pr2(SAD2H);/*设置指针寄存器高8位*/
/*MREAD*/
ca320240_pr1(CA320240_MREAD);
#ifndef LCD_RW_TEST
printf("\n");
#endif
for(i=0;i<256;i++){
ch=ca320240_pr3(ch);
#ifndef LCD_RW_TEST
printf("%x ",ch);
#endif
}
#ifndef LCD_RW_TEST
printf("\n");
#endif
#ifdef LCD_RW_TEST
}
#endif
}
#endif
#endif
/***********************************************************
ca320240清屏
************************************************************/
int ca320240_clear()
{
unsigned int i=32768;
/*CSRDIR 右移*/
ca320240_pr1(CA320240_CSDIR_RIGHT);
/*CSRW*/
ca320240_pr1(CA320240_CSRW);
ca320240_pr2(0x00);/*设置指针寄存器低8位*/
ca320240_pr2(0x00);/*设置指针寄存器高8位*/
/*MWRITE*/
ca320240_pr1(CA320240_MWRITE);
while(i--){
ca320240_pr2(0x00);
}
return 0;
}
/***********************************************************
ca320240初始化
************************************************************/
int ca320240_init()
{
LCM_INIT_WAIT
/*SYSTEM SET*/
ca320240_pr1(CA320240_SYSTEM_SET);/*SYSTEM SET指令代码*/
ca320240_pr2(0x30);
ca320240_pr2(0x87);
ca320240_pr2(0x07);
ca320240_pr2(CR);
ca320240_pr2(LCD_TCR);
ca320240_pr2(LF);
ca320240_pr2(APL);
ca320240_pr2(APH);
LCM_INIT_WAIT
/*SCROLL*/
ca320240_pr1(CA320240_SCROLL);/*SCROLL指令代码*/
ca320240_pr2(SAD1L);
ca320240_pr2(SAD1H);
ca320240_pr2(SL1);
ca320240_pr2(SAD2L);
ca320240_pr2(SAD2H);
ca320240_pr2(SL2);
ca320240_pr2(SAD3L);
ca320240_pr2(SAD3H);
ca320240_pr2(SAD4L);
ca320240_pr2(SAD4H);
LCM_INIT_WAIT
/*HDOT SCR*/
ca320240_pr1(CA320240_HDOT_SCR);/*HDOT SCR*/
ca320240_pr2(0x00);/*写入参数*/
LCM_INIT_WAIT
/*OVLAY*/
ca320240_pr1(CA320240_OVLAY);/*OVLAY*/
ca320240_pr2(0x00);/*一,三区为文本属性,二重“或"合成*/
LCM_INIT_WAIT
/*DISP ON开显示*/
ca320240_pr1(CA320240_DISP_ON);/*DISP ON*/
ca320240_pr2(0x10);/*二开显示,0101 0100,光标关显示*/
LCM_INIT_WAIT
return 0;
}
void put_bmp()
{
unsigned int i,j;
int pos=0;
unsigned char *ptr=(unsigned char *)(0xfff80000+0x7d000);
/*CSRDIR 右移*/
ca320240_pr1(CA320240_CSDIR_RIGHT);
/*清除绘画屏*/
/*CSRW*/
ca320240_pr1(CA320240_CSRW);
ca320240_pr2(SAD2L);/*设置指针寄存器低8位*/
ca320240_pr2(SAD2H);/*设置指针寄存器高8位*/
/*MWRITE*/
ca320240_pr1(CA320240_MWRITE);
for(i=0;i<LF;i++){
ca320240_pr1(CA320240_CSRW);
pos=SAD2+i*AP;
ca320240_pr2((pos & 0xff));/*设置指针寄存器低8位*/
ca320240_pr2(((pos>>8) & 0xff));/*设置指针寄存器高8位*/
/*MWRITE*/
ca320240_pr1(CA320240_MWRITE);
for(j=0;j<AP;j++){
ca320240_pr2(*ptr++);
}
}
#if 0
while(1){
ca320240_pr2(0x55);
ca320240_pr2(0xaa);
}
#endif
return ;
}
/***********************************************************
输出开机界面
************************************************************/
void graphics_version()
{
put_bmp();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -