119

帖子

0

TA的资源

一粒金砂(初级)

21
 
支持楼主,加油啊~。。。
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

22
 
写的很详细不错不错,加油:D
 
个人签名Be myself!
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

23
 

第四讲:OLED的显示

今天讲讲OLED的显示,OLED做显示屏的都知道,是一种最近比较流行的显示屏,称为:即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从2003年开始,这种显示设备在MP3播放器上得到了广泛应用。评估板上也使用了一块OLED的显示屏。

首先我们看下OLEDPDF和评估板电路接口:

电路接口选择了5个端口,如下图

对照下面的OLED端口列表我们可以得知:

     CSN:OELD片选端

     RESN:OLED复位端

     D/CN:读写选择端

     SCLK:OLED时钟端

     SDIN:数据输入端

 

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

24
 

这里面

BS1BS2分别接地,可知这里面选择了serial interface模式了

那下面我们就看看serial interface模式了的输入信号时序图:

假设我们没有显示库的话,写程序就要按照这个时序图写,但是评估板里面给了显示屏的显示库,那我们自己调用算了:

  "drivers/rit128x96x4.h"头文件一调用就OK

那么显示函数就随便在这个库里面选一个吧:

     RIT128x96x4StringDraw就用这个吧

那么和点亮数码管一样,我们直接写这个函数就可以了,这样的话就非常的简单了:

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/sysctl.h"

#include "drivers/rit128x96x4.h"

 

int

main(void)

{

  

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                   SYSCTL_XTAL_8MHZ);

 

    RIT128x96x4Init(1000000);  //屏幕初始化

    RIT128x96x4StringDraw("Hello eeWorld!", 20, 10, 15);  //显示位置

       RIT128x96x4StringDraw("thinks eeworld!",20,20,15);

    while(1)

    {}

}

下载程序后就显示了两行字:Hello eeWorld!

                                                   thinks eeworld!

 

 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

25
 
支持,哈哈
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

26
 

学习笔记5 :串口通信

学习笔记5 :串口通信

简介 通用异步收发器(UARTAPI 提供了一组使用 Stellaris UART 模块的函数。提供的函 数用来配置和控制 UART 模块、发送和接收数据、管理 UART 模块的中断。 Stellaris UART 执行并串转换和串并转换功能。它在功能上与 16C550 UART 非常类似, 但是两者的寄存器不兼容。

写串口在大多数的系统里都有,51里我们常常使用串口,那LM3S的串口驱动怎么写了?

基本步骤还是先查找LM3S外设驱动指南,找到相关的函数,我们这里要用的以下几个函数:

UARTCharGetNonBlocking 从指定端口接收一个字符。 函数原型: long UARTChaGetrNonBlocking (unsigned long ulBase) 参数: ulBase UART 端口的基址。

UARTIntStatus 获取当前的中断状态。 函数原型: unsigned long UARTIntStatus(unsigned long ulBase, tBoolean bMasked) 参数: ulBase UART 端口的基址。 bMasked:如果需要原始的中断状态,则 bMasked False;如果需要屏蔽的中断状态, bMasked 就为 True

UARTIntEnable 使能单个 UART 中断源。 函数原型: void UARTIntEnable(unsigned long ulBase, unsigned long ulIntFlags) 参数: ulBase UART 端口的基址。 ulIntFlags 是要使能的中断源的位屏蔽

UARTIntClear 清除 UART 中断源。 函数原型: void UARTIntClear(unsigned long ulBase, unsigned long ulIntFlags) 参数: ulBase UART 端口的基址。 ulIntFlags 是要清除的中断源的位屏蔽。

UARTConfigSetExpClk 设置一个 UART 的配置。 函数原型: void UARTConfigSetExpClk(unsigned long ulBase, unsigned long ulUARTClk, unsigned long ulBaud, unsigned long ulConfig) 参数: ulBase UART 端口的基址。 ulUARTClk 是提供给 UART 模块的时钟速率。 ulBaud 是希望的波特率。 ulConfig 是端口的数据格式(数据位的数目、停止位的数目和奇偶位)。

在函数库找到了,下面就来写函数,这里面头文件要加上#include "driverlib/uart.h"

我们这里面分为主函数,和子函数形式,把串口中断和发送字符串分别写成子函数:

在本开发板上是使用的模拟串口形式:

选择UART0端口。

[ 本帖最后由 0212009623 于 2010-11-23 17:47 编辑 ]
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

27
 

程序如下:

#include "inc/hw_ints.h"

#include "inc/hw_memmap.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/gpio.h"

#include "driverlib/interrupt.h"

#include "driverlib/sysctl.h"

#include "driverlib/uart.h"

#include "drivers/rit128x96x4.h" 

void UARTInt(void)

{

    unsigned long ulStatus;

 

   

    ulStatus = UARTIntStatus(UART0_BASE, true);                   //判断中断

 

    UARTIntClear(UART0_BASE, ulStatus);                                //清中断

 

    while(UARTCharsAvail(UART0_BASE))                             //     FIFO判断

    {

      

        UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE));

    }

}

  

void

UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)          //发送字符串

{

 

    while(ulCount--)

    {

  

        UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);

    }

}

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

28
 

Int main(void)

{

  

    SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC| SYSCTL_OSC_MAIN |

                   SYSCTL_XTAL_8MHZ);

                                                                                              //  系统时钟设置

 

    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);      系统//系统使能UART0

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);            //使能GPI0端口A

    IntMasterEnable();                                           //设置串口中断

                                                                                      

    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);         //设置端口A0口和1口为UART 管脚

    UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,

                        (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |

                         UART_CONFIG_PAR_NONE));     //配置 UART

 

    IntEnable(INT_UART0);                                               // 初始化UART0

UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); // UART0口使能

  UARTSend((unsigned char *)"EEWORLD GOOD", 15);                               //串口发送数据

    while(1)

    {

    }

}

 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

29
 
精神可嘉,支持一下!
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

30
 

学习笔记6:SD卡的初识:

学习笔记6SD卡的初识:

本人也是第一次学习SD卡,有啥不对的地方欢迎大家拍砖,呵呵

   很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移动,有几种体积的尺寸可供选择(标准的SD卡尺寸,以及TF卡尺寸),能满足不同应用的要求。只需要4IO口,就可以外扩一个最大达32GB以上的外部存储器,容量选择尺度很大,更换也很方便,而且方便移动,编程也比较简单,是单片机大容量外部存储器的首选。

SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于19998月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。

下面我们回到LM3S开发板上来,看看通过LM3S怎么读取使用SD卡:

      首先我们先来分析下TISD卡例程,通过例程学习SD卡的读取时最好的方法:

例程里源文件包括上面几个文件,我们一个一个的来认识下:

Cmdline.c:字符串命令函数

ff.c: FatFs文件库函数集

mmc-ek.lmes8962.c: SD卡的操作函数集

sd_card.c:,也就是用户自己要编写的函数,要求我们实现什么功能,执行什么功能

startup_rvmdk.c:启动函数。

uartstdio.c: uart端口的读写传输函数。

这里面决定性作用的就是FatFs文件的移植,和主函数的编写,这应该是用户关心的问题,uart端口的读写在TI例程里用于在串口终端显示,在SD卡读取中不是必须的。所以在我学习过程中,认为主要是要弄清楚:FatFs文件的移植,和要实现SD卡的读写功能的主函数的编写。

我首先来学习的是FatFs文件的移植,

FATFS是一个专为小型嵌入式系统调计的通用文件系统模块。FATFS是用ANSI C(标准C语言)相兼容的语法书写,并且完全地实现了与磁盘IO层分离,因此它是与硬件无关的。它完全不需要任何修改就能被集成到低成本的微控器(MCU)中,WINDOWS FAT相兼容的文件系统。与平台无关,便于移植。对代码存储器的大小和运行时所需RAM的大小及其它硬件性能要求很低,所以FATFS可以很好地运用在低成本的嵌入式系统中。

 

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

31
 

应用层程序结口如下

f_mount - 注册和取消工作区

f_open - 打开或者创建文件

f_close -关闭一个文件

f_read - 从文件中读取数据

f_write - 文件中写入数据

f_lseek - 移动文件读指针(RP),扩展文件大小

f_truncate - 缩减文件大小

f_sync - 清空缓存数据,实现数据同步

f_opendir - 打开一个目录

f_readdir - 列举目录中的条目(包括文件和子目录)。

f_getfree - 获取可用簇

f_stat - 获取文件属性

f_mkdir - 创建文件

f_unlink - 删除文件或者目录

f_chmod - 更改属性

f_utime -更改时间戳

f_rename - 重命名或者移动一个文件或目录

f_mkfs - 格式化磁盘

f_forward - 将文件数据直接送入数据流中

f_chdir - 改变当前所在目录

f_chdrive - 改变当前所在驱动器

f_gets -读字符串

f_putc - 写一个字符

f_puts - 写字符串

f_printf - 写入一个格式化字符串

磁盘I/O接口

disk_initialize - 磁盘初始化

disk_status - 获取磁盘属性

disk_read - 读扇区

disk_write - 写扇区

disk_ioctl - 独立的磁盘控制资源

get_fattime - 获取时间

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

32
 

TI为了适应LM3S芯片,在提供的历程里有ff.c文件函数库,也就是说这里面用户可以不用改变其中内容,它与硬件层没有关系,是独立的文件系统,也就是说只有移植过来就可以了。

SD卡的操作

这个功能应该在mmc-ek.lmes8962.c中,它是关键,也就是一些底层与SD卡相关连的函数:

此函数先定义了SD卡管脚和基本命令:

#define CMD0    (0x40+0)    /* GO_IDLE_STATE */

#define CMD1    (0x40+1)    /* SEND_OP_COND */

#define CMD8    (0x40+8)    /* SEND_IF_COND */

#define CMD9    (0x40+9)    /* SEND_CSD */

#define CMD10    (0x40+10)    /* SEND_CID */

#define CMD12    (0x40+12)    /* STOP_TRANSMISSION */

#define CMD16    (0x40+16)    /* SET_BLOCKLEN */

#define CMD17    (0x40+17)    /* READ_SINGLE_BLOCK */

#define CMD18    (0x40+18)    /* READ_MULTIPLE_BLOCK*/

#define CMD23    (0x40+23)    /* SET_BLOCK_COUNT */

#define CMD24    (0x40+24)    /* WRITE_BLOCK */

#define CMD25    (0x40+25)    /* WRITE_MULTIPLE_BLOCK */

#define CMD41    (0x40+41)    /* SEND_OP_COND (ACMD) */

#define CMD55    (0x40+55)    /* APP_CMD */

#define CMD58    (0x40+58)    /* READ_OCR */

/* Peripheral definitions for EK-LM3S8962 board */

// SSI port

#define SDC_SSI_BASE            SSI0_BASE

#define SDC_SSI_SYSCTL_PERIPH   SYSCTL_PERIPH_SSI0

// GPIO for SSI pins

#define SDC_GPIO_PORT_BASE      GPIO_PORTA_BASE

#define SDC_GPIO_SYSCTL_PERIPH  SYSCTL_PERIPH_GPIOA

#define SDC_SSI_CLK             GPIO_PIN_2

#define SDC_SSI_TX              GPIO_PIN_5

#define SDC_SSI_RX              GPIO_PIN_4

#define SDC_SSI_FSS             GPIO_PIN_3

#define SDC_SSI_PINS            (SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK)

// GPIO for card chip select

#define SDC_CS_GPIO_PORT_BASE      GPIO_PORTG_BASE

#define SDC_CS_GPIO_SYSCTL_PERIPH  SYSCTL_PERIPH_GPIOG

#define SDC_CS                     GPIO_PIN_0

SD卡一般支持2种操作模式:

1SD卡模式;

2SPI模式;

主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。

SD卡的引脚排序如下图所示:

 

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

33
 

SD卡只能使用3.3VIO电平,所以,MCU一定要能够支持3.3VIO端口输出。注意:在SPI模式下,CS/MOSI/MISO/CLK都需要加10~100K左右的上拉电阻。

SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送>74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64CLK,剩下的10CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400Khz !。SPI模式下几个重要的操作命令,如下表所示:

接着我们看看SD卡的初始化,SD卡的典型初始化过程如下:

1、初始化与SD卡连接的硬件条件(MCUSPI配置,IO口配置);

2、上电延时(>74CLK);

3、复位卡(CMD0);

4、激活卡,内部初始化并获取卡类型(CMD1(用于MMC卡)、CMD55CMD41);

5.、查询OCR,获取供电状况(CMD58);

6、是否使用CRCCMD59);

7、设置读写块数据长度(CMD16);

8、读取CSD,获取存储卡的其他信息(CMD9);

9、发送8CLK后,禁止片选;

这样我们就完成了对SD卡的初始化,这里面我们一般设置读写块数据长度为512个字节,并禁止使用CRC。在完成了初始化之后,就可以开始读写数据了。

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

34
 

SD卡读取数据,这里通过CMD17来实现,具体过程如下:

1、发送CMD17

2、接收卡响应R1

3、接收数据起始令牌0XFE

4、接收数据;

5、接收2个字节的CRC,如果没有开启CRC,这两个字节在读取后可以丢掉。

68CLK之后禁止片选;

以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下:

1、发送CMD24;

2、接收卡响应R1

3、发送写数据起始令牌0XFE4、发送数据;

5、发送2字节的伪CRC

68CLK之后禁止片选;

以上就是一个典型的操作SD卡过程。

这些操作过程TI已经很热心,很好很好的给我们总结在mmc-ek.lmes8962.c中了,这样是不是很好,那我们要实现什么功能就可以直接调用其中的函数来完成的,这样真是太方便了~~~~~~~~~~~~

 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

35
 
赞一个,不错
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(初级)

36
 

回复 11楼 0212009623 的帖子

将楼主的LED闪烁代码下载到TI的8962开发板上,LED没有闪烁。
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

37
 

原帖由 yuanzhiqian 于 2010-12-11 22:27 发表 将楼主的LED闪烁代码下载到TI的8962开发板上,LED没有闪烁。

附上LED闪烁代码

前面几次的代码:

 

[ 本帖最后由 0212009623 于 2010-12-28 16:25 编辑 ]

led闪烁.rar

66.89 KB, 下载次数: 21

学习笔记1系统时钟.rar

66.89 KB, 下载次数: 20

学习笔记2定时器.zip

81.28 KB, 下载次数: 28

学习笔记3中断按键.zip

77.23 KB, 下载次数: 25

学习笔记4OLED显示.zip

123.07 KB, 下载次数: 24

学习笔记5串口通信.zip

82.7 KB, 下载次数: 43

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

38
 
楼主给力啊
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

39
 
SD卡的详细程序有没有
我的邮箱 646571959@qq.com
谢谢
 
个人签名学习技术,为国效力
 
 

回复

27

帖子

0

TA的资源

一粒金砂(初级)

40
 
zhenhao楼主真好正在学习:D
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表