新唐科技Cortex-M0 培训资料.ppt_第1页
新唐科技Cortex-M0 培训资料.ppt_第2页
新唐科技Cortex-M0 培训资料.ppt_第3页
新唐科技Cortex-M0 培训资料.ppt_第4页
新唐科技Cortex-M0 培训资料.ppt_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

numicro cortex-m0 i2c,议题,i2c协议 特性 寄存器映射 i2c应用 q&a,i2c-bus 一般特性,一种两线双向总线,由sda (data) 和 scl (clock)组成, 可以包含多个masters 和多个slaves设备 sda 和scl都是双向的,open-drain (quasi-mode)驱动类型, 经过上拉电阻连到一个正向电压 数据传输通过scl同步,i2c 协议,产生start 或者重复start 信号 传输从设备地址 数据传输 产生stop 信号,start 信号代表传输开始,mater 传输一个7-bit 的slave 地址和一个读/写比特,数据传输阶段 (例如:1 个字节的数据),stop 信号代表传输结束或者重复的 start 信号代表下一个传输开始,start, repeated start 和 stop,master 发出start信号初始化一次传输 master可以发出repeated start信号连续传输 master 可以通过stop信号来结束传输,应答,每个传输的字节都在第9个scl时钟的时候,跟一个应答比特. 如果从设备发出not acknowledge (nack)信号, 主设备可以发送一个stop信号来中断数据传输, 也可以产生重复start 信号来启动新的传输. 如果主设备作为接收设备发送了not acknowledge (nack) 信号给从设备, 从设备释放sda 线, 让主设备可以产生 stop 或者 重复start 信号.,应答,nack: high level,ack: low level,特性(1/2),和philips i2c 标准兼容, 支持主/从 模式 支持主/从传输速度达1mbit/s ( fast-mode plus ) 主和从设备之间双向数据传输 同时传输的主设备间仲裁,总线上的串行数据不会破坏 串行时钟同步可以让在同一个串行总线上的设备有不同的传输速率 内嵌一个14比特超时 计数器,如果i2c总线挂起并且超时计数器溢出,i2c中断将发生. 支持时钟除频,允许灵活的速率控制,特性(2/2),输出高需要加外部上拉电阻 支持7比特寻址模式 i2c总线控制器支持多地址识别 ( 四个从设备地址,带掩码功能) 操作模式 主传输 主接收 从传输 从接收 gc 呼叫,slave 模式地址设定,可以识别多个地址 使用2组寄存器来设定slave模式时的地址 i2caddrx: 4 个slave 地址寄存器 i2adrmx: 4 个slave地址mask 寄存器,寄存器映射,i2c 控制寄存器,assert ack,i2sstatus 状态改变,在master模式时发送“stop” 信号,当总线空闲时发送“start” 或者“repeat start” 信号,i2c hardware enable,i2c interrupt enable,i2c 控制寄存器(i2con),ei: enable interrupt. happen when status change ensi: enable i2c controller sta:发送start信号 sto: 发送stop信号 si: i2c interrupt flag. set when status change. 这个bit被置,i2c将停止动作 aa: 回ack给发送方。如果si清除之后,没有set aa bit, 收到数据的时候将回nack,i2c 状态寄存器(i2cstatus),8 比特只读寄存器 3 lsb 总是0 26 个状态 硬件设定 si标志以后,状态码可以从这个寄存器得到 “00h” 代表总线出错,master 发送数据到slave,上面不同阶段对应的4个比特 sta,sto,si,aa的值,1,0,0,x,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,si 标志由硬件设定,trm 5.6.6,master transmit mode,i2c 超时方块图,14 比特计数器 可以避免 i2c 总线hang 住,i2c 示例代码 (1/8),读 24lc64(i2c serial eeprom) 写 24lc64,i2c示例代码 (2/8),i2c示例代码 (3/8),void write_24lc64(uint32_t address, uint8_t data) uint32_t u32hclk; u32hclk = drvsys_gethclk() * 1000; /*open i2c0 and set clock = 100kbps */ drvi2c_open(i2c_port0, u32hclk, 100000); /send i2c start drvi2c_ctrl(i2c_port0, 1, 0, 0, 0); /set start while (i2c0-con.si = 0); /poll si flag /send writer command i2c0-data = 0xa0; /send writer command drvi2c_ctrl(i2c_port0, 0, 0, 1, 0); /clr si flag while( i2c0-con.si = 0 ); /poll si flag /send address high i2c0-data = (address8) /poll si flag,i2c示例代码 (4/8),/send address low i2c0-data = address ,i2c示例代码 (5/8),uint8_t read_24lc64(uint32_t address) uint32_t u32hclk; uint8_t flash_data; u32hclk = drvsys_gethclk() * 1000; /* open i2c0 and set clock = 100kbps */ drvi2c_open(i2c_port0, u32hclk, 100000); /send i2c start drvi2c_ctrl(i2c_port0, 1, 0, 0, 0); /set start while (i2c0-con.si = 0); /poll si flag /send writer command i2c0-data = 0xa0; drvi2c_ctrl(i2c_port0, 0, 0, 1, 0); /clr si while( i2c0-con.si = 0 ); /poll si flag /send address high i2c0-data = (address8) /poll si flag,i2c示例代码 (6/8),/send address low i2c0-data = address,i2c示例代码 (7/8),/send i2c stop drvi2c_ctrl(i2c_port0, 0, 1, 1, 0); /clr si and set stop drvi2c_close(i2c_port0); return flash_data; ,i2c示例代码 (8/8),/*- main function -*/ int32_t main (void) uint32_t temp_value; / set i2c i/o drvgpio_initfunction(f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论