개요

STM 보드를 이용해 LC2421-SMLYH6 모델을 제어하기 위한 작업을 수행한다.

회로도

  • RS - Register Select

하나의 Address 라인은 LCD Register와 LCD Display RAM 중 하나를 선택하는 역할을 수행한다.

코드 분석

U-Boot

u-boot/cpu/arm_cortexm3/stm32/fsmc.c

위 소스에 보면 fsmc_nor_psram_init() 함수 정의가 있음.

  • cs - Chip-select
  • bcr - Chip-select control
  • btr - Chip-select timing
  • bwtr - Write timing
int fsmc_nor_psram_init(u32 cs, u32 bcr, u32 btr, u32 bwtr)
{
    int rv = 0;
    static int common_init_done = 0;
 
    cs--;
 
    if (cs > 3)
        return -EINVAL;
 
    if (!common_init_done) {
        int i;
 
        /*  
         * Connect GPIOs to FSMC controller
         */
        for (i = 0; i < ARRAY_SIZE(ext_ram_fsmc_gpio); i++) {
            rv = stm32f2_gpio_config(&ext_ram_fsmc_gpio[i],
                    STM32F2_GPIO_ROLE_FSMC);
            if (rv != 0)
                goto out;
        }   
 
        /*  
         * Enable FSMC interface clock
         */
        STM32_RCC->ahb3enr |= STM32_RCC_ENR_FSMC;
 
        common_init_done = 1;
    }   
 
    /*  
     * Fake BCR read; if don't do this, then BCR remains configured
     * with defaults.
     */
    rv = STM32_FSMC->cs[cs].bcr;
 
    STM32_FSMC->cs[cs].btr = btr;
    if (bwtr != (u32)-1)
        STM32_FSMC->wt[cs].bwtr = bwtr;
    STM32_FSMC->cs[cs].bcr = bcr;
 
    rv = 0;
out:
    return rv; 
} 

참고