Keilde port tanımlama (Exp2368-S1D13742) TFT LCD sürmek için

Başlatan computerboy, 17 Aralık 2010, 11:43:37

computerboy

Arkadaşlar elimde LPC2368 expkits seti var sette tft lcd' yi sürmek için Epson S1D13742 grafik sürücüsü lcd olarakta Sharp LQ043K3146 kullanılmış hali hazırda kod yok c dilini az çok biliyorum bu lcd'yi sürmek için nasıl bir yol izlemeliyim aşama aşama anlatan bir kaynak biliyormusunuz?  Yada şu kodlar üzerinden çalışmaya başlayabilirsin gibi önerisi olan varsa çok güzel olur.

Keil Uvision 4 kullanıyorum.

Datasheet ve örnek kod: http://www.4shared.com/dir/dkzk_PfF/Sharp_LCD.html

serdararikan

microchip application library içinde 24f ve 32f serileri ile epson driver ic ler için uygulamalar mevcut.eğer lpc ile bir portu set-reset edebiliyorsanız olay bitmiş demektir.librarydeki örnekleri lpc ye uyarlarsınız olur biter.yarım saatinizi alır.

teknikelektronikci

örnek kod olmamasi sacma kiti aldiginiz yere bence mesaj gönderin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

cetinkaya

benim bildigim expkit te 2138 var 2368 i istege göremi yapiyorlar ?

computerboy

Evet özel sipariş üzerine LPC1768 ve LPC2368 'i yapıyorlar. Kodlar henüz hazır değil ama hazır olunca verecek göktüğ hocam.

Serdararikan hocam biraz araştırdım sizin dediğiniz kodlar bu kodlarmı ?

http://www.4shared.com/document/MKO4Jbms/S1D13748_c.html?

fatihkuzucu

Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

computerboy

Arkadaşlar LCD'yi çalıştırmak için kodu buldum ama portları tanımlamayı bir türlü beceremedim. aşağıda linke ekliyorum bir bakarsanız sevinirim.
Port tanımlamaları io.c ve io.h dosyalarının içinde anladığım kadarı ile LCD bağlantı şeması ise EXLPC2368_V1.1 adlı pdf dosyasında.

birde şu şekilde hata veriyor .\EXE\EPSONGUI.axf: Error: L6218E: Undefined symbol WriteData (referred from s1d13742.o).

bu hatayı bulmak için s1d13742.c dosyasının içindeki WriteData komutunun işleyiş biçimini inceledim ama sorunu anlayamadım nasıl çözebilirim.
yardımlarınız için şimdiden teşekkür ederim.


http://www.4shared.com/file/JIdw0IEM/EPSON.html

computerboy

#7
"io.h" dosyasının içeriği

#ifndef IO_H
#define IO_H
#include "type.h"
//#define NULL 0
#define __inline__
#define MAX_MEM_SIZE      (768*1024)
#define MAX_REG_SIZE      (768*1024)

#define EPSON_CS      4
#define EPSON_WR      3
#define EPSON_RD      2
#define EPSON_DC      1    

#define PORTC_DATA       0         //data bit 0 is at data15
#define PORT3_CS      0x00000001 //P2.0
#define PORT3_DC      0x00000002 //P2.1
#define PORT3_RD      0x00000008 //P2.3
#define PORT3_WR      0x00000004 //P2.2
//#define EPSON_RESET      0x00000001 //P3.0

#define LED1ON()      IOSET0 = 0x00000400   /*LED1 P0.10*/
#define LED2ON()      IOSET0 = 0x04000000   /*LED1 P0.26*/

#define INDIRECT_ADDRESS_MODE_16

#define mdelay(x) delay_ms(x)
#define udelay(x) delay_us(x)
extern void s1d13742_write_reg (unsigned char s1dReg, unsigned char s1dValue);   
extern void s1d13742_InitRegisters( void );
extern void indirect_WriteRegBus(unsigned char value);
extern void delay_us(int x);
extern void delay_ms(int x);
extern void Port_Init(void);
extern void indirect_WriteDataBus(WORD value);
extern WORD indirect_mem_writeseek(DWORD address);
extern void WriteData(WORD value);
extern void WriteWE(void);

#endif





"io.c" dosyasının içeriği

#include "lpc23xx.h"
#include "io.h"


void delay_us(int x)
{
   int trial;
   int total=625*x/1000;
   for(trial=0;trial<total;trial++)
   {
   }
}

void delay_ms(int x)
{
   char i;
   int trial;
   int total=625*x;
   for(trial=0;trial<total;trial++)
   {
    for(i=0;i<9;i++);
   }
}

void Port_Init(void)
{
   SCS|=0x01;
   PINSEL6 |= 0X00000000;
     PINSEL8 |= 0X00000000;
   //FIO1DIR |= 0xFFFF0000;
   FIO0DIR |= 0xFFFF0000;   
   FIO1DIR |= 0xFFFF0000;
   FIO1CLR |= 0xFFFF0000;
   FIO2DIR |= 0x000000FF;
   FIO2CLR |= 0x000000FF;
   IODIR0 |= BIT_SET(21);
   IOSET0 |= BIT_SET(21);
   IODIR1 |= BIT_SET(19);
   IOCLR1 |= BIT_SET(19);   
   FIO2SET |= (BIT_SET(EPSON_DC) | BIT_SET(EPSON_WR) | BIT_SET(EPSON_RD) | BIT_SET(EPSON_CS));
   FIO2CLR|=BIT_SET(EPSON_CS);
   FIO1DIR |= 0x0000FFFF;      
}

WORD indirect_ReadDataBus()//read 16 bit from data port
{
   DWORD data;
   FIO1DIR &= 0xFFFF0000;
   FIO3CLR |= PORT3_WR;//indirect_wr(0);       
   data=FIO1PIN&0xFFFF0000;      
   FIO3SET |= PORT3_WR;//indirect_wr(1);
   FIO1DIR |= 0xFFFF0000;
   return data;
}

void indirect_WriteDataBus(WORD value)//write 16 bit to data port
{        
   int r0,r1,r2,r3;
   __asm{
      mov r0,#0x3fffc09C //clr
       mov r1,#0x3fffc098 //set
       mov r2,#0x0000FFFF
      mov r3,value
      str r2,[r0]
       str r3,[r1]      
       mov r0,#0x3fffc07C      // clr
       mov r1,#0x3fffc078     // set
         mov r2,#0x00000008
         str r2,[r0]
       str r2,[r1]
  }   
}


void WriteDataBus(WORD value)//write 16 bit to data port
{        
   int r0,r1,r2,r3;
   __asm{
      mov r0,#0x3fffc09C //clr
       mov r1,#0x3fffc098 //set
       mov r2,#0x0000FFFF
      mov r3,value
      str r2,[r0]
       str r3,[r1]
   }
}      
   



void WriteWE(void)//write 16 bit to data port
{        
   int r0,r1,r2;
   __asm{
         mov r0,#0x3fffc07C      // clr
       mov r1,#0x3fffc078     // set
         mov r2,#0x00000008
         str r2,[r0]
       str r2,[r1]
  }   
}

 
void s1d13742_write_reg (unsigned char s1dReg, unsigned char s1dValue )
{       
   int r0,r1,r2,r3;

   FIO3CLR|=PORT3_DC;   
    __asm{
      mov r0,#0x3fffc09C //clr
       mov r1,#0x3fffc098 //set
       mov r2,#0x0000FFFF
      mov r3,s1dReg
      str r2,[r0]
       str r3,[r1]      
       mov r0,#0x3fffc07C      // clr
       mov r1,#0x3fffc078     // set
         mov r2,#0x00000008
         str r2,[r0]
       str r2,[r1]
  }   
   FIO3SET|=PORT3_DC;
     __asm{
      mov r0,#0x3fffc09C //clr
       mov r1,#0x3fffc098 //set
       mov r2,#0x0000FFFF
      mov r3,s1dValue
      str r2,[r0]
       str r3,[r1]      
       mov r0,#0x3fffc07C      // clr
       mov r1,#0x3fffc078     // set
         mov r2,#0x00000008
         str r2,[r0]
       str r2,[r1]
  }         
}

void indirect_reg_writeseek(unsigned char reg, unsigned short data)
{
   FIO2CLR|=PORT3_DC;   
    FIO1CLR|=0x000000FF;
   FIO1SET|=reg;            
   FIO2CLR |= PORT3_WR;//indirect_wr(0);
   FIO2CLR |= PORT3_WR;//indirect_wr(0);
   FIO2SET |= PORT3_WR;//indirect_wr(1);
   FIO2SET|=PORT3_DC;   
   FIO1CLR|=0x0000FFFF;
   FIO1SET|=(data&0x0000FFFF);   
   FIO2CLR |= PORT3_WR;//indirect_wr(0);
   FIO2SET |= PORT3_WR;//indirect_wr(1);
}


       

Arkadaşlar bu şemaya göre io.h ve io.c dosyalarındaki port tanımlamaları nasıl yapılmalı çözemedim.
Komple dosya ve şama linki yukarıdaki mesajda bilginize.


computerboy

Olmuyor bir türlü arkadaşlar nasıl yaparım. şu kodu şurayı değiştir deyin bari. yardım lütfen.

teknikelektronikci

#9
sizin aldiginiz yerden yardim istemeniz gerek ki teknik destek bir yere kadarda verilmeli

edit:

ayrica pin degisiklikelrini semaniza göre sanirim asagidaki yerlerde yapmaniz gerek


#define EPSON_CS      4
#define EPSON_WR      3
#define EPSON_RD      2
#define EPSON_DC      1   

#define PORTC_DATA       0         //data bit 0 is at data15
#define PORT3_CS      0x00000001 //P2.0
#define PORT3_DC      0x00000002 //P2.1
#define PORT3_RD      0x00000008 //P2.3
#define PORT3_WR      0x00000004 //P2.2
//#define EPSON_RESET      0x00000001 //P3.0

#define LED1ON()      IOSET0 = 0x00000400   /*LED1 P0.10*/
#define LED2ON()      IOSET0 = 0x04000000   /*LED1 P0.26*/


elinize hesap makinasini alip (bilimsel) veya kafadan yaparak semaniza göre hex degerleri yazarsiniz  ben baska yerde pin tanimlamasi göremedim
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

computerboy

#10
Arkadaşlar yukardaki bağlantı pinleri yanlış doğrusu bu.
CS Pini      0x00000100 // P2.8
DC Pini      0x10000000 // P4.28
RD Pini      0x04000000 // P3.26
WR Pini      0x02000000 // P3.25

data pinleri 16 dan 31 e kadar (PORT1)

kodları bu şekilde düzenledim bir arkadaş asmden sonraki value değerini 16 bit sağa kaydır dedi ama anlayamadım.
teknikelektronikci üstad Port_Init kısmında ve devam eden kodlarda bayağı bir port ayarlaması var. ben anladığım kadarı ile yaptım ama olmadı.

"io.c" dosyası
#include "lpc23xx.h"
 #include "io.h"


void delay_us(int x)
{
	int trial;
	int total=625*x/1000;
	for(trial=0;trial<total;trial++)
	{
	}
}

void delay_ms(int x)
{
	char i;
	int trial;
	int total=625*x;
	for(trial=0;trial<total;trial++)
	{
	 for(i=0;i<9;i++);
	}
}

void Port_Init(void)
{
	SCS|=0x01;
	PINSEL3 |= 0X00000000;
  	PINSEL4 |= 0X00000000;

	FIO1DIR |= 0xFFFFFFFF;
	FIO1CLR |= 0xFFFFFFFF;

	FIO2DIR |= 0x00000100;
	FIO2CLR |= 0x00000100;

	FIO4DIR |= 0x10000000;
	FIO4CLR |= 0x10000000;

	FIO3DIR |= 0x06000000;
	FIO3CLR |= 0x06000000;

	IODIR0 |= BIT_SET(21);
	IOSET0 |= BIT_SET(21);
	IODIR1 |= BIT_SET(19);
	IOCLR1 |= BIT_SET(19);
	FIO4SET|=BIT_SET(EPSON_DC);	
	FIO3SET |= (BIT_SET(EPSON_WR) | BIT_SET(EPSON_RD));
	FIO2SET|=BIT_SET(EPSON_CS);
	FIO2CLR|=BIT_SET(EPSON_CS);
	FIO1DIR |= 0xFFFFFFFF;		
}

WORD indirect_ReadDataBus()//read 16 bit from data port
{
	DWORD data;
	FIO1DIR &= 0xFFFFFFFF; 
	FIO3CLR |= PORT3_WR;//indirect_wr(0);	 	
	data=FIO1PIN&0xFFFFFFFF;   	
	FIO3SET |= PORT3_WR;//indirect_wr(1);
	FIO1DIR |= 0xFFFFFFFF;
	return data;
}

void indirect_WriteDataBus(WORD value)//write 16 bit to data port
{	  	 
	int r0,r1,r2,r3; 
   __asm{
		mov r0,#0x3fffc09C //clr
    	mov r1,#0x3fffc098 //set
    	mov r2,#0xFFFFFFFF
		mov r3,value
		str r2,[r0] 
    	str r3,[r1]		
    	mov r0,#0x3fffc07C 	  // clr
    	mov r1,#0x3fffc078 	 // set
   		mov r2,#0x00000008 
	   	str r2,[r0]
    	str r2,[r1]
  }	
}


 void WriteDataBus(WORD value)//write 16 bit to data port
{	  	 
	int r0,r1,r2,r3; 
   __asm{
		mov r0,#0x3fffc09C //clr
    	mov r1,#0x3fffc098 //set
    	mov r2,#0xFFFFFFFF
		mov r3,value
		str r2,[r0] 
    	str r3,[r1]
	}
}		
    



 void WriteWE(void)//write 16 bit to data port
{	  	 
	int r0,r1,r2; 
   __asm{
	   	mov r0,#0x3fffc07C 	  // clr
    	mov r1,#0x3fffc078 	 // set
   		mov r2,#0x00000008 
	   	str r2,[r0]
    	str r2,[r1]
  }	
}

  
void s1d13742_write_reg (unsigned char s1dReg, unsigned char s1dValue )
{	 	
	int r0,r1,r2,r3;

	FIO4CLR|=PORT3_DC;	
    __asm{
		mov r0,#0x3fffc09C //clr
    	mov r1,#0x3fffc098 //set
    	mov r2,#0xFFFFFFFF
		mov r3,s1dReg
		str r2,[r0] 
    	str r3,[r1]		
    	mov r0,#0x3fffc07C 	  // clr
    	mov r1,#0x3fffc078 	 // set
   		mov r2,#0x00000008 
	   	str r2,[r0]
    	str r2,[r1]
  }	
	FIO4SET|=PORT3_DC;
	  __asm{
		mov r0,#0x3fffc09C //clr
    	mov r1,#0x3fffc098 //set
    	mov r2,#0xFFFFFFFF
		mov r3,s1dValue
		str r2,[r0] 
    	str r3,[r1]		
    	mov r0,#0x3fffc07C 	  // clr
    	mov r1,#0x3fffc078 	 // set
   		mov r2,#0x00000008 
	   	str r2,[r0]
    	str r2,[r1]
  }			
}

void indirect_reg_writeseek(unsigned char reg, unsigned short data)
{
	FIO4CLR|=PORT3_DC;	
    FIO1CLR|=0x000000FF;
	FIO1SET|=reg;			   
	FIO3CLR |= PORT3_WR;//indirect_wr(0);
	FIO3CLR |= PORT3_WR;//indirect_wr(0);
	FIO3SET |= PORT3_WR;//indirect_wr(1);
	FIO4SET|=PORT3_DC;	
	FIO1CLR|=0xFFFFFFFF;
	FIO1SET|=(data&0xFFFFFFFF);	
	FIO3CLR |= PORT3_WR;//indirect_wr(0);
	FIO3SET |= PORT3_WR;//indirect_wr(1);
}


"io.h" dosyası
#ifndef IO_H
#define IO_H
#include "type.h"
//#define NULL 0
#define __inline__
#define MAX_MEM_SIZE		(768*1024)
#define MAX_REG_SIZE		(768*1024) 

#define EPSON_CS		4 
#define EPSON_WR		3 
#define EPSON_RD		2 
#define EPSON_DC		1	

#define PORT1_DATA 16//data bit 0 is at data15
#define PORT3_CS		0x00000100 //P2.8
#define PORT3_DC		0x10000000 //P4.28
#define PORT3_RD		0x04000000 //P3.26
#define PORT3_WR		0x02000000 //P3.25
#define EPSON_RESET		0x00000001 //P3.0

#define INDIRECT_ADDRESS_MODE_16 

#define mdelay(x) delay_ms(x)
#define udelay(x) delay_us(x)
extern void s1d13742_write_reg (unsigned char s1dReg, unsigned char s1dValue);	
extern void s1d13742_InitRegisters( void );
extern void indirect_WriteRegBus(unsigned char value);
extern void delay_us(int x);
extern void delay_ms(int x);
extern void Port_Init(void);
extern void indirect_WriteDataBus(WORD value);
extern WORD indirect_mem_writeseek(DWORD address);
extern void WriteData(WORD value);
extern void WriteWE(void);

#endif






ahmet2004

*computerboy*

fxdev'den yardım iste şu sıralar birlikte çalışıyorlar muhakkak yardım eder.

computerboy


computerboy

Firmadan istedim ama henüz kod ellerinde yokmuş uygulamayla ilgilenen bir ben varım herhalde. Açık sözlülüğünüz için teşekkür ederim. Genede boş vaktiniz olduğunda incelerseniz çok makbule geçer.

computerboy

Arkadaşlar C dilini öğrenmeye yeni yeni başladım yavaş yavaş öğreniyorum kusura bakmayın size amatörce gelebilir sorularım.

SCS|=0x01; Bu register gpio portun hızlı çalışmasını sağlıyormuş datashetten öyle anladım doğrumu anlamışım bilmiyorum:) gpio4'de kullanmak için 0x01 değeri 0x04 olmasımı gerekiyor ?

value = (value << 16);
indirect_WriteDataBus(value);

bir arkadaşım kodları bu tarzda düzenlersem olacağını söyledi acaba sadece void indirect_WriteDataBus(WORD value) fonksiyonu için düzenlesem yeterlimi yada tüm fonksiyonlar için düzenlememmi lazım