bueno.voy a poner las librerias que he creado en ASM. por lo menos por lo que voy por ahora.para la visualizacion
de los colores.
porque lo siguiente que voy a hacer es capturar una imagen con la camara OV7670 y visualizarla en la TFT ili9320.
este codigo lo pongo en el programa principal para realizar la llamada a la libreria.
PRINCIPAL BANK7
call ILI9320_INI
movlw 0x55 ;direccion alta de la tabla 0x55
movwf TBLPTRH
clrf TBLPTRL ;direccion baja de la tabla 0x00
call TFT_CONFIG ;configura registros de la TFT
rep_prin movlw 0x00 ;dato para el color negro
movwf GRAM_H
movlw 0x00
movwf GRAM_L
call lcdFillScreen
movlw 0x00 ;dato para el color azul
movwf GRAM_H
movlw 0x1f
movwf GRAM_L
call lcdFillScreen
movlw 0xf8 ;dato para el color rojo
movwf GRAM_H
movlw 0x00
movwf GRAM_L
call lcdFillScreen
movlw 0x07 ;dato para el color verde
movwf GRAM_H
movlw 0xe0
movwf GRAM_L
call lcdFillScreen
movlw 0x07 ;dato para el color cyan
movwf GRAM_H
movlw 0xff
movwf GRAM_L
call lcdFillScreen
movlw 0xf8 ;dato para el color magneta
movwf GRAM_H
movlw 0x1f
movwf GRAM_L
call lcdFillScreen
movlw 0xff ;dato para el color amarillo
movwf GRAM_H
movlw 0xe0
movwf GRAM_L
call lcdFillScreen
movlw 0xff ;dato para el color banco
movwf GRAM_H
movlw 0xff
movwf GRAM_L
call lcdFillScreen
goto rep_prin
y esta es la libreria para el control de la TFT
CBLOCK ILI9340_VAR
CONT_PIXL1
CONT_PIXL2
CONT_PIXL3
TFT_DIR_H
TFT_DIR_L
TFT_DAT_H
TFT_DAT_L
FLAGS_TFT
GRAM_H
GRAM_L
ENDC
#define TFT_CONF_9320 0X5500 ;direccion de hubicacion de tabla
#define RS_LO_TFT bcf LATE,0 ;read command
#define RS_HI_TFT bsf LATE,0 ;write command
#define CS_LO_TFT bcf LATE,1 ;habilta chip
#define CS_HI_TFT bsf LATE,1 ;deshabilita chip
#define WR_LO_TFT bcf LATE,4 ;write low
#define WR_HI_TFT bsf LATE,4 ;write hi
#define RD_LO_TFT bcf LATE,5 ;read low
#define RD_HI_TFT bsf LATE,5 ;read hi
#define RST_LO bcf LATE,6 ;reset activo a nivel bajo
#define RST_HI bsf LATE,6
;*********************************************************ILI9320_INI ***************************************************************
;inicializa la TFT
ILI9320_INI bcf TRISE,0 ;RS-D/C
bcf TRISE,1 ;CS
bcf TRISE,4 ;WR
bcf TRISE,5 ;RD
bcf TRISE,6
bsf LATE,0
bsf LATE,1
bsf LATE,4
bsf LATE,5
bsf LATE,6
call RST_TFT
movlw .89 ;500ms
call retardo_s
return
;**************************************************************** RST_TFT ********************************************************
;reset de la TFT
RST_TFT RST_LO
movlw .89 ;500ms
call retardo_s
RST_HI
clrf TFT_DAT_H
clrf TFT_DAT_L
call lcdWriteData
call lcdWriteData
call lcdWriteData
call lcdWriteData
return
;*************************************************************** lcdWriteData ********************************************************
;escribir dato
lcdWriteData clrf TRISH ;puerto como salidas
CS_LO_TFT ;habilita chip
RS_HI_TFT ;modo datos
RD_HI_TFT ;lectura hi
WR_HI_TFT ;escritura hi
movff TFT_DAT_H,LATH ;manda el dato al puerto
WR_LO_TFT ;escritura low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;escritura hi
movff TFT_DAT_L,LATH ;manda el datos al puerto
WR_LO_TFT ;escritura low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;escritura hi
CS_HI_TFT ;inhabilita chip
return
;************************************************************* lcdReadData ************************************************************
;leer dato
lcdReadData setf TRISH ;puerto como entradas
CS_LO_TFT ;habilita chip
RS_HI_TFT ;modo datos
RD_HI_TFT ;lectura hi
WR_HI_TFT ;escritura hi
RD_LO_TFT ;lectura low
movlw .20 ;10us
call retardo_us
movff PORTH,TFT_DAT_H ;lee dato del puerto y pasalo al registro
RD_HI_TFT ;lectura hi
movlw .20 ;10us
call retardo_us
RD_LO_TFT ;lectura low
movlw .20 ;10us
call retardo_us
movff PORTH,TFT_DAT_L ;lee dato del puerto y pasalo al registro
RD_HI_TFT ;lectura hi
CS_HI_TFT ;inhabilita chip
return
;************************************************************ lcdWriteCommand *******************************************************
;escribir comando
lcdWriteCommand clrf TRISH ;puerto como salidas
CS_LO_TFT ;habilita chip
RS_LO_TFT ;modo comandos
RD_HI_TFT ;lectura hi
WR_HI_TFT ;escritura hi
movff TFT_DIR_H,LATH ;manda el dato de direccion al puerto
WR_LO_TFT ;escritura low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;escritura hi
movff TFT_DIR_L,LATH ;manda el datod de direccion al puerto
WR_LO_TFT ;escritura low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;escritura hi
CS_HI_TFT ;inhabilita chip
return
;******************************************************** lcdWriteRegister *******************************************************
;escribir en registro
lcdWriteRegister
call lcdWriteCommand
call lcdWriteData
return
;******************************************************** lcdReadRegister ********************************************************
lcdReadRegister ;leer de un registro
;introducir en BYTE_2 la direccion del registro. Los datos son introducidos en TFT_DAT_H y TFT_DAT_L
call lcdWriteCommand
call lcdReadData
return
;********************************************************** lcdReadID ***********************************************************
;lectura de la version de la LCD. Los datos son introducidos en TFT_DAT_H y TFT_DAT_L
lcdReadID movlw 0x00 ;siempre a cero
movwf TFT_DIR_H
movlw 0x00 ;numero del registro a gestionar
movwf TFT_DIR_L
call lcdReadRegister ;lee dato del registro
return
;********************************************************** lcdFillScrreen *******************************************************
;envia datos a la RAM grafica
lcdFillScreen clrf TFT_DIR_H
movlw 0x20 ;
movwf TFT_DIR_L
clrf TFT_DAT_H
clrf TFT_DAT_L
call lcdWriteRegister ;pon a cero el registro de direccionamiento de la GRAM Horizntal registro 0x0020
incf TFT_DIR_L,F
call lcdWriteRegister ;pon a cero el registro de direccionamiento de la GRAM Vertical registro 0x0021
incf TFT_DIR_L,F
call lcdWriteCommand ;comando de escritura en la GRAM 0x0022
CS_LO_TFT ;habilita chip
RS_HI_TFT ;modo datos
RD_HI_TFT ;lectura hi
WR_HI_TFT ;escritura hi
clrf TRISH ;puerto como salidas
;valores para el envio de 320x240 bytes =76800 bytes
movlw .2
movwf CONT_PIXL3
movlw .44
movwf CONT_PIXL2
movlw .255
movwf CONT_PIXL1
bcf FLAGS_TFT,0
rep_fill movff GRAM_H,LATH ;manda el dato al puerto
WR_LO_TFT ;escritura low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;escritura hi
movff GRAM_L,LATH ;manda el dato al puerto
WR_LO_TFT ;write low
movlw .20 ;10us
call retardo_us
WR_HI_TFT ;write hi
btfsc FLAGS_TFT,0
goto exit_fill
;rutina de contage para el envio de datos
decfsz CONT_PIXL1
goto rep_fill
decfsz CONT_PIXL2
goto rep_fill
decfsz CONT_PIXL3
goto rep_fill
bsf FLAGS_TFT,0 ;un byte mas de contage
goto rep_fill
exit_fill CS_HI_TFT ;inhabilita chip
setf TRISH ;puerto como entrada
return
;****************************************************** TFT_CONFIG ********************************************************************
;configura los registros de la TFT
TFT_CONFIG tblrd*+ ;incrementa puntero de tabla antes de su lectura
movlw 0xff ;byte de fin de lectura de tabla
cpfseq TABLAT ;coprueba si el byte coincide con el valor 0xff
goto tft_dat_tab
return ;retorna si se encontro el byte de fin de tabla(0xff)
tft_dat_tab movff TABLAT,TFT_DIR_L ;carga en el registro de direccion TFT el valor leido de la tabla.
call lcdWriteCommand ;envia comando a la pantalla TFT
tblrd*+ ;incrementa puntero de tabla antes de su lectura
tblrd*+ ;incrementa puntero de tabla antes de su lectura
movff TABLAT,TFT_DAT_H ;carga el valor leido de la tabla byte alto
tblrd*+ ;incrementa puntero de tabla antes de su lectura
tblrd*+ ;incrementa puntero de tabla antes de su lectura
movff TABLAT,TFT_DAT_L ;carga el valor leido de la tabla byte bajo
call lcdWriteData ;envia el dato
movlw .20 ;20us
call retardo_us
tblrd*+ ;incrementa puntero de tabla antes de su lectura
goto TFT_CONFIG ;repite busqueda de bytes en tabla mientras haya datos que leer
ORG TFT_CONF_9320 ;configuracion de la pantalla TFT (1º byte=direccion) (2º y 3º dato de 16bit)
;configuracion de los registros de la ili9320
dt 0xe5,0x80,0x00, 0x00,0x00,0x01, 0x01,0x01,0x00, 0x02,0x07,0x00, 0x03,0x10,0x30, 0x04,0x00,0x00
dt 0x08,0x02,0x02, 0x09,0x00,0x00, 0x0a,0x00,0x00, 0x0c,0x00,0x00, 0x0d,0x00,0x00, 0x0f,0x00,0x00
dt 0x10,0x00,0x00, 0x11,0x00,0x00, 0x12,0x00,0x00, 0x13,0x00,0x00, 0x10,0x17,0xb0, 0x11,0x00,0x37
dt 0x12,0x01,0x38, 0x13,0x17,0x00, 0x29,0x00,0x0d, 0x20,0x00,0x00, 0x21,0x00,0x00, 0x30,0x00,0x01
dt 0x31,0x06,0x06, 0x32,0x03,0x04, 0x33,0x02,0x02, 0x34,0x02,0x02, 0x35,0x01,0x03, 0x36,0x01,0x1d
dt 0x37,0x04,0x04, 0x38,0x04,0x04, 0x39,0x04,0x04, 0x3c,0x07,0x00, 0x3d,0x0a,0x1f, 0x50,0x00,0x00
dt 0x50,0x00,0x00, 0x51,0x00,0xef, 0x52,0x00,0x00, 0x53,0x01,0x3f, 0x60,0x27,0x00, 0x61,0x00,0x01
dt 0x6a,0x00,0x00, 0x90,0x00,0x10, 0x92,0x00,0x00, 0x93,0x00,0x03, 0x95,0x01,0x01, 0x97,0x00,0x00
dt 0x98,0x00,0x00, 0x07,0x00,0x21, 0x07,0x00,0x31, 0x07,0x01,0x73
dt 0xff ;fin de tabla