微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 用于MAX7456随屏显示器SPI

用于MAX7456随屏显示器SPI

时间:04-22 来源:互联网 点击:

  1. 向字符存储器写一个字符的程序如下,每个字符占用18行,每行12像素,共216像素。由于每个字节定义4个像素,因此定义每一个字符需要54字节。字符数据位于程序入口处的data[] (与上述写显示存储器的程序类似)。

    写字符存储器时需要进行一些附加说明,存储器为非易失,因此,写存储器大约需要12ms,由MAX7456执行。只有完整的54字节字符才可以写入字符存储器。

    该器件包含一个54字节映射存储器。首先把需要写入的字符数据写入映射存储器,然后器件将该数据装载到NVM字符存储器。

    用来写字符存储器的寄存器有以下几种:

    1. 字符存储器模式 = 0x08。向寄存器写0xA0,使器件把映射存储器的内容装载到NVM字符存储器。
    2. 字符存储器地址高位 = 0x09。包括了即将写入字符的地址。
    3. 字符存储器地址低位 = 0x0A。
    4. 字符存储器数据输入 = 0x0B。
    5. Status = 0xA0,读取该寄存器以决定何时可以写入字符存储器。

    在程序入口处,data[1]包括即将写入字符的地址,data[2...54]包括字符数据。

    向NVM字符存储器写字符时,首先写字符地址。然后将每个字节写入映射存储器。写映射存储器时没有自动递增模式,所以每次写操作必须写入映射存储器地址。向字符存储器模式寄存器写0xA0,可以把映射存储器的内容装载到NVM字符存储器。然后器件将状态寄存器第5位置高,表明不能写入字符存储器。完成后,器件将该位复位至低。数据从映射存储器移向字符存储器时不能写映射存储器。

    为了避免出现显示器闪烁,在写字符存储器之前程序禁止了OSD。

    /*************************************************************************************** spiWriteFM** Writes to the Character Memory (54 bytes) from "data" extern**************************************************************************************/void spiWriteFM(){unsigned char Index;spiWriteReg(VIDEO_MODE_0_WRITE,spiReadReg(VIDEO_MODE_0_READ)  0xF7);                   // Clear bit 0x08 to DISABLE the OSD displayspiWriteReg(FM_ADDRH_WRITE,data[1]);                       // Write the address of the character to be written// MAX7456 glyph tile definition// length = 0x36 = 54 bytes  // MAX7456 64-byte Shadow RAM accessed // through  FM_DATA_.. FM_ADDR.. contains a single // character/glyph-tile shapefor(Index = 0x00; Index  0x36; Index++){spiWriteReg(FM_ADDRL_WRITE,Index);                    // Write the address within the shadow RAMspiWriteReg(FM_DATA_IN_WRITE,data[Index + 2]);        // Write the data to the shadow RAM}spiWriteReg(FM_MODE_WRITE, 0xA0);                          // MAX7456 "Font Memory Mode" write 0xA0 triggers// copy from 64-byte Shadow RAM to NV array.while ((spiReadReg(STATUS_READ)  0x20) != 0x00);          // Wait while NV Memory status is BUSY// MAX7456 0xA0 status bit 0x20: NV Memory Status// Busy/~Ready}

    MAX7456头文件

    下面列出了MAX7456的头文件,以下代码决定了器件的寄存器映射。

    /*************************************************************************************** spiWriteRegAutoIncr** Writes to an 8-bit register with the SPI port by using the MAX7456's autoincrement mode**************************************************************************************/// MAX7456 VIDEO_MODE_0 register#define VIDEO_MODE_0_WRITE              0x00#define VIDEO_MODE_0_READ               0x80#define VIDEO_MODE_0_40_PAL             0x40#define VIDEO_MODE_0_20_NoAutoSync      0x20#define VIDEO_MODE_0_10_SyncInt         0x10#define VIDEO_MODE_0_08_EnOSD           0x08#define VIDEO_MODE_0_04_UpdateVsync     0x04#define VIDEO_MODE_0_02_Reset           0x02#define VIDEO_MODE_0_01_EnVideo         0x01// VIDEO MODE 0 bitmap#define NTSC                            0x00#define PAL                             0x40#define AUTO_SYNC                       0x00#define EXT_SYNC                        0x20#define INT_SYNC                        0x30#define OSD_EN                          0x08#define VERT_SYNC_IMM                   0x00#define VERT_SYNC_VSYNC                 0x04#define SW_RESET                        0x02#define BUF_EN                          0x00#define BUF_DI                          0x01// MAX7456 VIDEO_MODE_1 register#define VIDEO_MODE_1_WRITE              0x01#define VIDEO_MODE_1_READ               0x81// MAX7456 DM_MODE register#define DM_MODE_WRITE                   0x04#define DM_MODE_READ                    0x84// MAX7456 DM_ADDRH register#define DM_ADDRH_WRITE                  0x05#define DM_ADDRH_READ                   0x85// MAX7456 DM_ADDRL register#define DM_ADDRL_WRITE                  0x06#define DM_ADDRL_READ                   0x87// MAX7456 DM_CODE_IN register#define DM_CODE_IN_WRITE                0x07#define DM_CODE_IN_READ                 0x87// MAX7456 DM_CODE_OUT register#define DM_CODE_OUT_READ                0xB0// MAX7456 FM_MODE register#define FM_MODE_WRITE                   0x08#define FM_MODE_READ                    0x88// MAX7456 FM_ADDRH register#define FM_ADDRH_WRITE                  0x09#define FM_ADDRH_READ                   0x89// MAX7456 FM_ADDRL register#define FM_ADDRL_WRITE                  0x0A#define FM_ADDRL_READ                   0x8A// MAX7456 FM_DATA_IN register#define FM_DATA_IN_WRITE                0x0B#define FM_DATA_IN_READ                 0x8B// MAX7456 FM_DATA_OUT register#define FM_DATA_OUT_READ                0xC0// MAX7456 STATUS register#define STATUS_READ                     0xA0#define STATUS_40_RESET_BUSY            0x40#define STATUS_20_NVRAM_BUSY            0x20#define STATUS_04_LOSS_OF_SYNC          0x04#define STATUS_02_PAL_DETECTED          0x02#define STATUS_01_NTSC_DETECTED         0x01// MAX7456 requires clearing OSD Black Level// register bit 0x10 after reset#define OSDBL_WR                        0x6C#define OSDBL_RD                        0xEC#define OSDBL_10_DisableAutoBlackLevel  0x10

    结论和性能

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top