dpram.txt

来自「网络控制器和链路控制器的CPU即是通过读写双端口RAM芯片完成网络层与数据链路层」· 文本 代码 · 共 36 行

TXT
36
字号
网络控制器与链路控制器的交互
    网络控制器和链路控制器的交互依靠某型双端口RAM芯片,该芯片具有两套独立的地址、数据线及读/写控制线,偏移地址0xFFE、0xFFF被配置为mailbox,右端口在0xFFE写入数据,则左端口产生中断,左端口读取该地址后中断被清除;左端口在0xFFF写入数据,则右端口产生中断,右端口读取该地址后中断被清除。
网络控制器和链路控制器的CPU即是通过读写双端口RAM芯片完成网络层与数据链路层的原语交互。mailbox中写入的是原语的类型,而双端口RAM的其它存储空间则存放各种服务原语的参数。
NCDualPort描述了双端口RAM读写的mailbox和参数区域地址,其数据结构如下所示:
typedef struct tagNCDualPort
{	/*中断标志区*/
	Uint16 *			lpReadFlag;
	Uint16 *			lpWriteFlag;
/*参数区*/
Uint8 *          lpNCBParam;
Uint16 *         lpNCDParam;
} NCDualPort, *LPNCDualPort;
在网络控制器双端口处理模块中定义一个NCDualPort的实例m_DualPort,通过m_DualPort读写中断。如下:
/*在mailbox单元写入原语wCmd*/
extern void DualPort_WriteIntFlag(Uint16 wCmd)
{
   *(m_DualPort.lpWriteFlag) = wCmd;
}
/*读取mailbox单元原语并返回类型*/
extern Uint16 DualPort_ReadIntFlag(void)
{
   return	(Uint16)*( m_DualPort.lpReadFlag);
}
网络控制器CPU在接收到双端口RAM的中断后,在中断服务程序中将mailbox中的中断编码(即服务原语类型)读出,写入双端口RAM中断队列尾。
/*网络控制器双端口中断服务程序*/
#pragma interrupt(DualPort_Isr)
static void DualPort_Isr(void)
{
	Uint16	wCmd;
	disable();
	wCmd = DualPort_ReadIntFlag();	  /*读中断编码(服务原语)*/
	DualPort_IntAddTail(wCmd);        /*将中断编码入中断队列尾*/
	outword(INT_EOI, EOITYPE_DPRAM);
	enable();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?