سلام
بنده می خواهم به کمک 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++); } } //============================================================================= // //=============================================================================
امیدوارم یکی بتونه مشکل را حل کنه!!!
دیدگاه