一种更新寄存器的方法及装置的制造方法_2

文档序号:9417142阅读:来源:国知局
到请求写寄存器的指令,则中断第一线程,执行第二线程,即转入步骤204 ;待第二线程执行完毕,返回继续执行第一线程;待第一线程执行结束,再次执行第一线程,即转入步骤205至207。
[0033]若在第一线程非执行期间,接收到主机发送的请求写寄存器的指令,则执行第二线程,即步骤204 ;待第二线程执行完毕,再执行第一线程,即步骤205至207。
[0034]所述更新寄存器的第一线程的第一流程,是根据预先设定的周期执行。
[0035]上述步骤202中,更新所述第一内存区域中存储的寄存器数据中的第一比特位数据,所述第一比特位的数据为所述光模块的状态数据或控制数据。
[0036]上述步骤204中,在所述第二内存区域写入的数据为寄存器数据中的第二比特位数据,所述第二比特位的数据为所述光模块的状态和控制数据。
[0037]上述步骤206中,根据所述第二内存区域中的所述第二比特位数据,更新所述第三内存区域中的寄存器数据中的第二比特位数据,保持所述第三内存区域中的寄存器数据中的其余比特位数据不变。
[0038]本发明的上述实施例中,在更新寄存器时,读取寄存器的数据并存储到第一内存区域,更新所述第一内存区域中的数据,再将更新后的数据写入所述寄存器。若在更新寄存器的过程中,主机请求写寄存器,则先将主机写入的数据存储在第二内存区域中,待更新寄存器过程结束后,再读取寄存器中的数据存储到第三内存区域中,根据所述第二内存区域中的数据更新第三内存区域中的数据,将所述第三内存区域中更新后的数据写入所述寄存器。根据上述的方法,主机请求写入的数据不是直接写入寄存器,而是先写入第三内存区域,待寄存器更新完成后再将第三内存区域中的数据写入寄存器,避免了主机写入寄存器的信息在寄存器更新过程中被覆盖进而导致通信失效的情况发生。
[0039]在本发明实施例中,数据可分为三种:状态数据,即用于反映某种状态的数据;控制数据,即用于由控制某种功能的数据;以及状态和控制数据,既可作为状态输出的数据,也可作为控制输入的数据。
[0040]例如:光模块中地址为110寄存器的第7比特位上的数据属于状态数据,对应于前述的第一比特位数据,用来实时反映TX Disable引脚的状态,由光模块输出。再例如:光模块中地址为110寄存器的第6比特位上的数据,属于状态和控制数据,对应于前述的第二比特位数据,既可以用来反映光模块发射部分开/关的状态,也可以由主机输入用来控制光模块发射部分的开/关。在本发明的实施例中,仅有主机写入的数据是状态和控制数据,其他数据均为状态数据或控制数据。
[0041]上述实施例可应用于光模块中的寄存器的更新过程,为了更清楚地理解本发明的上述实施例,下面以光模块中地址为110的寄存器的更新过程为例,对本发明上述实施例的具体实现过程进行描述。
[0042]在光模块中,寄存器地址为110的寄存器,其第7比特位用来实时反映TX Disable引脚的状态,由光模块输出;该寄存器的第6比特位用来反映光模块发射部分开/关的状态,也可以由主机输入用来控制光模块发射部分的开/关。为了让主机能够随时读取到光模块的当前状态,光模块需要按照设定周期更新110寄存器的第7比特位。光模块更新110寄存器的第7比特位与主机输入寄存器第6比特位这两个操作共用一个读写入口,因此,在特定情况下采用图1所示的流程,这两个操作会存在冲突,主机输入110寄存器第6比特位的数据会被覆盖。
[0043]根据本发明提供的实施例的方法,在光模块110寄存器按照设定周期更新第7比特位时,执行更新寄存器第一线程,读取110寄存器上的数据存储到第一内存区域中,根据TX Disable引脚的状态更新第7比特位上的数据;若此时主机发送请求写110寄存器第6比特位的指令,中断更新寄存器的第一线程并执行第二线程,根据所述请求写寄存器的指令在第二内存区域写入第6比特位的数据,恢复执行所述第一线程;在第一线程执行完成后,再次执行第一线程,读取第7比特位上的数据存储到第三内存区域中,根据第二内存区域中的数据更新所述第三内存区域中第6比特位上的数据,保持第三内存区域中的其余比特位数据不变,将第三内存区域更新后的数据写入光模块110寄存器。
[0044]以具体数据为例,假设110寄存器上第7比特位至第O比特位上的数据依次为01010101。根据现有技术,在更新寄存器的周期到达时,读取110寄存器上的数据,将读取到的数据存储到第一内存区域中,此时第一内存区域中的数据为01010101。由于TXDisable引脚的状态发生变化,根据其变化更新第一内存区域中第7比特位的数据,即此时第一内存区域中的数据为11010101。若此时主机发送请求写110寄存器第6比特位的指令,要在110寄存器上第6比特位上写0,由于该指令具有较高优先级,因此更新寄存器的操作被中断,根据主机发送请求写寄存器的指令,将110寄存器中第6比特位上的数据写为0,此时110寄存器上的数据变为00010101。中断结束后,继续执行更新寄存器操作,将第一内存区域中的数据写入110寄存器,此时110寄存器上的数据变为11010101。由此可见,主机写入110寄存器第6比特位的数据被覆盖了。
[0045]仍然假设110寄存器上第7比特位至第O比特位上的数据依次为01010101。根据本发明实施例提供的更新寄存器的方法,在更新光模块110寄存器的周期到达时,需要更新该寄存器的第7比特位上的数据,此时执行更新寄存器第一线程,在步骤201中,读取110寄存器上的数据,将读取到的数据存储到第一内存区域,此时第一内存区域中的数据为01010101。由于TX Disable引脚的状态发生变化,在步骤202中,根据其变化更新第一内存区域中第7比特位的数据,即此时第一内存区域中的数据为11010101。若此时主机发送请求写110寄存器第6比特位的指令,要在110寄存器上第6比特位上写0,由于该指令具有较高优先级,因此,在步骤204中,中断更新寄存器的第一线程并执行第二线程,根据所述请求写寄存器的指令在第二内存区域写入第6比特位的数据。恢复执行更新寄存器的第一线程,在步骤203中,将所述第一内存区域中更新后的数据写入110寄存器中,此时110寄存器中是数据为11010101。待所述第一线程执行完成后,执行所述第二线程,在步骤205中,读取110寄存器的数据,将读取到的数据存储到第三内存区域,即此时第三内存区域中的数据为11010101。在步骤206中,根据所述第二内存区域中的数据更新所述第三内存区域中第6比特位上的数据,此时第三内存区域中的数据为10010101,在步骤207中,再将所述第三内存区域更新后的数据写入110寄存器,最终110寄存器上的数据为10010101,既实现了 I1寄存器第7比特位上数据的更新,又实现了主机对该寄存器第6比特位上数据的写入。
[0046]上述流程中,在步骤204中,可在第二内存区域写入01000000,在步骤206中,将第二内存区域中存储的01000000进行按位取反,然后与存储到第三内存区域中的11010101进行按位与的运算,得到第三内存区域中更新后的数据。
[0047]本发明实施例以光模块中地址为110的寄存器的更新过程为例,但不仅限于光模块中的地址为110的寄存器。本发明实施例提供的更新寄存器的方法可适用于符合以下条件的寄存器的更新过程:在同一寄存器中,既有用来实时反映光模块状态或其他状态需要自动更新的比特位,又有需要主机写入信息以用来实现功能控制的比特位,且由于更新寄存器特定比特位时可能造成主机写入信息丢失、被覆盖。
[0048]应用本发明提供的更新寄存器的方法,即不影响寄存器的正常更新,同时保证了主机有效地写入寄存器数据,避免了主机写入寄存器的信息在寄存器更新过程中被覆盖进而导致通信失效的情况发生,确保了主机写入信息的正确性与可靠性。
[0049]基于相同的技术构思,本发明实施例还提供了一种更新寄存器的装置,如图3所所示,包括:控制模块302、寄存器处理模块301和中断处理模块303。
[0050]控制模块302指示寄存器处理模块301执行更新寄存器的第一线程,所述第一线程对应的操作包括:读取寄存器的数据,将读取到的数据存储到第一内存区域,更新所述第一内存区域中的数据,将更新后的数据写入所述寄存器。
[0051]在所述第一线程执行期间,若接收到请求写寄存器的指令,控制模块302根据所述请求写寄存器的指令指示寄存器处理模块301中断执行所述第一线程,执行第二线程,指示所述中断处理模块303根据所述请求写寄存器的指令在第二内存区域写入数据,指示所述寄存器处理模块301恢复执行所述第一线程,在所述第一线程执行完成后,指示寄存器处
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1