用于MAX7456随屏显示器SPI
时间:04-22
来源:互联网
点击:
向字符存储器写一个字符的程序如下,每个字符占用18行,每行12像素,共216像素。由于每个字节定义4个像素,因此定义每一个字符需要54字节。字符数据位于程序入口处的data[] (与上述写显示存储器的程序类似)。
写字符存储器时需要进行一些附加说明,存储器为非易失,因此,写存储器大约需要12ms,由MAX7456执行。只有完整的54字节字符才可以写入字符存储器。
该器件包含一个54字节映射存储器。首先把需要写入的字符数据写入映射存储器,然后器件将该数据装载到NVM字符存储器。
用来写字符存储器的寄存器有以下几种:- 字符存储器模式 = 0x08。向寄存器写0xA0,使器件把映射存储器的内容装载到NVM字符存储器。
- 字符存储器地址高位 = 0x09。包括了即将写入字符的地址。
- 字符存储器地址低位 = 0x0A。
- 字符存储器数据输入 = 0x0B。
- 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 结论和性能
模拟电路 模拟芯片 德州仪器 放大器 ADI 模拟电子 相关文章:
- 12位串行A/D转换器MAX187的应用(10-06)
- AGC中频放大器设计(下)(10-07)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- PIC16C5X单片机睡眠状态的键唤醒方法(11-16)
- 用简化方法对高可用性系统中的电源进行数字化管理(10-02)
- 利用GM6801实现智能快速充电器设计(11-20)