周立功:深入浅出AMetal谈SPI总线和IIC 总线.doc

上传人:白大夫 文档编号:3406026 上传时间:2019-08-22 格式:DOC 页数:3 大小:16KB
返回 下载 相关 举报
周立功:深入浅出AMetal谈SPI总线和IIC 总线.doc_第1页
第1页 / 共3页
亲,该文档总共3页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《周立功:深入浅出AMetal谈SPI总线和IIC 总线.doc》由会员分享,可在线阅读,更多相关《周立功:深入浅出AMetal谈SPI总线和IIC 总线.doc(3页珍藏版)》请在三一文库上搜索。

1、周立功:深入浅出AMetal谈SPI总线和IIC 总线第五章为深入浅出AMetal,本文内容为5.5 S5.5 SPI 总线 5.5.1 初始化5.5.2 接口函数1 从机实例初始化2 设置从机实例3 传输初始化4 消息初始化5 在消息中添加传输6 启动SPI 消息处理7 先写后读8 连续两次写 5.5.3 SPI 扩展接口数据宽度:74HC595 只有8 个并行输出口,因此每次传输的数据宽度为8 位。SPI 模式:8 位数据是在CP 时钟信号上升沿作用下依次送入74HC595 的,因此在空闲时对时钟没有要求。如果选择空闲时钟极性为低电平(CPOL=0),则必须在第一个时钟边沿(上升沿)采样数

2、据(CPHA=0),即模式0。反之,如果选择空闲时钟极性为高电平(CPOL=1),则必须在第二个时钟边沿(上升沿)采样数据(CPHA=1),即模式3。因此选择模式0 和模式3 均可,后续的程序选择模式3 作为范例。最高时钟频率:虽然74HC595 最高时钟频率高达100MHz,但MCU 最高主频只有30MHz,因此最高时钟频率设置为一个相对合理的范围,比如,3000000Hz(3MHz)。片选引脚:片选引脚为PIO0_13。5.6 I2C 总线 5.6.1 初始化 5.6.2 接口函数1 从机实例初始化2 写操作3 读操作 5.6.3 I2C扩展接口在使用am_i2c_read()函数前,需要

3、先使用am_i2c_mkdev()初始化与LM75B 对应的I2C从机实例,便于LPC824 读取温度值。初始化从机实例时,还需要知道两个重要的信息:器件从机地址和实例属性。LM75B 的从机地址为7 位,1001xxx,其中地址位02 分别与硬件连接的A0A2 一一对应。由于A0A2 均与地连接,因此xxx 的值均为0,LM75B 的从机地址为0x48。实例属性可分为从机地址属性、应答属性和器件内子地址属性,LM75B 的从机地址为7 位,其对应的属性标志为AM_I2C_ADDR_7BIT。如果从机实例不能应答,则设置AM_I2C_IGNORE_NAK 标志。一般来说,标准的I2C从机实例可

4、产生应答信号,除非特殊说明,否则都不需要该标志。LM75B 共计有4 个寄存器,详见表5.18。由于寄存器的地址都为8 位,因此器件内子地址为一个字节,对应的属性标志为:AM_I2C_SUBADDR_1BYTE。由于只有一个字节,所以没有高字节与低字节之分, 也就不需要AM_I2C_SUBADDR_MSB_FIRST 或AM_I2C_SUBADDR_LSB_FIRST 标志。表5.18 寄存器功能使用am_i2c_mkdev()初始化一个LM75 从机实例的示例代码详见程序清单5.83。程序清单5.83 初始化一个与LM75 对应的I2C 从机实例初始化从机实例后,即可使用am_i2c_rea

5、d()读取温度值,由表5.18 可知,温度值存于地址为0x00 的寄存器中,包含了两个字节的温度值,且是只读的。因此,可以直接使用am_i2c_read()读取子地址为0x00 的两字节内容,即温度值,使用范例详见程序清单5.84。程序清单5.84 读取温度值读取的这两字节数据表示的温度值是多少呢?这两个字节具体表示的温度值的含义可从芯片的数据手册获取。温度是以双字节16 位二进制补码方式表示的,分别保存在字节0和字节1 中,首先读出的是字节0 的数据。字节0 中保存了温度的整数部分,字节1 中保存温度的小数部分,仅高3 位有效,因此温度的分辨率为1/23 = 0.125。如果将字节0 和字节

6、1 合并为一个16 位有符号整数的话,则这个16 位有符号整数便是实际温度的256(28)倍。如果系统支持浮点数,则使用以下公式即可获得当前温度值:当前温度值(浮点数变量)= (字节0 的值28 + 字节1 的值)/ 256.0在没有硬件浮点运算单元的MCU 中,这样的公式在计算时效率是非常低的。在实际使用过程中,一般也并不需要得出浮点数的温度值,仅仅在使用时稍加处理即可。比如,对于数码管显示温度值,只需要分别显示温度值的整数部分(使用整数表示)和小数部分(使用整数表示)即可,并不需要计算出浮点数。LM75 的接口函数声明详见程序清单5.85。程序清单5.85 LM75 接口(lm75.h)其中,lm75_read()的作用是读取LM75 温度值,其返回值(16 位有符号数)为实际温度的256 倍,其相应的实现(lm75.c)详见程序清单5.86。程序清单5.86 LM75 接口的实现(lm75.c)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1