lunes, 2 de enero de 2017

PRACTICA # 4 LCD GRAFICA 96x64 (SPI)


OBJETIVO:

Se creará el driver para la lcd grafica 96x64 con interfaz de comunicación SPI. Se mostrará un mensaje de 7 líneas.
  • Crear y configurar las unidades SAU1 y CSI21
  • Inicializar los pines de LCD-CS y LCD-RS
  • Incluimos todos los archivos de la librería gráfica en una carpeta

DESARROLLO:
  • Del manual Renesas RL78G14 RDK User's Manual ubicamos los pines del LCD:
  • Del YRDKRL78G14 schematic ubicamos el LCD okaya:

PASOS:
  • Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project



  • Configurar proyecto:
1.- Clic derecho en el proyecto generado y seleccionar Properties


2.- Seleccionar C/C++ Build / Settings / Linker / Device y establecer los siguientes parámetros:
OCD = 85
Option Byte = efffe8
Palomear: Use range of debug monitor area. Nota: No establecer ningún valor solo dejarlo en blanco.
Apply y después OK.


3.- Configuraremos el SPI por medio del modulo SAU1 y CSI21 a 1 Mhz en el archivo r_cg_serial_SPI.c
void R_SAU1_Create(void)
{
    SAU1EN = 1U;    /* supply SAU1 clock */
    __nop();
    __nop();
    __nop();
    __nop();
    SPS1 = _0000_SAU_CK00_FCLK_0 | _0000_SAU_CK01_FCLK_0;     // fMCK = 32 Mhz cuando SPS1 = 0
    R_CSI21_Create();
}

void R_CSI21_Create(void)
{
    ST1 |= _0002_SAU_CH1_STOP_TRG_ON;    /* disable CSI21 */
    CSIMK21 = 1U;    /* disable INTCSI21 interrupt */
    CSIIF21 = 0U;    /* clear INTCSI21 interrupt flag */
    /* Set INTCSI21 low priority */
    CSIPR121 = 1U;
    CSIPR021 = 1U;
    // al tener SPS1 = 0 da lo mismo tener _8000_SAU_CLOCK_SELECT_CK01 que _0000_SAU_CLOCK_SELECT_CK00
    SIR11 = _0004_SAU_SIRMN_FECTMN | _0002_SAU_SIRMN_PECTMN | _0001_SAU_SIRMN_OVCTMN;    /* clear error flag */
    SMR11 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0000_SAU_CLOCK_MODE_CKS |
            _0000_SAU_TRIGGER_SOFTWARE | _0000_SAU_MODE_CSI | _0000_SAU_TRANSFER_END;
    SCR11 = _C000_SAU_RECEPTION_TRANSMISSION | _0000_SAU_TIMING_1 | _0000_SAU_MSB | _0007_SAU_LENGTH_8;
    //SDR11 = _6400_CSI21_DIVISOR;
    SDR11 = 0x1E00; // 1 Mhz de velocidad SPI de acuerdo a la formula (Transfer clock frequency) = {Operation clock (fMCK) frequency of target channel} ÷ (SDRmn[15:9] + 1) ÷ 2 [Hz]
    SO1 |= _0200_SAU_CH1_CLOCK_OUTPUT_1;    /* CSI21 clock initial level */
    SO1 &= ~_0002_SAU_CH1_DATA_OUTPUT_1;    /* CSI21 SO initial level */
    SOE1 |= _0002_SAU_CH1_OUTPUT_ENABLE;    /* enable CSI21 output */
    /* Set SI21 pin */
    PM7 |= 0x02U;
    /* Set SO21 pin */
    P7 |= 0x04U;
    PM7 &= 0xFBU;
    /* Set SCK21 pin */
    P7 |= 0x01U;
    PM7 &= 0xFEU;
}


4.- Inicializamos la LCD con la función en main.c SR_LCD_GRAPH

5.- Las demás funciones e interrupciones están en el archivo r_cg_serial_SPI.c
  • · R_CSI21_Start
  • · R_CSI21_Send_Receive
  • · r_csi21_interrupt
  • · r_csi21_callback_receiveend
  • · r_csi21_callback_sendend
6.- El API de usuario RDKRL78_spi, YRDKRL78_spi y el driver ST7579, glyph_api se encuentran en la carpeta Glyph:

  • Agregar código, compilar y debug:
1.- Bajar el código de:

2.- Compilar con el icono del martillo, debug con el icono del insecto y correr software:


DEMOSTRACIÓN:


No hay comentarios.:

Publicar un comentario