سلام
بنده می خواهم به کمک arm این آی سی را ، راه اندازی کنم ولی به مشکلات زیادی خردم!!!
می شه گفت اینترنت را زیر و رو کردم ولی کدی که بتوانم با arm و به صورت 16 بیتی با این آی سی کار کنم پیدا نکردم البته خودم کتابخانه ها را تغییر دادم ولی با زهم جواب نداد!!!
در واقع تقریبا وقتی رنگ بالای 0xf000 را به آی سی می دهم آی سی هنگ می کند ولی با کد رنگ های پایین مشکلی ندارم اینم نمنه کدی که درست کردم
امیدوارم یکی بتونه مشکل را حل کنه!!!
بنده می خواهم به کمک arm این آی سی را ، راه اندازی کنم ولی به مشکلات زیادی خردم!!!
می شه گفت اینترنت را زیر و رو کردم ولی کدی که بتوانم با arm و به صورت 16 بیتی با این آی سی کار کنم پیدا نکردم البته خودم کتابخانه ها را تغییر دادم ولی با زهم جواب نداد!!!
در واقع تقریبا وقتی رنگ بالای 0xf000 را به آی سی می دهم آی سی هنگ می کند ولی با کد رنگ های پایین مشکلی ندارم اینم نمنه کدی که درست کردم
کد:
#include "lpc23xx.h"
#include "ssd1963_arm_2368.h"
#include "font.h"
unsigned int VDP=479; //Vertical Display Period
unsigned int VT=530; //Vertical Total
unsigned int VPS=24; // LFRAME Pulse Start Position
unsigned int FPS=23; //Vertical Display Period Start Positio
unsigned char VPW=3; // LFRAME Pulse Width
unsigned int HDP=799; //Horizontal Display Period
unsigned int HT=1000; //Horizontal Total
unsigned int HPS=51; //LLINE Pulse Start Position
unsigned int LPS=3; // Horizontal Display Period Start Position
unsigned char HPW=8; // LLINE Pulse Width
//=============================================================================
// Write command to SSD1963
//=============================================================================
__asm void wait()
{
nop
BX lr
}
void LCD_WriteCommand(unsigned long cmd) {
FIO1CLR =0xffffffff;
FIO1SET2=cmd;
Set_nRd;
Clr_Cs;Clr_nWr;Clr_Rs;
wait();
Set_nWr;Set_Cs;Set_Rs;
};
void LCD_WriteData(unsigned long data) {
FIO1CLR =0xffffffff;
FIO1SETU=data;
Set_Rs;Set_nRd
Clr_nWr;Clr_Cs;
wait();
Set_nWr;Set_Cs;
};
void SSD1963_Init (void)
{
volatile unsigned int dly;
Set_Rst;
Set_Cs; // SSD1963 is not selected by default
Set_nRd;
Set_nWr;
Clr_Rst;
for(dly = 0; dly < 1000; dly++);
Set_Rst; // release from reset state to sleep state
LCD_WriteCommand(SSD1963_SOFT_RESET);
LCD_WriteCommand(0xe2);
LCD_WriteData(0x23);
LCD_WriteData(0x02); // Divider M = 2, PLL = 360/(M+1) = 120MHz
LCD_WriteData(0x4); // Validate M and N values
LCD_WriteCommand(0xE0); // Start PLL command
LCD_WriteData(0x01); // enable PLL
for(dly = 0; dly < 100000; dly++); // wait stablize
LCD_WriteCommand(0xE0); // Start PLL command again
LCD_WriteData(0x03); // now, use PLL output as system clock
for(dly = 0; dly < 100000; dly++);
LCD_WriteCommand(0x01); // Soft reset
for(dly = 0; dly < 100000; dly++);
LCD_WriteCommand(0xE6);
LCD_WriteData(0x04);
LCD_WriteData(0x93);
LCD_WriteData(0xe0);
LCD_WriteCommand(0xB0);
LCD_WriteData(0x0); // set 18-bit for 7" panel TY700TFT800480
LCD_WriteData(0x0); // set TTL mode
LCD_WriteData((HDP>>8)&0xff); //Set panel size
LCD_WriteData(HDP&0xff);
LCD_WriteData((VDP>>8)&0xff);
LCD_WriteData(VDP&0xff);
LCD_WriteData(0x00); //RGB sequence
LCD_WriteCommand(0x00B4); //HSYNC
Clr_Cs;
LCD_WriteData((HT>>8)&0xff);
LCD_WriteData(HT&0X00FF);
LCD_WriteData((HPS>>8)&0X00FF);
LCD_WriteData(HPS&0X00FF);
LCD_WriteData(HPW);
LCD_WriteData((LPS>>8)&0X00FF);
LCD_WriteData(LPS&0X00FF);
LCD_WriteData(0x00);
LCD_WriteCommand(0xb6);
LCD_WriteData((VT>>8)&0xff);
LCD_WriteData(VT&0xff);
LCD_WriteData((VPS>>8)&0X00FF);
LCD_WriteData(VPS&0X00FF);
LCD_WriteData(VPW);
LCD_WriteData((FPS>>8)&0X00FF);
LCD_WriteData(FPS&0X00FF);
LCD_WriteCommand(0x00BA);
LCD_WriteData(0x0005);//0x000F); //GPIO[3:0] out 1
LCD_WriteCommand(0x00B8);
LCD_WriteData(0x0007); //GPIO3=input, GPIO[2:0]=output
LCD_WriteData(0x0001); //GPIO0 normal
LCD_WriteCommand(0x36);
LCD_WriteData(0x00);
LCD_WriteCommand(0xF0);
LCD_WriteData(0x03); //16-bit(565 format) data for 16bpp PIC32MX only
for(dly = 0; dly < 100000; dly++);
SSD1963_ClearScreen(0xf800);
LCD_WriteCommand(0x0029); //display on
LCD_WriteCommand(0x00BE); //set PWM for B/L
LCD_WriteData(0x0006);
LCD_WriteData(0x0080);
LCD_WriteData(0x0001);
LCD_WriteData(0x00f0);
LCD_WriteData(0x0000);
LCD_WriteData(0x0000);
LCD_WriteCommand(0x00d0);//&Eacute;è&Ouml;&Atilde;¶¯&Igrave;¬±³¹â&iquest;&Oslash;&Ouml;&AElig;&Aring;&auml;&Ouml;&Atilde;
LCD_WriteData(0x000d);
}
//=============================================================================
//
//=============================================================================
void SSD1963_SetArea(unsigned int sx, unsigned int ex, unsigned int sy, unsigned int ey)
{
LCD_WriteCommand(0x2A);// SSD1963_SET_COLUMN_ADDRESS
LCD_WriteData((sx >> 8) & 0xFF);
LCD_WriteData((sx >> 0) & 0xFF);
LCD_WriteData((ex >> 8) & 0xFF);
LCD_WriteData((ex >> 0) & 0xFF);
LCD_WriteCommand(SSD1963_SET_PAGE_ADDRESS);
LCD_WriteData((sy >> 8) & 0xFF);
LCD_WriteData((sy >> 0) & 0xFF);
LCD_WriteData((ey >> 8) & 0xFF);
LCD_WriteData((ey >> 0) & 0xFF);
}
//=============================================================================
// Fill area of specified color
//=============================================================================
void SSD1963_FillArea(unsigned int sx, unsigned int ex, unsigned int sy, unsigned int ey, unsigned long color)
{
int i;
SSD1963_SetArea(sx, ex, sy, ey);
LCD_WriteCommand(SSD1963_WRITE_MEMORY_START);
for(i = 0; i < ((ex-sx+1)*(ey-sy+1)); i++)
{
LCD_WriteData(color);
}
}
//=============================================================================
// Fills whole screen specified color
//=============================================================================
void SSD1963_ClearScreen(unsigned long color)
{
unsigned int l=800,w;
LCD_WriteCommand(0x002A);
LCD_WriteData(0);
LCD_WriteData(0);
LCD_WriteData(HDP>>8);
LCD_WriteData(HDP&0x00ff);
LCD_WriteCommand(0x002b);
LCD_WriteData(0);
LCD_WriteData(0);
LCD_WriteData(VDP>>8);
LCD_WriteData(VDP&0x00ff);
LCD_WriteCommand(0x002c);
while(l--)
{
for(w=0;w<480;w++)
{
LCD_WriteData(color);
}
}
}
//=============================================================================
//
//=============================================================================
void GLCD_SetPixel(int x, int y, unsigned long color)
{
LCD_WriteCommand(0x002A);
LCD_WriteData(x>>8);
LCD_WriteData(x&0x00ff);
LCD_WriteData(479>>8);
LCD_WriteData(479&0x00ff);
LCD_WriteCommand(0x002b);
LCD_WriteData(y>>8);
LCD_WriteData(y&0x00ff);
LCD_WriteData(271>>8);
LCD_WriteData(271&0x00ff);
LCD_WriteCommand(0x002c);
LCD_WriteData(color);
}
void LCD_SetBacklight(unsigned int intensity)
{
LCD_WriteCommand(0xBE); // Set PWM configuration for backlight control
LCD_WriteData(0x0E); // PWMF[7:0] = 2, PWM base freq = PLL/(256*(1+5))/256 =
LCD_WriteData(intensity); // Set duty cycle, from 0x00 (total pull-down) to 0xFF
LCD_WriteData(0x01); // PWM enabled and controlled by host (mcu)
LCD_WriteData(0xf0);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
}
void lcd_putchar(char character,int x,int y,unsigned int color)
{
int _x=x+8,_y=y+16,x_=x,y_=y;
character=character-32;
for(y=y_;y<_y;y++)
for(x=x_;x<_x;x++)
if(font[character][y]>>x&1==1)
GLCD_SetPixel(x, y, 0);
else
GLCD_SetPixel(x, y, color);
}
void lcd_pic(int x,int y,const unsigned short *pointer)
{
int _x=240,_y=320,x_=x,y_=y;
unsigned long color;
for(y=0;y<_y;y++)
for(x=0;x<_x;x++)
{
color=(unsigned long)*pointer++;
if(color>0xf000)color=0xf000;
GLCD_SetPixel(x, y,color&0xff);//(unsigned long)*pointer++);
}
}
//=============================================================================
//
//=============================================================================
امیدوارم یکی بتونه مشکل را حل کنه!!!





دیدگاه