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

📄 devcnfg.c

📁 VRTX 商用嵌入式实时操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	},

	{				/* NA16550_REG_MAP_T FROM NA16550.H */
		(BYTE *)COM2 +0,		/* receive register */
		(BYTE *)COM2 +0,		/* transmit register */
		(BYTE *)COM2 +1,		/* interrupt enable */
		(BYTE *)COM2 +2,		/* interrupt id */
		(BYTE *)COM2 +3,		/* line control */
		(BYTE *)COM2 +4,		/* modem control */
		(BYTE *)COM2 +5,		/* line status */
		(BYTE *)COM2 +6,		/* modem status */
		(BYTE *)COM2 +1,		/* divisor latch upper byte */
		(BYTE *)COM2 +0		/* divisor latch lower byte */
	},

	{				/* EXTERN_FOPS_T FROM EXTIO_1.H */
		0,				/* register write byte */
		0,				/* register write word */
		0,				/* register write long */
		0,				/* register read  byte */
		0,				/* register read  word */
		0,				/* register read  long */
		0,				/* int_strt function pointer */
#if SERIAL_INTERRUPT == 1
		(vbsp_return_t (*) (void *, unsigned char))
			com2_eoi,		/* Int End Function Pointer		*/
		0,				/* board specific int disable handling */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			com2_int_enable,	/* board specific int enable handling */
#else
		0,0,0,
#endif
		0
	},

	{				/* na16550_specific_t from na16550.h */
		0,				/* LSR */
		0				/* FROM_ISR */
	}
};
#endif

#if SERIAL_DEVICE_1 == 1
serial_dev_desc_t	sc1_dev;
#endif

#if SERIAL_DEVICE_2 == 1
serial_dev_desc_t	sc2_dev;
#endif

#if SERIAL_DEVICE_1 == 1
na16550_config_t	sc1_config_ram;
#endif
#if SERIAL_DEVICE_2 == 1
na16550_config_t	sc2_config_ram;
#endif

#if SERIAL_DEVICE_1 == 1
const logio_method_t logio_serial_1_method =
{
	(logio_fops_t *)&logio_serial_fops,
	(void *)&sc1_dev
};
#endif

#if SERIAL_DEVICE_2 == 1
const logio_method_t logio_serial_2_method =
{
	(logio_fops_t *)&logio_serial_fops,
	(void *)&sc2_dev
};
#endif

#if SERIAL_DEVICE_1 == 1
logio_device_id_t logio_serial_1_id = (logio_device_id_t)&logio_serial_1_method;
#endif

#if SERIAL_DEVICE_2 == 1
logio_device_id_t logio_serial_2_id = (logio_device_id_t)&logio_serial_2_method;
#endif
#endif


/************************************************************************
*				ETHERNET	DEVICES			*
************************************************************************/


#if ETHER_DEVICE == 1

#if NE2000_DEVICE

vbsp_return_t ne2000_int_en(void) {
	in8259_interrupt_enable (NE2000_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t ne2000_int_dis(void) {
	in8259_interrupt_disable (NE2000_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t ne2000_eoi(void) {
	in8259_end_of_interrupt (NE2000_IRQ);
	return VBSP_SUCCESS;
}

/* ETHER_1 */
ne2000_config_t eth_config_rom = {

		/* ROM CONFIGURATION VALUES (will be placed in RAM as DEFAULT) */
	{
		0,			/* interface rev level from driver	*/

					/* MEMORY CONFIGURATION			 */
		1,				/* use system buffers				*/
		0,				/* base memory						*/
		0,				/* memory size						*/
		0,				/* do not get all packets on recv	*/

					/* VECTOR CONFIGURATION */
		NE2000_ETHER_TX_VECTOR,		/* tx vector						*/
		NE2000_ETHER_RX_VECTOR,		/* rx vector						*/
		NE2000_ETHER_ERR_VECTOR,	/* err vector						*/
		NE2000_ETHER_INIT_VECTOR,	/* init vector						*/

					/* BUFFER CONFIGURATION	*/
		14,				/* number rx buffers	*/
		1,				/* number tx buffers	*/
		1,				/* number of free tx buffers */

					/* ETHERNET CONFIGURATION	*/
		ne2000_get_ether_address,
		ne2000_set_ether_address,
		0,0,0,0,0,0,			/* ethernet address */
		0				/* Specific ne2000 RAM structure here */
	},

			/* EXTERNAL INPUT/OUTPUT AND INTERFACE FUNCTIONS */
	{
		0,0,0,0,0,0,		/* register read/write byte/word long */
		0,			/* int_strt function pointer */
		(vbsp_return_t (*) (void *, unsigned char))
			ne2000_eoi,	/* int_end function pointer */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			ne2000_int_dis,	/* board specific int disable handling */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			ne2000_int_en,	/* board specific int enable handling */
		0
	},

	NE2000_BASE,			/* base address : if < 100, H/w is probed */
	NE2000_IRQ,			/* IRQ */
	CABLE_TWISTED_PAIR		/* cable type */
};

ether_1_dev_desc_t	eth_dev;
ne2000_config_t		eth_config_ram;

const logio_method_t logio_ether_1_method = {
	(logio_fops_t *)&logio_ether_1_fops,
	(void *)&eth_dev
};

logio_device_id_t logio_ether_1_id = (logio_device_id_t)&logio_ether_1_method;
#endif


#if ETHERLINK3_DEVICE

vbsp_return_t ethlnk3_int_en(void) {
	in8259_interrupt_enable (ETHERLINK3_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t ethlnk3_int_dis(void) {
	in8259_interrupt_disable (ETHERLINK3_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t ethlnk3_eoi(void) {
	in8259_end_of_interrupt (ETHERLINK3_IRQ);
	return VBSP_SUCCESS;
}

/* ETHER_1 */
ethlnk3_config_t eth_config_rom = {

		/* ROM CONFIGURATION VALUES (will be placed in RAM as DEFAULT)*/
	{
		0,		 	/*interface rev level from driver	*/

					/* MEMORYCONFIGURATION		 */
		1,				/* use system buffers			*/
		0,				/* base memory			 */
		0,				/* memory size			 */
		0,				/* do not get all packets on recv	*/

					/* VECTOR CONFIGURATION */
		ETHERLINK3_ETHER_TX_VECTOR,	/* tx vector				*/
		ETHERLINK3_ETHER_RX_VECTOR,	/* rx vector				*/
		ETHERLINK3_ETHER_ERR_VECTOR,	/* err vector				*/
		ETHERLINK3_ETHER_INIT_VECTOR,	/* init vector			 */

					/* BUFFER CONFIGURATION			 */
		14,				/* number rx buffers			*/
		1,				/* number tx buffers			*/
		1,				/* number of free tx buffers		*/

					/* ETHERNET CONFIGURATION			*/
		ethlnk3_get_ether_address,
		ethlnk3_set_ether_address,
		0,0,0,0,0,0,			/* ethernet address */
		0				/* Specific ethlnk3 RAM structure here */
	},

			/* EXTERNAL INPUT/OUTPUT AND INTERFACE FUNCTIONS */
	{
		0,0,0,0,0,0,		/* register read/write byte/word long */
		0,			/* int_strt function pointer */
		(vbsp_return_t (*) (void *, unsigned char))
			ethlnk3_eoi,	/* int_end function pointer */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			ethlnk3_int_dis,/* board specific int disable handling */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			ethlnk3_int_en,	/* board specific int enable handling */
		0
	},

	0x300,	/* I/O base address */
	ETHERLINK3_IRQ,			/* IRQ */
	CABLE_THICK_ETHERNET	/* cable type */
};

ether_1_dev_desc_t	eth_dev;
ethlnk3_config_t	eth_config_ram;

const logio_method_t logio_ether_1_method = {
	(logio_fops_t *)&logio_ether_1_fops,
	(void *)&eth_dev
};

logio_device_id_t logio_ether_1_id = (logio_device_id_t)&logio_ether_1_method;
#endif


#endif

/**********************************************************************
*			TIMER DEVICE					*
**********************************************************************/


#if TIMER_DEVICE == 1

vbsp_return_t in8254_int_enable(void) {
	in8259_interrupt_enable (TIMER_8254_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t in8254_int_disable(void) {
	in8259_interrupt_disable (TIMER_8254_IRQ);
	return VBSP_SUCCESS;
}

vbsp_return_t in8254_eoi(void) {
	in8259_end_of_interrupt (TIMER_8254_IRQ);
	return VBSP_SUCCESS;
}

	/* all timers use the same fops so we need a external reference here! */
in8254_specific_t	in8254_specific_RAM1;

const in8254_config_t pit_config_rom = {

	{					/* TIMER CONFIG STRUCT			*/
		TIMER_8254_VECTOR,
		TIMER_CLOCK_PERIOD,
		TIMER_INITIAL_COUNTER,
		TIMER_PRELOAD,
		(void *) &in8254_specific_RAM1		/* additional configuration		*/
	},

	{					/* TIMER FOPS					*/
		0, 0, 0,				/* Int Read Function Pointers	*/
		0, 0, 0,				/* Int Write Function Pointers	*/
		0,					/* int_strt function pointer	*/
		(vbsp_return_t (*) (void *, unsigned char))
			in8254_eoi,
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			in8254_int_disable,		/* Int Disable Handling		 */
		(vbsp_return_t (*) (void *, logio_int_entry_t *))
			in8254_int_enable,		/* Int Enable Handling			*/
		(void *) 0
	},
	{
		(unsigned char *) TIMER_8254_CNTR0,	/* count value for counter 0	*/
		(unsigned char *) TIMER_8254_CNTR1,	/* count value for counter 1	*/
		(unsigned char *) TIMER_8254_CNTR2,	/* count value for counter 2	*/
		(unsigned char *) TIMER_8254_CNTRL,	/* channel's mode of operation	*/
	},
	{
		0					/* flag_int_enabled = 0		 */
	}
};

timer_dev_desc_t	pit;
in8254_config_t	 	pit_config_ram;

const logio_method_t logio_timer_1_method = {
	(logio_fops_t *) &logio_timer_fops,
	(void *)&pit
};

logio_device_id_t	logio_timer_1_id =
	(logio_device_id_t) &logio_timer_1_method;

#endif


int		_acrtused = 0x9876;


/****************************************************************
*			8259 PIC CONFIGURATION			*
****************************************************************/

unsigned pic_m_level = 0x30;
unsigned pic_s_level = 0x38;

unsigned pic_m_base = 0x20;
unsigned pic_s_base = 0xa0;

unsigned pic_slave_irq = 2;


/********************************************************************
*									*
*	LOGIO_DEVICE_INSTALL					*
*									*
*	Description:						 *
*									*
*		This procedure installs functions for each device.	*
*		Any ROM to RAM copies of configuration structures	*
*		are performed here.					*
*									*
*	Returns:							*
*									*
*		LOGIO_STATUS_OK:	All devices installed OK		*
*		LOGIO_STATUS_NOT_INITIALIZED: function failed	*
*									*
********************************************************************/

logio_status_t logio_device_install(void) {

	/* Initialize the PIC in the board */
	in8259_initialize ();

#if SCREEN_DEVICE == 1
	screen_config_ram = screen_config_rom;
	if (screen_install(&screen_config_ram, &screen_dev)) {
		return (LOGIO_STATUS_NOTINITIALIZED);
	}

#endif

#if GRAPHICS_DEVICE == 1
	graphics_config_ram = graphics_config_rom;
	if (graphics_install(&graphics_config_ram, &graphics_dev)) {
		return (LOGIO_STATUS_NOTINITIALIZED);
	}

#endif

#if TIMER_DEVICE == 1
	pit_config_ram = pit_config_rom;
	if(in8254_install(&pit_config_ram, &pit))
	return(LOGIO_STATUS_NOTINITIALIZED);
#endif

#if ETHER_DEVICE == 1
#if NE2000_DEVICE
eth_config_ram = eth_config_rom;
	if (ne2000_install(&eth_config_ram, &eth_dev))
	return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#if ETHERLINK3_DEVICE
eth_config_ram = eth_config_rom;
	if (ethlnk3_install(&eth_config_ram, &eth_dev))
	return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#endif
#if SERIAL_DEVICE == 1
#if SERIAL_DEVICE_1 == 1
	sc1_config_ram = sc1_config_rom;
	if (na16550_install(&sc1_config_ram, &sc1_dev))
	return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#if SERIAL_DEVICE_2 == 1
	sc2_config_ram = sc2_config_rom;
	if (na16550_install(&sc2_config_ram, &sc2_dev))
	return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#endif

	return(LOGIO_STATUS_OK);
}

⌨️ 快捷键说明

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