tag 标签: i/o

相关博文
  • 热度 22
    2014-12-30 09:45
    1211 次阅读|
    0 个评论
    成为一名嵌入式工程师,简单的单片机基础学习与应用是不可缺少的。学习单片机就是学习单片机的硬件结构,内部资源与外设的应用。在C语言中(极少量的汇编)掌握各种功能的初始化,启动与停止,实现各种功能函数的编写与调试。   ● 第一步:数字I/O的应用 在大多数的单片机实验中,跑马灯实验正是数字I/O的典型应用,也是跑马灯的实验被安排第一个的原因。通过将单片机的I/O引脚位进行置位或清零来点亮或关闭LED灯,虽然简单,但是这就是数字电路中的逻辑功能。数学I/O应用的实验还有按键实验,当按下某键时,某LED灯被点亮。数字I/O实验教会我们单片机的编程思想,必须首先对单片机的相应寄存器进行配置,以初始化I/O引脚,这样才能使该引脚具备数字输入与输出功能。 单片机的一个内置或外置功能的使用,就是对该功能相关的寄存器进行设置,初始化,而这便是单片机编程的特点。少则4、5个函数搞定,多则十几行程序,要有耐心,别怕麻烦,所有的单片机都是这样。   ● 第二步:RS 232串口通讯 单片机都有UART接口,这个简单、古老的通讯方式可以与我们PC机的RS232接口直接连接通讯,当然,因为它们两者电平逻辑不同,必须要使用一个RS232电平转换芯片才能与PC机连接,例如Max232芯片。 UART接口的使用是非常重要的,通过这个接口,我们可以使单片机与PC机之间交换信息,“接口”概念的学习也便由此引入。使用UART接口也会学习到目前最为简单与常用的通信协议等知识。我们也可以通过PC机的串口调试软件来监视到单片机实验板的数据,想一想,这会是一个多么神奇的事情啊。   ● 第三步:定时器的使用 学会定时器的使用,就可以利用单片机来实现典型的时序逻辑电路。时序逻辑电路的应用是最强大、最广泛的。例如,在工业的控制中,我们让某个开关每隔1秒钟打开与关闭一次。这个方案可以通过普通的数字集成电路实现,也可以通过PLC来实现,也可以通过CPLD或FPGA来实现,但是只有单片机的实现是最简单,成本也是最经济的。定时器是单片机内部资源里最为重要的一个,更是逻辑与时间控制实现的基础。   ● 第四步:中断 在单片机软件设计架构中,一段程序循环执行是其一个特点,也是一个弊端。每个操作指令的执行都需要一定的执行时间,如果程序没有执行到该指令,则该指令的动作就不会触发,这样就会忽略许多快速发生的事件,例如方波频率检测的上升沿。针对在单片机程序正常运行时能够对外部事件立即做出响应而设计了中断功能。当中断功能执行时,单片机优先处理中断程序,当中断处理完成后,再回到单片机的正常程序执行中。中断的机理是比较容易理解的,但是什么时候打开中断,什么时候关闭、屏蔽中断,需要如何配置才能使能中断的某些功能,中断里要执行哪些程序,这些程序的要满足哪些要求就需要花些时间去理解与实践了。中断学会后,就可以编写复杂结构功能的程序,可以一边闪着小LED灯,一边扫描着按键,一边发送着数据,也可以干着多个事情……打个比喻,中断功能可以使单片机吃着碗里的,看着锅里的。根据传说中的8020定律,如果您掌握了上面提到的这四步,那么,您已经学会了80%的内容了。   ● 第五步:I2C、SPI通讯接口 单片机系统毕竟资源有限,而利用I2C、SPI通讯接口进行扩展外设是最常用的方法,也是非常重要的方法。这两个通讯接口都是串行通讯接口,典型的基础实验就是I2C的EEPROM实验与SPI的SD卡读写实验。   ● 第六步:比较,捕捉,PWM功能 比较,捕捉与PWM功能可以使单片机更加适合电机控制,信号检测,实现电机速度与步长的调节。PWM波现在又是LED调光的主要手段。这里已经初步接触了数字电路里的模拟电路部分。   ● 第七步:A/D模数采集 单片机目前基本都自带多通道A/D模数转换器,通过这些A/D转换器可以单片机获取模拟量,用于检测电压、电流等信号。学习时要分清模拟地与数字地,参考电压,采样时间,转换速率,转换误差等重要概念。这一步学会了数字电路控制模拟电路部分,而最简单的A/D模数转换器就是电压表实验。   ● 第八步:学习USB接口、TCP/IP协议、工业总线 目前主流的通讯协议为USB协——下位机与上位机高速通讯接口;TCP/IP——万能的互联网使用的通讯协议;工业总线——诸如Modbus,CANOpen等工业控制各个模块之间通讯的协议。这些都会应用在未来的项目里,集成入单片机里的固件,并且也是当前产品开发的一个发展方向。
  • 热度 20
    2014-9-23 22:32
    948 次阅读|
    0 个评论
    成为一名嵌入式工程师,简单的单片机基础学习与应用是不可缺少的。学习单片机就是学习单片机的硬件结构,内部资源与外设的应用。在C语言中(极少量的汇编)掌握各种功能的初始化,启动与停止,实现各种功能函数的编写与调试。 ● 第一步:数字I/O的应用 在大多数的单片机实验中,跑马灯实验正是数字I/O的典型应用,也是跑马灯的实验被安排第一个的原因。通过将单片机的I/O引脚位进行置位或清零来点亮或关闭LED灯,虽然简单,但是这就是数字电路中的逻辑功能。数学I/O应用的实验还有按键实验,当按下某键时,某LED灯被点亮。数字I/O实验教会我们单片机的编程思想,必须首先对单片机的相应寄存器进行配置,以初始化I/O引脚,这样才能使该引脚具备数字输入与输出功能。 单片机的一个内置或外置功能的使用,就是对该功能相关的寄存器进行设置,初始化,而这便是单片机编程的特点。少则4、5个函数搞定,多则十几行程序,要有耐心,别怕麻烦,所有的单片机都是这样。 ● 第二步:RS 232串口通讯 单片机都有UART接口,这个简单、古老的通讯方式可以与我们PC机的RS232接口直接连接通讯,当然,因为它们两者电平逻辑不同,必须要使用一个RS232电平转换芯片才能与PC机连接,例如Max232芯片。 UART接口的使用是非常重要的,通过这个接口,我们可以使单片机与PC机之间交换信息,“接口”概念的学习也便由此引入。使用UART接口也会学习到目前最为简单与常用的通信协议等知识。我们也可以通过PC机的串口调试软件来监视到单片机实验板的数据,想一想,这会是一个多么神奇的事情啊。 ● 第三步:定时器的使用 学会定时器的使用,就可以利用单片机来实现典型的时序逻辑电路。时序逻辑电路的应用是最强大、最广泛的。例如,在工业的控制中,我们让某个开关每隔1秒钟打开与关闭一次。这个方案可以通过普通的数字集成电路实现,也可以通过PLC来实现,也可以通过CPLD或FPGA来实现,但是只有单片机的实现是最简单,成本也是最经济的。定时器是单片机内部资源里最为重要的一个,更是逻辑与时间控制实现的基础。 ● 第四步:中断 在单片机软件设计架构中,一段程序循环执行是其一个特点,也是一个弊端。每个操作指令的执行都需要一定的执行时间,如果程序没有执行到该指令,则该指令的动作就不会触发,这样就会忽略许多快速发生的事件,例如方波频率检测的上升沿。针对在单片机程序正常运行时能够对外部事件立即做出响应而设计了中断功能。当中断功能执行时,单片机优先处理中断程序,当中断处理完成后,再回到单片机的正常程序执行中。中断的机理是比较容易理解的,但是什么时候打开中断,什么时候关闭、屏蔽中断,需要如何配置才能使能中断的某些功能,中断里要执行哪些程序,这些程序的要满足哪些要求就需要花些时间去理解与实践了。中断学会后,就可以编写复杂结构功能的程序,可以一边闪着小LED灯,一边扫描着按键,一边发送着数据,也可以干着多个事情……打个比喻,中断功能可以使单片机吃着碗里的,看着锅里的。根据传说中的8020定律,如果您掌握了上面提到的这四步,那么,您已经学会了80%的内容了。 ● 第五步:I2C、SPI通讯接口 单片机系统毕竟资源有限,而利用I2C、SPI通讯接口进行扩展外设是最常用的方法,也是非常重要的方法。这两个通讯接口都是串行通讯接口,典型的基础实验就是I2C的EEPROM实验与SPI的SD卡读写实验。 ● 第六步:比较,捕捉,PWM功能 比较,捕捉与PWM功能可以使单片机更加适合电机控制,信号检测,实现电机速度与步长的调节。PWM波现在又是LED调光的主要手段。这里已经初步接触了数字电路里的模拟电路部分。 ● 第七步:A/D模数采集 单片机目前基本都自带多通道A/D模数转换器,通过这些A/D转换器可以单片机获取模拟量,用于检测电压、电流等信号。学习时要分清模拟地与数字地,参考电压,采样时间,转换速率,转换误差等重要概念。这一步学会了数字电路控制模拟电路部分,而最简单的A/D模数转换器就是电压表实验。 ● 第八步:学习USB接口、TCP/IP协议、工业总线 目前主流的通讯协议为USB协——下位机与上位机高速通讯接口;TCP/IP——万能的互联网使用的通讯协议;工业总线——诸如Modbus,CANOpen等工业控制各个模块之间通讯的协议。这些都会应用在未来的项目里,集成入单片机里的固件,并且也是当前产品开发的一个发展方向。
  • 热度 31
    2013-12-19 23:23
    4605 次阅读|
    3 个评论
      最近在摸索  V5的 rocket io 的使用   ,主要收获如下   1  GTP  时钟    GTP 的时钟源可以有 三种提供方式    1,  相邻的  GTP_TILE   2.  从差分端 经过 IBUFDS输入,应为 GTP 为  一对 公用 一个PMA_PLL,则GTP0 可以直接使用GTP1的用户时钟,如TXUSRCLK时钟,但在接收端需要使用自己独立的时钟   RERXCCLK   恢复时钟,或则使用公共的TXUSRCLK  但必须使用频率矫正,如为16bit 端口宽度  则 useclk2  =useclk/2   2 复位  所有的GTP  设计必须复位,使用 PLLLKDET_OUT做DCM  及PLL 的复位信号, PLLKDET_OUT完成 后 变高,则DCM退出复位,   然后 RXRECCLK 时钟锁定,DCM锁定,LOCKED 信号有效,rxusrclk 被锁定,而此时 DCM及PLL的LOCKED 信号作为 GTP TX与RX 的复位信号, RX-TX退出复位状态,开始工作      3 对齐 comma对齐是必须的,对齐的序列由ALIGN_COMMA_WORD设置,合法边带间隔由INTDATAWIDTH定义,边带位置数由RXDATA字节数定义,通常不GTP默认的对齐序列 为 K28.5,接收机在字符中搜寻对齐序列字符,一旦找到 ,将对齐到此字符边界,并将通常此序列也作为时钟修正序列,将RXENMCOMMAALIGN拉高,使能负命令对齐功能,任何符合对齐命令的模块都将引起命令重对齐,在成功对齐后,RXBYTEISALIGNED 将拉高,此时将命令对齐使能关闭以保持此时的对齐, 4时钟修正 对于非同源时钟驱动的TX与RX,时钟修正是必须的,使用rxrecclk可以不修正 由于任何两个不同源的时钟总存在一定的频率差,对于 GTP来说 由于频率不同步,将产生字符丢失      1,CLK_CORRECT_USE  设为 TRUE      2,设置时钟校正序列 CLK-COR_SEQ_1     3,RXbuffer  极限值设置     4, CLK_COR_ADJ_LEN用于设置子序列数目,如果内部数据位宽为10bit,则时钟校正电路适配所有10bit 大的每个子序列     4.8B/10B     1,字符运行一致性检查     2,K码指示RXCHARISK     3,命令检查 DEC_PCOMMA_DETECT is TRUE,RXCHARISCOMMA有效     4,限制命令触发 DEC_VALID_COMMA_ONLY   K28.1 , K28.5,K28.7 因为他们都有一样的8/10B头   5,通道绑定   1,发送器同时在所有线上发送一个虚序列模式,来调整每路LANE的延迟    2,使能每个GTP收发器的通道绑定功能    3,设置主通道  CHAN_BOND_MODE 为TRUE   主通道 CHAN_BOND_LEVEL设为1   4, 设置 从通道为CHAN_BOND_MODE=SLAVE     从通道 CHAN_BOND_LEVEL设为 0       5,连接通道绑定端从 MADTER到 每个SLAVE,或者直接使用菊花链     6,设置通道绑定序列 和检测参数 CHAN_BOND_SEQ_LEN设置子序列长度 1-4 CHAN_BOND_SEQ_1*设置序列值,如CHAN_BOND_SEQ_2_USE 为TRUE,CHAN_BOND_SEQ_2*设置2的序列值,子序列有效激活的位数由 内部数据宽度和RX_DECODE_SEQ_MATCH决定, 设置最大偏移 ----当主通道接收到通道绑定序列 ,将不立即触发通道绑定,猪头感到必须等待一些时钟,否则 慢的通道可能还未接收到绑定序列,时钟校正和通道绑定电路一起执行,正常的他们不会冲突,除非通道绑定事假和时钟校正同时发生,这种情况,一个电路必须优先,确保时钟校正有更高的优先级,CLK_COR_PRECEDENCE设置为TRUE         6 使用 TX/RX phase Alignment    1   bypass buffer  减少延迟,但此时 时钟校正和通道绑定无效,RX 时钟源必须使用RXRECCLK,   2, RX_SXCLK_SEL设置为  RXUSR   3,由 RXRECCLK驱动 RXUSECLK  4,使用GTPRESET或 CDRreset 复位RX数路径  5,等待 PMA PLL好 RXUSRCLK  DCM 或PLL  LOCK  6 等待CDR锁定 提供一个稳定的RXRECCLK  7,驱动RXPMASETPHASE 为高32个用户周期后,释放   ,                      
  • 热度 24
    2013-7-24 11:10
    2855 次阅读|
    0 个评论
    本节讲述PCIe总线定义的各类TLP,并详细介绍这些TLP的格式。在这些TLP中,有些格式对于初学者来说较难理解。读者需要建立PCIe总线中与TLP相关的一些基本概念,特别是存储器读写相关的报文格式。在PCIe总线中,存储器读写,I/O读写和配置读写请求TLP由以下几类报文组成。 存储器读请求TLP和读完成TLP 当PCIe主设备,RC或者EP,访问目标设备的存储器空间时,使用Non-Posted总线事务向目标设备发出存储器读请求TLP,目标设备收到这个存储器读请求TLP后,使用存储器读完成TLP,主动向主设备传递数据。当主设备收到目标设备的存储器读完成TLP后,将完成一次存储器读操作。 存储器写请求TLP原子操作请求和完成报文I/O读写请求TLP和读写完成TLP配置读写请求TLP和配置读写完成TLP消息报文 与PCI总线相比,PCIe总线增加了消息请求事务。PCIe总线使用基于报文的数据传送模式,所有总线事务都是通过报文实现的,PCIe总线取消了一些在PCI总线中存在的边带信号。在PCIe总线中,一些由PCI总线的边带信号完成的工作,如中断请求和电源管理等,在PCIe总线中由消息请求报文实现。 5.3.1 存储器读写请求TLP 存储器读写请求TLP的格式如图5‑8所示。     在PCIe总线中,存储器写请求TLP使用Posted数据传送方式。而其他与存储器和I/O相关的报文都使用Split方式进行数据传送,这些请求报文需要完成报文,通知发送端之前的数据请求报文已经被处理完毕,有关完成报文的详细说明见第5.3.2节。 存储器读写请求TLP使用地址路由方式进行数据传递,在这类TLP头中包含Address字段,Address字段具有两种地址格式,分别是32位和64位地址。在存储器读写和I/O读写请求的第3和第4个双字中,存放TLP的32或者64位地址。存储器、I/O和原子操作读写请求使用的TLP头较为类似。本节仅介绍存储器、I/O读写使用的TLP头,而在第5.3.5节详细介绍原子操作。 1 Length字段 在存储器读请求TLP中并不包含Data Payload,在该报文中,Length字段表示需要从目标设备数据区域读取的数据长度;而在存储器写TLP中,Length字段表示当前报文的Data Payload长度。 Length字段的最小单位为DW。当该字段为n时,表示需要获得的数据长度或者当前报文的数据长度为n个DW,其中0£n£0x3FF。值得注意的是,当n等于0时,表示数据长度为1024个DW。 2 DW BE字段 PCIe总线以字节为基本单位进行数据传递,但是Length字段以DW为最小单位。为此TLP使用Last DW BE和First DW BE这两个字段进行字节使能,使得在一个TLP中,有效数据以字节为单位。 这两个DW BE字段各由4位组成,其中Last DW BE字段的每一位对应数据Payload最后一个双字的字节使能位;而First DW BE字段的每一位对应数据Payload第一个双字的字节使能位。其对应关系如表5‑5所示。 表5‑5 First和Last DW BE字段 Last DW BE 第3位 为1表示数据Payload的最后一个双字的字节3有效 第2位 为1表示数据Payload的最后一个双字的字节2有效 第1位 为1表示数据Payload的最后一个双字的字节1有效 第0位 为1表示数据Payload的最后一个双字的字节0有效 First DW BE 第3位 为1表示数据Payload的第一个双字的字节3有效 第2位 为1表示数据Payload的第一个双字的字节2有效 第1位 为1表示数据Payload的第一个双字的字节1有效 第0位 为1表示数据Payload的第一个双字的字节0有效     Last DW BE和First DW BE这两个字段的使用规则如下。 如果传送的数据长度在一个对界的双字(DW)之内,则Last DW BE字段为0b0000,而First DW BE的对应位置1;如果数据长度超过1DW,Last DW BE字段一定不能为0b0000。PCIe总线使用Last DW BE字段为0b0000表示所传送的数据在一个对界的DW之内。如果传送的数据长度超过1DW,则First DW BE字段至少有一个位使能。不能出现First DW BE为0b0000的情况。如果传送的数据长度大于等于3DW,则在First DW BE和Last DW BE字段中不能出现不连续的置1位。如果传送的数据长度在1DW之内时,在First DW BE字段中允许有不连续的置1位。此时PCIe总线允许在TLP中传送1个DW的第1,3字节或者第0,2字节。   如果传送的数据长度为2DW之内时,则First DW BE字段和Last DW BE字段允许有不连续的置1位。 值得注意的是,PCIe总线支持一种特殊的读操作,即“Zero-Length”读请求。此时Length字段的长度为1DW,而First DW BE字段和Last DW BE字段都为0b0000,即所有字节都不使能。此时与这个存储器读请求TLP对应的读完成TLP中不包含有效数据。再次提醒读者注意“Zero-Length”读请求使用的Length字段为1,而不是为0,为0表示需要获得的数据长度为1024个DW。 “Zero-Length”读请求的引入是为了实现“读刷新”操作,该操作的主要目的是为了确保之前使用Posted方式所传送的数据,到达最终的目的地,与“Zero-Length”读对应的读完成报文中不含有负载,从而提高了PCIe链路的利用率。 在PCIe总线中,使用Posted方式进行存储器写时,目标设备不需要向主设备发送回应报文,因此主设备并不知道这个存储器写是否已经达到目的地。而主设备可以使用“读刷新”操作,向目标设备进行读操作来保证存储器写最终到达目的地。 在PCIe总线中,标准的存储器读请求也可以完成同样的刷新操作。但是“Zero-Length”读请求与这种读请求相比,其完成报文不需要“Data Payload”,因此在一定程度上提高了PCIe总线的效率。如果一个存储器读请求TLP报文的TH位为1时,DW BE字段将被重新定义为ST 字段,有关ST字段的详细说明见第5.3.6节。 3 Requester ID字段 Requester ID字段包含“生成这个TLP报文”的PCIe设备的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number),其格式如图5‑9所示。对于存储器写请求TLP,Requester ID字段并不是必须的,因为目标设备收到存储器写请求TLP后,不需要完成报文作为应答,因此Requester ID字段对于存储器写请求TLP并没有实际意义。 但是PCIe总线规范并没有明确说明存储器写请求TLP究竟需不需要Requester ID字段,为此IC设计者依然需要将存储器写TLP的Requester ID字段置为有效。值得注意的是,如果一个存储器写请求TLP报文的TH位为1时,Tag字段将被重新定义为ST 字段,有关ST字段的详细说明见第5.3.6节。 对于Non-Posted数据请求,目标设备需要使用完成报文做为回应。在这个完成报文中,需要使用源设备的Requester ID字段。因此在Non-Posted数据请求TLP中,如存储器读请求、I/O和配置读写请求TLP,必须使用Requester ID字段。 存储器,I/O读请求TLP中含有Requester ID和Tag字段。在PCIe总线中Requester ID和Tag字段合称为Transaction ID,Transaction ID字段的格式如图5‑9所示。存储器读,I/O和配置读写请求TLP使用Transaction字段的主要目的是使接收端通过分析报文的Transaction ID,确认完成报文的目的地。   在PCIe总线中,所有Non-Posted数据请求都需要完成报文作为应答,才能结束一次完整的数据传递。一个源设备在发送Non-Posted数据请求之后,如果并没有收到目标设备回送的完成报文,TLP报文的发送端需要保存这个Non-Posted数据请求,此时该设备使用的Transaction ID(Tag字段)不能被再次使用,直到一次数据传送结束,即数据发送端收齐与该TLP对应的所有完成报文。 PCIe设备发出的每一个Non-Posted数据请求TLP,在同一个时刻段内Transaction ID必须是唯一的。即在同一时间段内,在当前PCI总线域中不能存在两个或者两个以上的存储器读请求TLP,其Transaction ID完全相同。 源设备发送Non-Posted数据请求后,在没有获得全部完成报文之前,不能释放这个Transaction ID占用的资源。在同一个PCIe设备发送的TLP中,其Requester ID字段是相同的,因此PCIe设备的设计者所能管理的资源是Tag字段。PCIe设备的设计者需要合理地管理Tag资源,以保证数据传送的正确性。 PCIe设备在发送Non-Posted数据请求时,需要暂存这些Non-Posted数据请求。其中Tag字段的长度决定了发送端能够暂存多少个同类型的TLP,如果Tag字段长度为5,发送端能够暂存32个报文;如果PCIe设备使能了Extended Tag位,Tag字段可以由8位组成,此时发送端能够暂存256个报文。 通过Tag字段的长度,可以发现每个PCIe设备最多可以暂存256个同类型的Non-Posted报文。但是在多数情况下,一个PCIe设备可能只包含1个Function。因此PCIe设备还可以使用Function号扩展Tag字段,从而扩展“暂存TLP报文”的数目。 PCIe设备在PCI Express Capability结构的Device Control寄存器中,设置了一个Phantom Functions Enable位,。当一个PCIe设备仅支持一个Function时,Phantom Functions Enable位可以被设置为1,此时PCIe设备可以使用Requester ID的Function Number字段对Tag字段进一步扩展,此时一个PCIe设备最多可以支持2048个同类型的数据请求。 由以上分析可以发现,一个PCIe设备最多可以支持2048个存储器读数据请求,基本上可以满足绝大多数需要。但是在某些特殊应用场合,PCIe设备即使可以暂存2048个存储器读请求,也并不足够。 与PCI总线相比,PCIe总线的数据传送延时较长,而为了弥补这个传送延时,PCIe设备通常使用流水线技术。此时PCIe设备必须能够连续发送多个存储器读请求报文,随后RC也将连续回送多个存储器读完成报文,在PCIe设备的实现中,需要保证能够源源不断地从RC接收这些报文,以充分利用报文接收流水线,。 PCIe V2.1总线规范还提出了另一种Requester ID格式,即ARI (Alternative Routing-ID Interpretation)格式,除了Requester ID外,在完成报文中使用的Completer ID也可以使用这种格式。ARI格式将ID号分为两个字段,分别为Bus号和Function号,而不使用Device号,ARI格式如图5‑10所示。     PCIe总线引入ARI格式的依据是在一个PCIe链路上仅可能存在一个PCIe设备,因而其Device号一定为0。在多数PCIe设备中,Requester ID和Completion ID包含的Device号是没有意义的。使用ARI格式时,一个PCIe设备最多可以支持256个Function,而传统的PCIe设备最多只能支持8个Function。 4 I/O读写请求TLP的规则 I/O读写请求与存储器读写请求TLP的格式基本类似,只是I/O读写请求TLP只能使用32位地址模式和基于地址的路由方式,而且I/O读写请求TLP只能使用Non-Posted方式进行传递。PCIe总线并不建议PCIe设备支持I/O地址空间,但是Switch和RC需要具备接收和发送I/O请求报文的能力,因为许多老的PCI设备依然使用I/O地址空间,这些PCI设备可以通过PCIe桥连接到PCIe总线中。因此虽然支持I/O读写请求的PCIe设备极少,但是在PCIe体系结构中,依然需要支持PCI总线域的I/O地址空间。 与存储器读写请求TLP不同,I/O读写请求TLP的某些字段必须为以下值。 TC 必须为0,I/O请求报文使用的TC标签只能为0。 TH和Attr2位保留,而Attr 必须为“0b00”,这表示I/O请求报文必须使用PCI总线的强序数据传送模式,而且在传送过程中,硬件保证其传送的数据与Cache保持一致,实际上I/O地址空间都是不可Cache的。 AT 必须为“0b00”,表示不支持地址转换,因此在虚拟化技术中,并不处理PCI总线域中的I/O空间。 Length 为“0b00 0000 0001”,表示I/O读写请求TLP最大的数据Payload为1DW,该类TLP不支持突发传送。 Last DW 为“0b0000”。 5.3.2 完成报文 PCIe总线支持Split传送方式,目标设备使用完成报文向源设备主动发送数据。完成报文使用ID路由方式,由TLP Predix、报文头和Data Payload组成,但是在某些完成报文可以不含有Data Payload,如I/O或者配置写完成和Zero-Length读完成报文。在PCIe总线中,有一下几类数据请求需要收到完成报文之后,才能完成整个数据传送过程,完成报文格式如图5‑11所示。 所有的数据读请求,包括存储器、I/O读请求、配置读请求和原子操作请求。当一个PCIe设备发出这些数据请求报文后,必须收到目标设备的完成报文后,才能结束一次数据传送。这一类完成报文必须包含Data Payload。 所有的Non-Posted数据写请求,包括I/O和配置写请求。当一个PCIe设备发出这些数据请求报文后,必须收到目标设备的完成报文后,才能结束数据传送。但是这一类完成报文不包含数据,仅包含应答信息。 与ATS机制相关的一些报文。     完成报文“Byte 0”中的大部分字段与“存储器,I/O、配置请求报文”的对应字段的含义相同。完成报文一次最多能够传送的报文大小不能超过Max_Payload_Size参数。在多数处理器中,完成报文中包含的数据在一个Cache行之内,完成报文使用RCB参数来处理数据对界,RCB参数的大小与处理器系统的Cache行长度和DDR-SDRAM的一次突发传送长度相关,这些参数的详细描述见第5.4.3节。在x86和PowerPC处理器中,一个存储器读完成报文一般不超过RCB参数。 1 Requester ID和Tag字段 完成报文使用ID路由方式,ID路由方式详见第5.2.2节。完成报文头的长度为3DW,完成报文头中包含Transaction ID信息,由Requester ID和Tag字段组成,这个ID必须与源设备发送的数据请求报文的Transaction ID对应,完成报文使用Transaction ID进行ID路由,并将数据发送给源设备。 当PCIe设备收到存储器读、I/O读写或者配置读写请求TLP时,需要首先保存这些报文的Transaction ID,之后当该设备准备好完成报文后,将完成报文的Requester ID和Tag字段赋值为之前保存的Transaction ID字段。 2 Completer ID字段 Completer ID字段的含义与Requester ID字段较为相似,只是该字段存放“发送完成报文”的PCIe设备的ID号。PCIe设备进行数据请求时需要在TLP字段中包含Requester ID字段;而使用完成报文结束数据请求时,需要提供Completer ID字段。 3 Status字段 Status字段保存当前完成报文的完成状态,表示当前TLP是正确地将数据传递给数据请求端;还是在数据传递过程中出现错误;或者要求数据请求方进行重试。PCIe总线规定了几类完成状态,如表5‑6所示。 表5‑6 Status字段 Status 描述 0b000 SC(Sucessful Completion),正常结束 0b001 UR(Unsupported Request),不支持的数据请求 0b010 CRS(Configuration Request Retry Status),要求数据请求方进行重试。当RC对一个PCIe目标设备发起配置请求时,如果该目标设备没有准备好,可以向RC发出CRS完成报文,当RC收到这类报文时,不能结束本次配置请求,必须择时重新发送配置请求 0b100 CA(Completion Abort),数据夭折。表示目标设备无法完成本次数据请求 其他 保留     4 BCM位与Byte Count字段 BCM(Byte Count Modified)字段由PCI-X设备设置。PCI-X设备也支持Split Transaction传送方式,当PCI-X设备进行存储器读请求时,目标设备不一定一次就能将所有数据传递给源设备。此时目标设备在进行第一次数据传送时,需要设置Byte Count字段和BCM位。 BCM位表示Byte Count字段是否被更改,该位仅对PCI-X设备有效,而PCIe设备不能操纵BCM位,只有PCI-X设备或者PCIe-to-PCI-X桥可以改变该位。本节对此位不做进一步介绍,对此位感兴趣的读者可以参考PCI-X Addendum to the PCI Local Bus Specification, Revision 2.0。 Byte Count字段记录源设备还需要从目标设备中,获得多少字节的数据就能完成全部数据传递,当前TLP中的有效负载也被Byte Count字段统计在内。该字段由12位组成。该字段为0b0000-0000-0001表示还剩一个字节,为0b1111-1111-1111表示还剩4095个字节,而为0b0000-0000-0000表示还剩4096个字节。除了存储器读请求的完成报文外,大多数完成报文的Byte Count字段为4。 如一个源设备向目标设备发送一个“读取128B的存储器读请求TLP”,而目标设备收到这个读请求TLP后,可能使用两个存储器读完成TLP传递数据。其中第1个存储器读完成TLP的有效数据为64B,而Byte Count字段为128;第2个存储器读完成TLP中的有效数据为64B,而Byte Count字段也为64。当数据请求端接收完毕第1个存储器读完成TLP后,发现还有64B的数据没有接收完毕,此时必须等待下一个存储器读完成TLP。等到数据请求端收齐所有数据后,才能结束整个存储器读请求。 目标设备发出的第2个读完成TLP中的有效数据为64B,而Byte Count字段为64,当数据请求端接收完毕这个读完成TLP后,将完成一个完整的存储器读过程,从而可以释放这个存储器读过程使用的Tag资源。存储器读请求的完成报文的拆分方式较为复杂,Byte Count字段的设置也相对较为复杂。 5 Lower Address字段 如果当前完成报文为存储器读完成TLP,该字段存放在存储器读完成TLP中第一个数据所对应地址的最低位。值得注意的是,在完成报文中,并不存在First DW BE和Last DW BE字段,因此接收端必须使用存储器读完成TLP的Low Address字段,识别一个TLP中包含数据的起始地址。 5.3.3 配置读写请求TLP 配置读写请求TLP由RC发起,用来访问PCIe设备的配置空间。配置请求报文使用基于ID的路由方式。PCIe总线也支持两种配置请求报文,分别为Type 00h和Type 01h配置请求。配置请求TLP的格式如图5‑12所示。       配置请求TLP的第4~7字节与存储器请求TLP类似。而第8~11字节的Bus、Device和Function Number中存放该TLP访问的目标设备的相应的号码,而Ext Register和Reigister Number存放寄存器号。配置请求报文的其他字段必须为以下值。 TC 必须为0,I/O请求报文的传送类型(TC)只能为0。 TH位为保留位;Attr2位为保留,而Attr 必须为“00b”,这表示I/O请求报文使用PCI总线的强序数据传送模式;AT 必须为“0b00”,表示不进行地址转换。 Length 为“0b00 0000 0001”,表示配置读写请求最大Payload为1DW。 Last DW BE字段为“0b0000”。而First DW BE字段根据配置读写请求的大小设置。 5.3.4 消息请求报文 在PCIe总线中,多数消息报文使用隐式路由方式,其格式如图5‑13所示。其中Byte 0字段为通用TLP头,而Byte 4的第3字节中存放Message Code字段。         PCIe总线规定了以下几类消息报文。 INTx中断消息报文(INTx Interrupt Signaling)。 电源管理消息报文(Power Management)。 错误消息报文(Error Signaling)。 锁定事务消息报文(Locked Transaction Support)。 插槽电源限制消息报文(Slot Power Limit Support)。 Vendor-Defined Messages。          
  • 热度 27
    2012-4-12 09:12
    1567 次阅读|
    0 个评论
    Arduino扫盲教程1 (I/O 口输出 ) 本教程使用的是ArduinoDuemilanove 软件版本是0021。 在Arduino的开发环境中设置串口(Tools—SerialPort— 硬件使用的串口号 ) 选择正确的Arduino板系列型号,(Tools—Board— Arduino Duemilanove or Nano w/ATmege328 ) 一般在C语言中要求必须有一个主函数,即main函数,且只能有一个主函数,程序执行是从主函数开始的。但在Arduino中,主函数main函数在内部定义了, 使用者只需要完成以下两个函数就能够完成Arduino程序的编写,这连个函数分别负责Arduino程序的初始化部分和执行部分。他们是 qvoid setup() qvoid loop() 两个函数均为无返回值的函数,setup()函数用于初始化,一般放在程序开头, 主要工作是用于设置一些引脚的输出/输入模式,、初始化串口等,该函数只在上电或重启时执行一次.;loop()函数用于执行程序,loop()函数是一个死循环,其中的代码将被循环执行, 来完成程序的功能。 由于在Arduino板上的pin13脚连接了一个LED,我们就使用这个LED了解一下Arduino引脚的输出。 I/O的输出实际上就是两步操作,1、设置引脚为输出;2、设置输出高或者输出低 在加上延时就能看到效果了。 程序如下(直接粘贴到Arduino开发环境下就可直接应用): void setup( ) {   // 设置引脚13为输出,   //使用函数pinMode(pin, mode),   //    pin表示14个Arduino引脚为0~13,   //    mode表示输入或输出,可选参数为INPUT戒OUTPUT   pinMode(13, OUTPUT); } void loop( ) {     //设置引脚输出高电平,使用函数digitalWrite(pin, value):数字IO口输出电平定义凼数,     //    pin表示14个引脚为0~13     //    value表示输出电平,高电平为HIGH,低电平为LOW     digitalWrite(13, HIGH);     //延时1秒,使用延时函数delay(ms)     //    ms表示延时时间,单位是ms,1000ms=1s     delay(1000);     digitalWrite(13, LOW);    // set the LED off     delay(1000);              // wait for a second } 选择开发环境中的Upload(一个向右的箭头)就可以看到LED闪烁的效果了 重点:3个函数 数字 IO 口辒入辒出模式定义凼数           pinMode(pin, mode) 数字 IO 口输出电平定义凼数         digitalWrite(pin, value) 延时函数                        delay ( ms ) 分享来源: http://www.52forum.com   的  我爱方案网论坛 » AVR单片机 » Arduino创意方案
相关资源