每个SCC有四个地址存储器HADDR1~HADDR4,所以每个SCC可识别四个地址,包括广播地址。接收时,通过与HDLC帧的目的地址进行比较,确定接收该帧还是丢弃。
3.3 初始化收发缓存区描述符
(1)在初始化缓存区描述符的过程中,收发都必须停止。通过将GSMR_L2的ENT和ENR置零,然后配置CPCR中的CP命令就可以禁止收发。
(2)配置收发缓存区描述符:
①配置当前接收缓存区描述符表的基地址,即IMMR的基地址再加上收发缓存区描述符表相对于IMMR的偏移地址。由于发送缓存区描述符表紧跟在接收缓存区描述符表的后面,因此发送缓存区描述符表的基地址为接收缓存区描述符表的基地址加上整个接收缓存区描述符表的长度。
②初始化发送缓存区描述符表和接收缓存区描述符表。如果收发缓存区都为空,分别将每一个发送缓存区描述符表和接收缓存区描述符表的状态模式参数中的状态位E置1、数据长度置0,
并将它们的地址设置成相应的值。如果收缓存区或发缓存区不为空,则应该先将这些缓存区清零。值得注意的是,最后一个收发缓存区描述符表的W位必须置1。
(3)初始化完成后,应该将ENT和ENR位置
3.4 收发功能的实现
3.4.1 接收函数
SMR_L2寄存器的ENR位置1的前提下,HDLC控制器进入接收允许状态。在正式读入数据前,必须先检测帧开始标志,并匹配地址,然后决定是否进入接收状态。进入接收状态后,首先提取RxBD的状态模式字节,若接收未准备好,则继续等待,若准备好了,则开始接收。由于一个数据包可以放置于多个缓存,所以检测RxBD状态模式字节的L位,以判断是否为本帧的最后一个缓存:如果不是,则关闭这个缓存,处理下一个缓存描述字;如果是,接收完最后一个缓存的数据后结束接收过程。对于最后一个buffer,需要检测是否有接收错误。
3.4.2 发送函数
发送函数流程图如图4所示。
在GSMR_L2寄存器的ENT位置1的前提下,HDLC控制器进入发送允许状态。首先提取TxBD的状态模式字节,若发送未准备好,则继续等待,若准备好了,则进入发送状态,在发送数据中间插入适当的标志位后就可以发送。由于一个发送数据包可以包含多个缓存,所以检测TxBD状态模式字节的L位,以判断是否为最后一个缓存:如果不是,则关闭这个缓存,处理下一个缓存描述字;如果是,控制器进入关闭发送状态。对于最后一个buffer,需要做两件事情:(1)检测是否有发送错误。(2)以剩下的实际数据长度作为发送帧中数据段的长度发送出去。
3.5 中断处理
在这个驱动程序中,只处理SCC2产生的中断。首先确定是否是CPM产生的中断,然后读取寄存器CPM中断向量寄存器(CIVR)的VN字段判断是否为SCC2产生的中断。如果是的话,就读取SCEE确定中断类型,然后做出相应的处理。
本程序通过在MPC860上做环回测试,情况良好。但在程序实现过程中,中断的控制还有待于进一步完善。