黄金会员
主题
帖子
积分6701
阅读权限40
注册时间2011-3-11
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2017-3-13 19:05
|
显示全部楼层
本帖最后由 pla155 于 2017-3-20 22:03 编辑
2天了,字库搞不定,读出来的都是0。
/******************************************************************************
1 概述
GT23L16U2W是一款内含11X12点阵和15X16点阵的汉字库芯片,支持Unicode V3.0汉字
(含有国家信标委GB13000合法授权)、ASCII字符及150国文字。排列格式为横置横排。
用户通过字符内码,利用本手册提供的方法计算出该字符点阵在芯片中的地址,可从该地
址连续读出字符点阵信息。
本字库芯片内含 GT 快捷拼音输入法、GT 三维部件输入法及全拼输入法的码本,另外
配合本公司的输入法程序,可实现数字小键盘 IT产品的汉字快捷输入。
1.1 芯片特点
● 数据总线: SPI串行总线接口 ; PLII精简地址并行总线接口
● 点阵排列方式:字节横置横排
访问速度:SPI时钟频率:20MHz(max.)
PLII访问速度:130ns(max.) @3.3V
● 工作电压:2.7V~3.6V
● 电流: 工作电流:12mA
待机电流:10uA
● 封装:SO20W (12.80mmX10.30mm)、QFN40 (6mmX6mm)
● 工作温度:-20℃~85℃(SPI模式下);-10℃~85℃(PLII模式下)
2.3 SPI接口引脚描述
串行数据输出(SO):该信号用来把数据从芯片串行输出,数据在时钟的下降沿移出。
串行数据输入(SI):该信号用来把数据从串行输入芯片,数据在时钟的上升沿移入。
串行时钟输入(SCLK):数据在时钟上升沿移入,在下降沿移出。
片选输入(CS#):所有串行数据传输开始于CS#下降沿,CS#在传输期间必须保持
为低电平,在两条指令之间保持为高电平。
; --------------所有数据高位在先。---------------------------------------------
3.1.2 Read Data Bytes(一般读取)
首先把片选信号(CS#)变为低,紧跟着的是1 个字节的命令字(03 h)和3 个字节的
地址和通过串行数据输入引脚(SI)移位输入,每一位在串行时钟(SCLK)上升沿被锁存。
然后该地址的字节数据通过串行数据输出引脚(SO)移位输出,每一位在串行时钟
(SCLK)下降沿被移出。
读取字节数据后,则把片选信号(CS#)变为高,结束本次操作。
如果片选信号(CS#)继续保持为底,则下一个地址的字节数据继续通过串行数据输出引脚
(SO)移位输出。
3.1.3 Read Data Bytes at Higher Speed(快速读取点阵数据)
首先把片选信号(CS#)变为低,紧跟着的是1 个字节的命令字(0B h)和3 个字节的
地址以及一个字节 Dummy Byte 通过串行数据输入引脚(SI)移位输入,每一位在串行时
钟(SCLK)上升沿被锁存。
然后该地址的字节数据通过串行数据输出引脚(SO)移位输出,每一位在串行时钟
(SCLK)下降沿被移出。
如果片选信号(CS#)继续保持为底,则下一个地址的字节数据继续通过串行数据输出
引脚(SO)移位输出。
例:读取一个15x16点阵汉字需要32Byte,则连续32个字节读取后结束一个汉字的点阵数据
读取操作。 如果不需要继续读取数据,则把片选信号(CS#)变为高,结束本次操作。
******************************************************************************/
; 函数: void SUB_GT23_Read(void)。
; 描述: 读字库内容到缓冲区
; 参数: 首地址,命令字,读取字节数都在缓冲区准备好了
; 返回: 无
;*******************************************************************************
SUB_GT23_Read:
SBI_GT23L16_CLK
SBI_GT23L16_SI
SBI_GT23L16_SO
CBI_GT23L16_CS
RCALL SUB_DELAY
LDI ZH ,HIGH(GT23_CMD)
LDI ZL ,LOW (GT23_CMD)
LDS R18 , 0X005 ; 1字节指令 + 3字节地址 + 1字节DUMP
JP1_GT23_Read:
LD R16 , Z+ ; 加载指令字,03 或是 0B ; 地址信息
LDI R17 , 0X008
JP2_GT23_Read:
CLC
ROL R16
CBI_GT23L16_CLK
BRCS JP5_GT23_Read
CBI_GT23L16_SI
RJMP JP6_GT23_Read
JP5_GT23_Read:
NOP
SBI_GT23L16_SI
JP6_GT23_Read:
NOP
RCALL SUB_DELAY
SBI_GT23L16_CLK ; 指令和地址在上升沿锁存
RCALL SUB_DELAY
DEC R17
BRNE JP2_GT23_Read ; 写一个字节到总线
DEC R18
BRNE JP1_GT23_Read ; 写5个字节到总线
;-------开始读的过程--------------------
LDI ZH ,HIGH(GT23_BUF)
LDI ZL ,LOW (GT23_BUF)
LDS R18 ,GT23_i ; 计数器,需要读出的数据量
JP3_GT23_Read:
LDI R17 , 0X008
LDI R16 , 0X0FF
JP4_GT23_Read:
CBI_GT23L16_CLK ; 下降沿移出数据到总线
RCALL SUB_DELAY
IN R25 , PINE
BST R25 , 5; GT23L16_SO ; 如果GT23L16_SO是高,跳过下一句
LSL R16
BLD R16 , 0
SBI_GT23L16_CLK
RCALL SUB_DELAY
DEC R17
BRNE JP4_GT23_Read
ST Z+ , R16
DEC R18
BRNE JP3_GT23_Read
SBI_GT23L16_CS
RET
;------------------------------------------------------------------------------
SUB_DELAY:
LDI R25 , 0X010
JP_DELAY:
DEC R25
BRNE JP_DELAY
RET
;------------------------------------------------------------------------------
20170321,发现一处错误。LDS 应该 是LDI , 导致输入字库芯片地址数据的数量成了随机数。
|
|