在上个例子中,已经在ASF添加了ILI93xx模块,并做好了相关的声明。这次就做好SMC的配置,然后使用ASF提供的API在屏幕上打印出”Hello World!”字样。

一、 电路图

开发板的LCD连接器的接线如图所示。这些连线均按照SMC相应引脚的功能进行了连接,这样的意图很明显就是要让SMC来和LCD进行交互。

有两个引脚需要注意:

  1. PD18引脚的外设A是NCS1,即让LCD连接至SMC的片选设备1中。

  2. RS线表示“寄存器选择”,根据该引脚的不同电平,会选择访问不同的寄存器。而PC19引脚的外设A是地址线A1,这样连接的影响在后面会说明。

二、 SMC与LCD控制器的交互

在与一些存储设备进行交互时,会有一个比较复杂的时序。比如写入该LCD控制器的寄存器时:

而且,引脚间电平改变的时间差也是有一定的规定的。

若使用SMC的话,做好相应的配置后,就会自动地完成这些时序的控制。并且,芯片会对一段地址进行映射,当访问相应区间的地址时,就会交由SMC来完成实际的访问工作

而LCD控制器为SMC的片选设备1,所以在访问地址在区间 [0x6100 0000, 0x61FF FFFF] 时,会实际访问到LCD控制器。而RS接的是数据线A1,所以根据访问地址的第1位(从0数起)的不同,会影响RS引脚电平的高低。如在访问地址0x6100 0000时RS为低电平,而访问0x6100 0002时其为高电平。

三、 SMC的时序设置

可以在LCD控制器的芯片手册上找到相应的时序:

MCK为96 MHz时,设置如下:

#define ILI93XX_LCD_CS 1
#define SMC_CS SMC->SMC_CS_NUMBER[ILI93XX_LCD_CS] /* 如果使用ASF的PMC模块,调用这个即可使能外设的时钟*/
pmc_enable_periph_clk(ID_SMC); SMC_CS.SMC_SETUP =
SMC_SETUP_NWE_SETUP(1)
| SMC_SETUP_NCS_WR_SETUP(1)
| SMC_SETUP_NRD_SETUP(1)
| SMC_SETUP_NCS_RD_SETUP(1);
SMC_CS.SMC_PULSE =
SMC_PULSE_NWE_PULSE(5)
| SMC_PULSE_NCS_WR_PULSE(5)
| SMC_PULSE_NRD_PULSE(15)
| SMC_PULSE_NCS_RD_PULSE(15);
SMC_CS.SMC_CYCLE =
SMC_CYCLE_NWE_CYCLE(10)
| SMC_CYCLE_NRD_CYCLE(300);
/* 由NRD或NWE信号控制读写 */
SMC_CS.SMC_MODE =
SMC_MODE_READ_MODE
| SMC_MODE_WRITE_MODE;

这个设置不用太严格,如ASF示例代码中的设置就和这有点差距,但是都能够成功运行。另外,ASF中的示例代码也是很好的学习材料。在Atmel Studio的Start Page中可以打开示例项目:

四、 LCD模块的使用

在conf_board.h中,可以看到有两个配置项。一般情况下,这两个配置已经在开发板支持模块中做好定义了。但是,看完上一小节的话,也应该知道它做出如此配置的原因。

由于这个LCD控制器的使用略为复杂(它的芯片手册有100多页),而ASF也实现了相关的模块,所以这次就继续使用ASF了。

ILI93xx中,实现了许多控制与绘图模块,也包含了一个英文字库,可以很方便的进行基本图形和英文的绘制。

  1. LCD的初时化。

    struct ili93xx_opt_t lcd_init_opt;
    lcd_init_opt.ul_width = ILI93XX_LCD_WIDTH;
    lcd_init_opt.ul_height = ILI93XX_LCD_HEIGHT;
    lcd_init_opt.foreground_color = COLOR_BLACK;
    lcd_init_opt.background_color = COLOR_WHITE; /* 初始化 LCD */
    ili93xx_init(&lcd_init_opt);
    /* 启动LCD */
    ili93xx_display_on();
  2. 将屏幕填充为天蓝色。

    /* 像素格式为aRGB-888 */
    const uint32_t sky_blue_rgb = 0x87CEEB;
    ili93xx_set_foreground_color(sky_blue_rgb);
    ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT);
  3. 绘制文字。

    /* 绘制文字 */
    ili93xx_set_foreground_color(COLOR_BLACK);
    ili93xx_draw_string(50, 150, (uint8_t *)"Hello World!");

还有许多其他的API,比如控制显示方向等等,可以查看API文档或者相应的头文件。

SAM4E单片机之旅——14、LCD之SMC的配置的更多相关文章

  1. SAM4E单片机之旅——13、LCD之ASF初步

    在Atmel Studio 6中,集成了Atmel Software Framework(ASF框架).通过它提供的库,可以很快速地完成新的项目. 这次的最终目标使用ASF在LCD上显示出文字“Hel ...

  2. SAM4E单片机之旅——24、使用DSP库求向量数量积

    DSP(Digital Signal Processing,数字信号处理)中会使用大量的数学运算.Cortex-M4中,配置了一些强大的部件,以提高DSP能力.同时CMSIS提供了一个DSP库,提供了 ...

  3. SAM4E单片机之旅——23、在AS6(GCC)中使用FPU

    浮点单元(Floating Point Unit,FPU),是用于处理浮点数运算的单元. 为使用FPU,除了需要启用FPU外,还需要对编译器进行设置,以使其针对浮点运算生成特殊的指令.虽然在Atmel ...

  4. SAM4E单片机之旅——18、通过AFEC(ADC)获取输入的电压

    很多时候,一个电压不仅仅需要定性(高电平或者低电平),而且要定量(了解具体电压的数值).这个时候就可以用到模数转换器(ADC)了.这次的内容是测量开发板搭载的滑动变阻器(VR1)的电压,然后把ADC转 ...

  5. SAM4E单片机之旅——16、NAND Flash读写

    这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法. 一. 接线 这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA).引脚接线如下: 偷个懒, ...

  6. SAM4E单片机之旅——15、触屏输入与SPI通信

    开发板上配了一个电阻触摸屏,它的控制器是ADS7843,使用SPI进行通信.这次实现的功能是通过SPI接口与该控制器交互,获取触摸屏点击的坐标,并显示在LCD上.略为难点的是SPI作为同步时钟的一种, ...

  7. SAM4E单片机之旅——6、LED闪烁之按钮控制

    现在试试用按钮控制LED灯……让LED在一个按钮按下时亮起:弹起时灭掉. 主要目的是学习GPIO的输入及中断. 一. 电路 图中的J39-n是几个跳线插座,位置在开发板LCD附近,往下进行前要先确保跳 ...

  8. SAM4E单片机之旅——3、LED闪烁之定时器中断

    让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高 ...

  9. SAM4E单片机之旅——2、LED闪烁之轮询定时器

    之前我们使用空循环,达到了延迟的目的,但是这样子的延迟比较不精确.现在就使用实时定时器(RTT)来进行更为精确的计时.RTT虽然不是特别通用,在某些单片机上可能没有,但它较为简单. RTT内部有一个计 ...

随机推荐

  1. Origami – 用于 Quartz 的免费的交互设计框架

    Origami 是一个为 Quartz Composer 开发的免费的工具包——由Facebook设计团队创建,让交互设计原型更加简单,不需要编程. 如今,大多数设计师通过创建静态原型来表达要实现的应 ...

  2. hive的内部表与外部表创建

    最近才接触Hive.学到了一些东西,就先记下来,免得以后忘了. 1.创建表的语句:Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_na ...

  3. Event事件跨浏览器封装

    var Event = { //注册事件 addEvent: function(element,type,handler){ if(element.addEventListener){ //DOM2级 ...

  4. C# 生成BMP图片

    ;i<;i++) { Bitmap bmp=new Bitmap(this.pictureBox1.Image); Graphics g=Graphics.FromImage((Image)bm ...

  5. WebGL/X3DOM 跑在 iOS

    iOS是最早支持WebGL的移动操作系统之一,我们一直在努力让X3DOM运行在那些设备上.然而,标准的Safari浏览器默认是没有开启的.这种情况从iOS8发生改变,iOS8现在完全支持WebGL - ...

  6. 验证坐标在某片坐标区域内 php 代码

    之前碰到的这样一个需求,要将公司的服务范围在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内. 以下是PHP代码的实现 (仅验证坐标在某片坐标区域内) <? ...

  7. java注释指导手册

    译文出处: Toien Liu   原文出处:Dani Buiza 编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它. 我们已经在Java Code Geeks提供了丰富 ...

  8. jquery中的事件与动画

    一:事件 1.鼠标事件 eg:光棒效果 $(function () { $('li').mouseover(function () { //鼠标移过时 $(this).css('background' ...

  9. ahjesus 获取当前方法被调用执行的具体位置,包括命名空间和方法

    MethodBase method = ).GetMethod(); string ahjesus = method.ReflectedType.FullName + "." + ...

  10. 给我一个及时的问候——XMPP

    XMPP总的来说就是:基于XML数据结构,点对点的,及时通讯协议 是 Linux操作系统+Apache软件+mySql数据库 + php 编程语言 组成   开始时要导入 XMPPFrameWork框 ...