⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpram.txt

📁 网络控制器和链路控制器的CPU即是通过读写双端口RAM芯片完成网络层与数据链路层的原语交互。mailbox中写入的是原语的类型
💻 TXT
字号:
网络控制器与链路控制器的交互
    网络控制器和链路控制器的交互依靠某型双端口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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -