嵌入式编程之时序图讲解

/*
**********************************************************************************************************************************
* Name : 嵌入式之时序图讲解
* Author : MingMing
* Release : 2014/3/5
* Update : 2014/3/5
* E-mail : [email protected]
**********************************************************************************************************************************
*/
    对于芯片驱动的编写,需要严格按照芯片手册上的时序图上的定义。看懂时序图这是每个合格嵌入式软件工程师都要掌握的基本技能,为此特意找到下面这个例子,用这个例子介绍时序图还是比较直观的。


图中时序线的名称及作用
    RS:数据/状态字选择线 RS = L:传输状态字 RS = H:传输数据
    RW:读/写操作选择线 RW = L:写状态 RW = H:读状态
    E:片选 E = L:芯片处于关闭状态 E = H:芯片处于使能状态
    DB:数据传输总线
图中标注处说明
    1处:高电平
    2处:低电平
    3处:包含了高低线,控制线代表配置为高低均可,数据线代表传输的是数据
    4处:竖线代表的是生命线,代表一个对象在一段时间内的存在
    大家仔细观察会发现有很多t开头的标注,这些标注是非常重要的,时序图是一定要有时间定义的。下图为时序图的时序参数,在编写代码的时候一定要参照图中定义的时间。

时序图读操作编程


INT8U ReadData(void)
{
    INT8U iResult;
    E = L;           /* 芯片处于关闭状态 */
    RS = H;          /* 选择传输数据模式 */
    RW = H;          /* 选择读操作 */
    DelayNS(30);     /* tSP1 最小值:30ns 注意:在这里这么写只想让大家对时间概念深刻记忆一下,
                        根据控制器的执行速度可以省略掉,在很多单片机中一条指令执行时间大于30ns */
    E = H;           /* 芯片使能 tR 代表IO口翻转速度,速度取决于控制器硬件性能 */ 
    DelayNS(30);     /* tD为数据建立稳定时间,最大为100ns */
    iResult = DB;    /* 读出数据,DB代表的是实际控制器数据IO口 */
    DelayNS(120);    /* tPW为片选信号的保持时间 */
    E = L;           /* 关闭芯片,停止数据读取 */
    DelayNS(10);     /* tHD1为地址信号的保持时间 */
    RS = L;
    RW = L;
    return iResult;
}

时序图写操作编程

void WriteData(INT8U iData)
{
    E = L;           /* 芯片处于关闭状态 */
    RS = H;          /* 选择传输数据模式 */
    RW = L;          /* 选择写操作 */
    iResult = iData; /* 写数据,DB代表的是实际控制器数据IO口 */
    DelayNS(30);     /* tSP1 最小值:30ns 注意:在这里这么写只想让大家对时间概念深刻记忆一下,
                        根据控制器的执行速度可以省略掉,在很多单片机中一条指令执行时间大于30ns */
    E = H;           /* 芯片使能 tR 代表IO口翻转速度,速度取决于控制器硬件性能 */ 
    DelayNS(150);    /* tPW为片选信号的保持时间 */
    E = L;           /* 关闭芯片,停止数据读取 */
    DelayNS(10);     /* tHD1为地址信号的保持时间 */
    RS = L;
    RW = H;
}

    注意:嵌入式系统中采用的控制器的执行速度的不同,将直接影响代码的编写。例如普通单片机采用12MHz晶振,经过内部12分频后时钟频率变为1MHz,那么一个机器周期为1us,和上面时间表中的ns相差很多。IO口的翻转速度也是很重要的参数之一,有些场合不得不重视。


你可能感兴趣的:(知识点总结)