首先要驱动屏就需要了解最基本的IO寄存器配置现在我来介绍一些基本的GPIO操作需要配置的寄存器:ADE/SPSR寄存器决定了输入引脚的特性,比如ADE/SPSR=0时输入的值为IO引脚读取的值,ADE/SPSR=1输入的值总是为0.需要配置的寄存器有PFR,PDIR,PDOR,PCR,DDR,EPFR;现在分别说下各个寄存器的作用:
ADE:这个寄存器决定了是否IO端口将被使用为特殊引脚(一个模拟输入引脚)还是一个数字输入还是数字输出引脚。
SPSR:该寄存器设置是否IO端口将被使用为一个特殊引脚(USB或者震荡引脚)或者一个数字输入输出引脚
PFR:该寄存器设置是否IO端口将被使用为GPIO功能还是一个外设功能的输入输出引脚
PCR:该寄存器去设置是否IO端口的上拉电阻将被连接还是断开,如果这个IO端口是被使用为数字输入引脚或者双向的数字引脚。
DDR:该寄存器去设置是否IO端口将被使用为输入引脚还是输出引脚如果IO端口被使用为GPIO功能。(备注:如果一个引脚被选择作为一个外设IO,设定的值是无效的)
PDIR:该寄存器去读取IO端口的电平状态
如果IO端口是被使用为数字输入引脚,它读出输入的值
如果IO端口是被使用为数字输出引脚,它读出输出的值
如果IO端口是被使用为一个模拟输入引脚,它总是读出0
PDOR:该寄存器去设置输出状态如果IO端口是被使用为一个GPIO的功能
当值设置为0时,它输出低电平
当值设置为1时,输出高电平(备注:如果引脚设置为GPIO输入时或者外设的输入输出功能时,设置值是不确定的)
EPFR:该寄存器去选择一外设的输入输出功能和设置重分配功能
设置外设输出引脚:它设置是否为IO端口产生输出,此外,它也可以设置那个IO端口一个外设功能将被重分配给每个引脚
设置外设输入引脚:它可以设置那个IO端口一个外设功能将被重分配给每个引脚。
设置外设双向引脚:
它可以设置那个IO端口一个外设功能将被重新分配给每个引脚
对于每个寄存器的介绍先告一段落,现在我们来说下如何配置IO端口为GPIO:
首先设置ADE/SPSR=0时输入的值为IO引脚读取的值,其次PFR=0(1:选择的是外设功能,0选择的是GPIO功能),其实是设置DDR(0:设置为输入功能,1为输出功能)相应的数据输入寄存器是PDIR(1:为输入高电平,0:为输入低电平)数据输出寄存器PDOR(1:为输出高电平,0:为输出低电平)
介绍完了配置GPIO功能现在来讲讲外设功能:
首先设置ADE/SPSR=0时输入的值为IO引脚读取的值,设置PFR=1,设置EPFR设置为外设引脚,设置EPFR输出输入EPFR输入输出使能.(要了解具体的操作请查看数据手册241页)
端口设置寄存器有:PFR0到PFR8
上拉设置寄存器有:PCR0-PCR7
端口输入输出方向寄存器:DDR0-DDR8
端口输入数据寄存器:PDIR0-PDIR8
端口输出数据寄存器:PDOR0-PDOR8
模拟输入设置寄存器:ADE
特殊端口输入寄存器:SPSR
外扩引脚功能设置寄存器:EPFR00-EPFR10(EPFR03备用)
现在我们来配置下PFRX:如下图所示:
从图上可知每个寄存器都是有16位,当相应的位设置为0时为GPIO功能,当设置为1时相应的引脚为外设输入输出功能。PFR0的0位设为P00,15为P0F,其他端口设置寄存器以此类推。JTAG引脚被选择为P04-P00初始值为1
上拉寄存器配置:
这PCR0的0位设置为P00,15位为P0F其他以此类推,当使用I2C功能时,使用外部上拉通过设置PCRX=0;
关于如何配置DDR寄存器:如图所示
端口数据输入寄存器配置:PD0Rx
端口数据输出寄存器配置:PDIRx
有关ADE的配置:
呵呵,弄了这么多现在应该可以解决LCD驱动的问题了,现在我们来一起分析下如何编写LCD驱动
显示命令:
基本设置:
1:ADC=0(正常)
2:SHL=1(反转)
3:LCD像素选择=1/9
4:初始化显示行=0
5:显示ON/OF=OFF(正常)
6:反转显示(ON/OF)=OFF(正常)
7:设置电源控制设置:
8:显示ON/OF=ON
4.3复位LCD模块
这个LCD模块将被初始化通过使用RES
当打开VDD和VSS电源,维持RES在低电平,在电源提供稳定后释放复位状态(RES=1)
4.6基本的操作序(初始化序列)
1:打开电源VDD和VSS当维持RES=0时
2:等待电源稳定
3:释放RES复位信号(RES=1)
4:LCDbias=1/9
5:ADC=Normal
6:SHL=reverse
7:初始化Displayline=0
8:电源控制(延迟50ms)
9:电源控制(延迟50ms)
10:电阻选择
11:设置参考电压模式
12:设置参考电源电阻
13:显示打开
14:设置页地址为0
15:设置列地址
16:写显示的数据
17:写其他显示数据
从原理图上可以看到如下信息:
LCD_CS PORT1.7
LCD_CD PORT1.6
LCD_WR PORT1.5
LCD_RD PORT1.4
LCD_SCK PORT1.3
LCD_MOSI PORT1.2
LCD_C86 PORT1.1
LCD_PS PORT1.0
LCD_DATA[0..7] PORT5.[0..7]
从数据手册上我们可知12864屏的行有128行有64列有8页
设置LCD命令:
Display_On 0xAF // A0,RD,WR:010
Display_Off 0xAE // A0,RD,WR:010
这两句话就是配置屏幕是否亮灭 0xaf: 1010 1111 最后一位决定了屏的亮灭(1:为亮,0为灭)
设置Set_Start_Line_0为0x40(01 000000)
设置页的地址Set_Page_Addr_0为:0xb0
设置列地址Set_ColH_Addr_0(高四位):0x10
设置列列地址Set_ColLAddr_0(低四位):0x00
其他的控制寄存器主要是上面的图片显示的方式配置的
[
本帖最后由 wateras1 于 2012-6-25 12:15 编辑 ]