硬字库读取问题,SPI通信
周墨 2014-02-11 11:21:22 第一次用到硬字库,根据数据手册编写SPI通信程序。用示波器测试,可以确定读取汉字的指令和地址已经成功发送到字库芯片,而且有32字模数据也返回了。但是我却没有接收到,或者说SPIBUF中没有接收到。
希望有相关经验的大神指导,万分感谢!一下是关键代码:
void comm(uint8 data)
{
SPI1BUF=data;
while (!IFS0bits.SPI1IF);
IFS0bits.SPI1IF=0;
}
uint8 RecvByte()
{
uint8 mrdata=0;
mrdata = SPI1BUF;
while(SPI1STATbits.SPIRBF);
return mrdata;
}
//汉字的地址计算
uint32 GB2312_Addr(uint16 hanzi)
{
uint8 MSB,LSB;
uint32 Address=0;
uint32 BaseAdd=0;
MSB = (hanzi>>8);
LSB = (hanzi);
if(MSB >=0xA4 && MSB <= 0Xa8 && LSB >=0xA1)
Address = BaseAdd;
else if(MSB >=0xA1 && MSB <= 0Xa9 && LSB >=0xA1)
Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*32+ BaseAdd;
else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1)
Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+846)*32+BaseAdd;
return Address;
}
void Read_word (uint32 address)
{
uint8 msb,ssb,lsb; //分别用于存储地址的高、中、低字节
uint8 RT_data=0x03;
uint8 count=0;
uint8 index = 0;
lsb=address;
ssb=address>>8;
msb=address>>16;
cs=0;
nop(); //片选拉低
//delay(10); //稍作延时
comm(RT_data); //一般读取的命令,表明这是一般读取模式
comm(msb); //传送地址的高字节
comm(ssb); //传送地址的中间字节
comm(lsb); //传送地址的低字节
for(count=0;count<32;count++)
{
//comm(1);
word_data[count] = RecvByte();
//word_data[count]=temp_data;
}
cs=1;
}
int main(void)
{
uint32 address=0;
uint16 hanzi='好'; //测试读取一个‘好’字
SPI2BUF=0; //BUF2清零
init_spi2_IO();
cs=1;
init_SPI2();
SPI2STATbits.SPIEN = 1;
address=GB2312_Addr(hanzi);
Read_word(address);
while(1);
return 0;
}