嵌入式编程之时序图讲解
对于芯片驱动的编写,需要严格按照芯片手册上的时序图上的定义。看懂时序图这是每个合格嵌入式软件工程师都要掌握的基本技能,为此特意找到下面这个例子,用这个例子介绍时序图还是比较直观的。
图中时序线的名称及作用
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;
}
转自:https://blog.csdn.net/snail_turbo/article/details/20568237