#include "font_gt32.h"
#define CS_0 P4OUT&=~BIT0
#define CS_1 P4OUT|=BIT0
/******P4.1->MOSI,P4.2->MISO********/
/******P4.0->CS, P4.3->CLK**********/
void SPI_Init()
{
P4SEL|=BIT1+BIT2+BIT3; //设置P9.1~P9.3外设功能
P4DIR|=BIT0+BIT1+BIT3; //设置CS,MOSI,CLK为输出方向
P4DIR&=~BIT2; //设置MISO为输入方向
P4DS|=BIT0+BIT1+BIT3;
P4REN|=BIT2; //设置MISO上拉
P4OUT|=BIT2;
/********以下初始化UCB2**********/
UCB1CTL1|=UCSWRST; //改变SPI设置时应该重置UCSWRST位
UCB1CTL0 =UCCKPL+UCMSB+UCMST+UCMODE_0+UCSYNC; //3线SPI主机模式,时钟极性高,先发MSB
UCB1CTL1|=UCSSEL_2; ///选择SMCLK
UCB1BR0=2; //25M/2=12.5M <30M
UCB1BR1=0;
UCB1CTL1&=~UCSWRST;
UCB1IE &= ~(UCRXIE+UCTXIE); //不开中断
UCB1IFG&=~UCRXIFG;
}
unsigned char SPI_ReceiveByte() //接收一个字节
{
unsigned char byte;
while (!(UCB1IFG&UCTXIFG)); //等待TXBUF为空
UCB1TXBUF=0x00; //伪写入,主要是为了开启时钟
while (!(UCB1IFG&UCRXIFG)); //等待RXBUF接收完成
byte=UCB1RXBUF;
return byte;
}
void SPI_SendByte(unsigned char byte) //发送一个字节
{
while (!(UCB1IFG&UCTXIFG)); //等待TXBUF为空
UCB1TXBUF=byte;
while(UCB1STAT&UCBUSY); //等待发送完成
UCB1RXBUF; //伪读取清空RXBUF
}
unsigned char ReadByte(unsigned long addr)
{
unsigned char RT_data=0x03;
CS_0;
SPI_SendByte(RT_data);
SPI_SendByte((addr&0xff0000)>>16);
SPI_SendByte((addr&0x00ff00)>>8);
SPI_SendByte(addr&0x0000ff);
RT_data=SPI_ReceiveByte();
CS_1;
return (RT_data);
}
void GT32GetFontBuffer(unsigned char *pBuff,unsigned char DataLen,unsigned long addr)
{
unsigned char RT_data=0x03;
unsigned char i;
CS_0;
SPI_SendByte(RT_data);
SPI_SendByte((addr&0xff0000)>>16);
SPI_SendByte((addr&0x00ff00)>>8);
SPI_SendByte(addr&0x0000ff);
for(i=0;i<DataLen;i++)
{
*pBuff = SPI_ReceiveByte();
pBuff++;
}
CS_1;
}
unsigned long GT32GetFontAddr(FontType fontType, unsigned int fontCode)
{
unsigned long Address, BaseAdd;
unsigned char MSB,LSB;
MSB = (fontCode>>8)&0xff;
LSB = fontCode&0xff;
switch (fontType)
{
case ASCII_7x8:
BaseAdd=0x080300;
if ((fontCode >= 0x20) && (fontCode <= 0x7E))
Address = (fontCode - 0x20 ) * 8+BaseAdd;
break;
case ASCII_8x16:
BaseAdd=0x080D80;
if ((fontCode >= 0x20) && (fontCode <= 0x7E))
Address = (fontCode - 0x20 ) * 16+BaseAdd;
break;
case ASCII_5x7:
BaseAdd=0x080000;
if ((fontCode >= 0x20) && (fontCode <= 0x7E))
Address = (fontCode - 0x20 ) * 8+BaseAdd;
break;
case ASCII_6x12:
BaseAdd=0x080D80;
if ((fontCode >= 0x20) && (fontCode <= 0x7E))
Address = (fontCode - 0x20 ) * 16+BaseAdd;
break;
case ASCII_12x24:
BaseAdd=0x082D80;
if ((fontCode >= 0x20) && (fontCode <= 0x7E) )
Address = (fontCode - 0x20 ) * 48+BaseAdd;
break;
case ASCII_16x32:
BaseAdd=0x091E00;
if ((fontCode >= 0x20) && (fontCode <= 0x7E) )
Address = (fontCode - 0x20 ) * 64+BaseAdd;
break;
case GB2312_12x12:
BaseAdd=0x09670E;
if(MSB >=0xA1 && MSB <= 0Xa9 && LSB >=0xA1)
Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*24+ BaseAdd;
else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1)
Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*24+ BaseAdd;
break;
case GB2312_16x16:
BaseAdd=0x0C30DE;
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;
break;
case BATTERY_12x12:
BaseAdd=0x3F4003;
Address = BaseAdd+fontCode*24;
break;
}
return Address;
}
OSD.zip_GT32L32S0140_msp430
版权申诉
5星 · 超过95%的资源 169 浏览量
2022-09-19
11:02:33
上传
评论
收藏 2KB ZIP 举报
御道御小黑
- 粉丝: 59
- 资源: 1万+
最新资源
- 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习领域中一种非常重要的神经网络结构,特
- DHT11温湿度传感器是一款高性能、低成本的数字温湿度复合传感器 它集成了温度感应和湿度感应功能,可以准确地测量环境中的温度和湿
- eMMC的压力测试工具
- JUC代码演示 Java多线程并发
- 基于matlab实现的数据挖掘机期末大挖掘.rar
- 基于matlab实现的势函数非线性和感知机线性三分类,并画出分界图.rar
- 基于matlab实现的油藏模拟作业,地下油水两相渗流.rar
- CS144 Lab2 (2024) 详细解析
- 中考实验视频.zip
- dam-词频统计demo笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈