mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 02:59:01 +01:00 
			
		
		
		
	New Demo files for Tern E-Engine controller port.
This commit is contained in:
		
							parent
							
								
									215d93aa3d
								
							
						
					
					
						commit
						5411f64bff
					
				
							
								
								
									
										145
									
								
								Demo/WizNET_DEMO_TERN_186/186.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								Demo/WizNET_DEMO_TERN_186/186.cfg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,145 @@
 | 
			
		||||
// 186.cfg
 | 
			
		||||
//	You must select RAM, ROM for your controller   04-26-2000
 | 
			
		||||
//	Your TERN controller is installed with SRAM and ROM with different sizes.
 | 
			
		||||
//	For debug, 128K or 512K SRAM can be selected
 | 
			
		||||
//	For build a ROM, you need to select the ROM size.
 | 
			
		||||
// How to select ?
 | 
			
		||||
//	1) commend out the unwanted #define RAM size line with "//"
 | 
			
		||||
// 	2) delete the "//" preceding the wanted #define RAM size line
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #define RAM 32 // 32KB SRAM installed
 | 
			
		||||
#define RAM 128 // 128KB SRAM installed
 | 
			
		||||
// #define RAM 512 // 512KB SRAM installed
 | 
			
		||||
 | 
			
		||||
// #define ROM 32 // Use 32KB ROM chip 27C256-70
 | 
			
		||||
#define ROM 64 // Use 64KB ROM chip 27C512-70
 | 
			
		||||
// #define ROM 128 // Use 128KB ROM chip 27C010-70 
 | 
			
		||||
// #define ROM 256 // Use 256KB ROM chip 27C020-70
 | 
			
		||||
// #define ROM 512 // Use 512KB ROM chip 27C040-70, Change Jumper on board
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cputype Am186ES // AMD188/6 based controllers
 | 
			
		||||
 | 
			
		||||
#if defined(__PDREMOTE__)
 | 
			
		||||
 | 
			
		||||
#if RAM == 32
 | 
			
		||||
map	0x00000 to 0x00fff as reserved // interrupt vector table
 | 
			
		||||
map	0x01000 to 0x03fff as rdwr  	// System RAM area (60KB RAM)
 | 
			
		||||
map	0x04000 to 0x07fff as rdonly	// Simulated EPROM area (64KB RAM)
 | 
			
		||||
map	0x08000 to 0xfffff as reserved	// No access allowed
 | 
			
		||||
#define CODE_START 0x0400	// Start of application code, STEP2 !
 | 
			
		||||
 | 
			
		||||
#elif RAM == 128
 | 
			
		||||
map	0x00000 to 0x00fff as reserved // interrupt vector table
 | 
			
		||||
map	0x01000 to 0x07fff as rdwr  	// System RAM area (60KB RAM)
 | 
			
		||||
map	0x08000 to 0x1ffff as rdonly	// Simulated EPROM area (64KB RAM)
 | 
			
		||||
map	0x20000 to 0xfffff as reserved	// No access allowed
 | 
			
		||||
#define CODE_START 0x0800		// Start of application code
 | 
			
		||||
 | 
			
		||||
#elif RAM == 512
 | 
			
		||||
map	0x00000 to 0x00fff as reserved // interrupt vector table
 | 
			
		||||
map	0x01000 to 0x07fff as rdwr	// System RAM area (60KB RAM)
 | 
			
		||||
map	0x08000 to 0x7ffff as rdonly	// Simulated EPROM area(480KB RAM)
 | 
			
		||||
map	0x80000 to 0xfffff as reserved // No access allowed
 | 
			
		||||
#define CODE_START 0x0800		// Start of application code
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DATA_START 0x0100	// Start of application data
 | 
			
		||||
#define BOOT_START 0x1fc0	// Start of initialization code
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
#if ROM == 32			    
 | 
			
		||||
map	0x00000 to 0x1ffff as rdwr	// 128KB RAM address space
 | 
			
		||||
map	0x20000 to 0xf7fff as reserved	// No access
 | 
			
		||||
map	0xF8000 to 0xfffff as rdonly	// 32KB EPROM address space
 | 
			
		||||
#define CODE_START 0xF800	    	// Start of application code
 | 
			
		||||
#elif ROM == 64
 | 
			
		||||
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
 | 
			
		||||
map	0x20000 to 0xEffff as reserved	// No access
 | 
			
		||||
map	0xF0000 to 0xfffff as rdonly	// 64KB EPROM address space
 | 
			
		||||
#define CODE_START 0xF000	    	// Start of application code
 | 
			
		||||
#elif ROM == 128
 | 
			
		||||
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
 | 
			
		||||
map	0x20000 to 0xDffff as reserved	// No access
 | 
			
		||||
map	0xE0000 to 0xfffff as rdonly	// 128KB EPROM address space
 | 
			
		||||
#define CODE_START 0xE000	    	// Start of application code
 | 
			
		||||
#elif ROM == 256
 | 
			
		||||
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
 | 
			
		||||
map	0x20000 to 0xBffff as reserved	// No access
 | 
			
		||||
map	0xC0000 to 0xfffff as rdonly	// 256KB EPROM address space
 | 
			
		||||
#define CODE_START 0xC000			// Start of application code
 | 
			
		||||
#elif ROM == 512
 | 
			
		||||
map	0x00000 to 0x1ffff as rdwr			// 128KB RAM address space
 | 
			
		||||
map	0x20000 to 0x7ffff as reserved	// No access
 | 
			
		||||
map	0x80000 to 0xfffff as rdonly		// 512KB EPROM address space
 | 
			
		||||
#define CODE_START 0x8000			// Start of application code
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DATA_START		0x0040			// Start of application data
 | 
			
		||||
#define BOOT_START		0xffc0			// Start of initialization code
 | 
			
		||||
 | 
			
		||||
initcode	reset		\ // Reset vector to program entry point
 | 
			
		||||
		umcs = 0x80bf	\ // 512K ROM, 3 wait states
 | 
			
		||||
		lmcs = 0x7fbf	\ // 512K RAM, 3 wait states
 | 
			
		||||
		mpcs = 0xa0bf	\
 | 
			
		||||
		mmcs = 0x81ff	\
 | 
			
		||||
		pacs = 0x007f
 | 
			
		||||
 | 
			
		||||
class 	??LOCATE = BOOT_START		// Chip select initialization
 | 
			
		||||
output	??LOCATE
 | 
			
		||||
 | 
			
		||||
#if ROM == 32			// 27C256-90 EPROM or FLASH
 | 
			
		||||
hexfile binary offset=0xf8000 size=32	// for 27C256, bin file
 | 
			
		||||
#elif ROM == 64				// 27C512-90 EPROM or FLASH
 | 
			
		||||
hexfile binary offset=0xF0000 size=64	// for 27C512
 | 
			
		||||
#elif ROM == 128			// 27C010-90 EPROM or FLASH
 | 
			
		||||
hexfile binary offset=0xE0000 size=128	// for 27C010
 | 
			
		||||
#elif ROM == 256			// 27C020-90 EPROM or FLASH
 | 
			
		||||
hexfile binary offset=0xC0000 size=256	// for 27C020
 | 
			
		||||
#elif ROM == 512			// 27C040-90 EPROM or FLASH
 | 
			
		||||
hexfile Intel86 offset=0x80000 size=512	// for 27C040, output .HEX file
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Start of common configuration file settings.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
absfile	axe86									// Paradigm C++ debugging output
 | 
			
		||||
listfile	segments								// Absolute segment map
 | 
			
		||||
 | 
			
		||||
dup		DATA ROMDATA		// Make a copy of initialized data
 | 
			
		||||
dup		FAR_DATA ROMFARDATA	// Make a copy of far initialized data
 | 
			
		||||
 | 
			
		||||
#if defined(__COMPFARDATA__)	   	// Compress and display results
 | 
			
		||||
compress	ROMFARDATA
 | 
			
		||||
display	compression
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
class		CODE = CODE_START  	// Application code
 | 
			
		||||
class		DATA = DATA_START  	// Application data
 | 
			
		||||
 | 
			
		||||
order		DATA								\	// RAM class organization
 | 
			
		||||
			BSS		    	\
 | 
			
		||||
			NVRAM		    	\
 | 
			
		||||
			EDATA		    	\
 | 
			
		||||
			STACK		    	\
 | 
			
		||||
			FAR_DATA ENDFAR_DATA	\
 | 
			
		||||
			FAR_BSS ENDFAR_BSS  	\
 | 
			
		||||
			FAR_HEAP ENDFAR_HEAP
 | 
			
		||||
 | 
			
		||||
order		CODE			      	\	// EPROM class organization
 | 
			
		||||
			INITDATA EXITDATA   	\
 | 
			
		||||
			FAR_CONST ENDFAR_CONST	\
 | 
			
		||||
			ROMDATA ENDROMDATA    	\
 | 
			
		||||
			ROMFARDATA ENDROMFARDATA
 | 
			
		||||
 | 
			
		||||
output	CODE				      	\	// Classes in the output file(s)
 | 
			
		||||
			INITDATA EXITDATA     	\
 | 
			
		||||
			FAR_CONST ENDFAR_CONST	\
 | 
			
		||||
			ROMDATA ENDROMDATA    	\
 | 
			
		||||
			ROMFARDATA ENDROMFARDATA
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/AE.LIB
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/AE.LIB
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										77
									
								
								Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is distributed in the hope that it will be useful,
 | 
			
		||||
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef FREERTOS_CONFIG_H
 | 
			
		||||
#define FREERTOS_CONFIG_H
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------
 | 
			
		||||
 * Application specific definitions.
 | 
			
		||||
 *
 | 
			
		||||
 * These definitions should be adjusted for your particular hardware and
 | 
			
		||||
 * application requirements.
 | 
			
		||||
 *
 | 
			
		||||
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 | 
			
		||||
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
 | 
			
		||||
 *----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#define configUSE_PREEMPTION		1
 | 
			
		||||
#define configUSE_IDLE_HOOK			1
 | 
			
		||||
#define configUSE_TICK_HOOK			0
 | 
			
		||||
#define configCPU_CLOCK_HZ			( ( unsigned portLONG ) 80000000 )
 | 
			
		||||
#define configTICK_RATE_HZ			( ( portTickType ) 1000 )
 | 
			
		||||
#define configMAX_PRIORITIES		( ( unsigned portBASE_TYPE ) 5 )
 | 
			
		||||
#define configMINIMAL_STACK_SIZE	( ( unsigned portSHORT ) 256 ) /* This can be made smaller if required. */
 | 
			
		||||
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 20 * 1024 ) ) 
 | 
			
		||||
#define configMAX_TASK_NAME_LEN		( 16 )
 | 
			
		||||
#define configUSE_TRACE_FACILITY	1
 | 
			
		||||
#define configUSE_16_BIT_TICKS		0
 | 
			
		||||
#define configIDLE_SHOULD_YIELD		1
 | 
			
		||||
 | 
			
		||||
/* Co-routine definitions. */
 | 
			
		||||
#define configUSE_CO_ROUTINES 		0
 | 
			
		||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
 | 
			
		||||
 | 
			
		||||
/* Set the following definitions to 1 to include the API function, or zero
 | 
			
		||||
to exclude the API function. */
 | 
			
		||||
 | 
			
		||||
#define INCLUDE_vTaskPrioritySet        1
 | 
			
		||||
#define INCLUDE_uxTaskPriorityGet       1
 | 
			
		||||
#define INCLUDE_vTaskDelete             1
 | 
			
		||||
#define INCLUDE_vTaskCleanUpResources   1
 | 
			
		||||
#define INCLUDE_vTaskSuspend            1
 | 
			
		||||
#define INCLUDE_vTaskDelayUntil			1
 | 
			
		||||
#define INCLUDE_vTaskDelay				1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* FREERTOS_CONFIG_H */
 | 
			
		||||
							
								
								
									
										289
									
								
								Demo/WizNET_DEMO_TERN_186/HTTPTask.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								Demo/WizNET_DEMO_TERN_186/HTTPTask.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,289 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is distributed in the hope that it will be useful,
 | 
			
		||||
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
 * Very simple task that responds with a single WEB page to http requests.
 | 
			
		||||
 *
 | 
			
		||||
 * The WEB page displays task and system status.  A semaphore is used to 
 | 
			
		||||
 * wake the task when there is processing to perform as determined by the 
 | 
			
		||||
 * interrupts generated by the Ethernet interface.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Standard includes. */
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/* Tern includes. */
 | 
			
		||||
#include "utils\system_common.h"
 | 
			
		||||
#include "i2chip_hw.h"
 | 
			
		||||
#include "socket.h"
 | 
			
		||||
 | 
			
		||||
/* FreeRTOS.org includes. */
 | 
			
		||||
#include <FreeRTOS.h>
 | 
			
		||||
#include <task.h>
 | 
			
		||||
#include <semphr.h>
 | 
			
		||||
 | 
			
		||||
/* The standard http port on which we are going to listen. */
 | 
			
		||||
#define httpPORT 80
 | 
			
		||||
 | 
			
		||||
#define httpTX_WAIT 2
 | 
			
		||||
 | 
			
		||||
/* Network address configuration. */
 | 
			
		||||
const unsigned portCHAR ucMacAddress[] =			{ 12, 128, 12, 34, 56, 78 };
 | 
			
		||||
const unsigned portCHAR ucGatewayAddress[] =		{ 192, 168, 2, 1 };
 | 
			
		||||
const unsigned portCHAR ucIPAddress[] =				{ 172, 25, 218, 210 };
 | 
			
		||||
const unsigned portCHAR ucSubnetMask[] =			{ 255, 255, 255, 0 };
 | 
			
		||||
 | 
			
		||||
/* The number of sockets this task is going to handle. */
 | 
			
		||||
#define httpSOCKET_NUM                       3
 | 
			
		||||
unsigned portCHAR ucConnection[ httpSOCKET_NUM ];
 | 
			
		||||
 | 
			
		||||
/* The maximum data buffer size we can handle. */
 | 
			
		||||
#define httpSOCKET_BUFFER_SIZE	2048
 | 
			
		||||
 | 
			
		||||
/* Standard HTTP response. */
 | 
			
		||||
#define httpOUTPUT_OK	"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"
 | 
			
		||||
 | 
			
		||||
/* Hard coded HTML components.  Other data is generated dynamically. */
 | 
			
		||||
#define HTML_OUTPUT_BEGIN "\
 | 
			
		||||
<HTML><head><meta http-equiv=\"Refresh\" content=\"1\;url=index.htm\"></head>\
 | 
			
		||||
<BODY bgcolor=\"#CCCCFF\"><font face=\"arial\"><H2>FreeRTOS.org<sup>tm</sup> + Tern E-Engine<sup>tm</sup></H2>\
 | 
			
		||||
<a href=\"http:\/\/www.FreeRTOS.org\">FreeRTOS.org Homepage</a><P>\
 | 
			
		||||
<HR>Task status table:\r\n\
 | 
			
		||||
<p><font face=\"courier\"><pre>Task          State  Priority  Stack	#<br>\
 | 
			
		||||
************************************************<br>"
 | 
			
		||||
 | 
			
		||||
#define HTML_OUTPUT_END   "\
 | 
			
		||||
</font></BODY></HTML>"
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialise the data structures used to hold the socket status.
 | 
			
		||||
 */
 | 
			
		||||
static void prvHTTPInit( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Setup the Ethernet interface with the network addressing information.
 | 
			
		||||
 */
 | 
			
		||||
static void prvNetifInit( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Generate the dynamic components of the served WEB page and transmit the 
 | 
			
		||||
 * entire page through the socket.
 | 
			
		||||
 */
 | 
			
		||||
static void prvTransmitHTTP( unsigned portCHAR socket );
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* This variable is simply incremented by the idle task hook so the number of
 | 
			
		||||
iterations the idle task has performed can be displayed as part of the served
 | 
			
		||||
page. */
 | 
			
		||||
unsigned portLONG ulIdleLoops = 0UL;
 | 
			
		||||
 | 
			
		||||
/* Data buffer shared by sockets. */
 | 
			
		||||
unsigned portCHAR ucSocketBuffer[ httpSOCKET_BUFFER_SIZE ];
 | 
			
		||||
 | 
			
		||||
/* The semaphore used by the Ethernet ISR to signal that the task should wake
 | 
			
		||||
and process whatever caused the interrupt. */
 | 
			
		||||
xSemaphoreHandle xTCPSemaphore = NULL;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
void vHTTPTask( void * pvParameters )
 | 
			
		||||
{
 | 
			
		||||
portSHORT i, sLen;
 | 
			
		||||
unsigned portCHAR ucState;
 | 
			
		||||
 | 
			
		||||
	( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
    /* Create the semaphore used to communicate between this task and the
 | 
			
		||||
    WIZnet ISR. */
 | 
			
		||||
    vSemaphoreCreateBinary( xTCPSemaphore );
 | 
			
		||||
 | 
			
		||||
	/* Make sure everything is setup before we start. */
 | 
			
		||||
	prvNetifInit();
 | 
			
		||||
	prvHTTPInit();
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Wait until the ISR tells us there is something to do. */
 | 
			
		||||
    	xSemaphoreTake( xTCPSemaphore, portMAX_DELAY );
 | 
			
		||||
 | 
			
		||||
		/* Check each socket. */
 | 
			
		||||
		for( i = 0; i < httpSOCKET_NUM; i++ )
 | 
			
		||||
		{
 | 
			
		||||
			ucState = select( i, SEL_CONTROL );
 | 
			
		||||
 | 
			
		||||
			switch (ucState)
 | 
			
		||||
			{
 | 
			
		||||
				case SOCK_ESTABLISHED :  /* new connection established. */
 | 
			
		||||
 | 
			
		||||
					if( ( sLen = select( i, SEL_RECV ) ) > 0 )
 | 
			
		||||
					{
 | 
			
		||||
						if( sLen > httpSOCKET_BUFFER_SIZE ) 
 | 
			
		||||
						{
 | 
			
		||||
							sLen = httpSOCKET_BUFFER_SIZE;
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						disable();
 | 
			
		||||
						
 | 
			
		||||
						sLen = recv( i, ucSocketBuffer, sLen );    
 | 
			
		||||
 | 
			
		||||
						if( ucConnection[ i ] == 1 )
 | 
			
		||||
						{	
 | 
			
		||||
							/* This is our first time processing a HTTP
 | 
			
		||||
							 request on this connection. */
 | 
			
		||||
							prvTransmitHTTP( i );
 | 
			
		||||
							ucConnection[i] = 0;
 | 
			
		||||
						}
 | 
			
		||||
						enable();
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case SOCK_CLOSE_WAIT :
 | 
			
		||||
 | 
			
		||||
					close(i);
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case SOCK_CLOSED :
 | 
			
		||||
 | 
			
		||||
					ucConnection[i] = 1;
 | 
			
		||||
					socket( i, SOCK_STREAM, 80, 0x00 );
 | 
			
		||||
					NBlisten( i ); /* reinitialize socket. */
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvHTTPInit( void )
 | 
			
		||||
{
 | 
			
		||||
unsigned portCHAR ucIndex;
 | 
			
		||||
 | 
			
		||||
	/* There are 4 total sockets available; we will claim 3 for HTTP. */
 | 
			
		||||
	for(ucIndex = 0; ucIndex < httpSOCKET_NUM; ucIndex++)
 | 
			
		||||
	{
 | 
			
		||||
		socket( ucIndex, SOCK_STREAM, httpPORT, 0x00 );
 | 
			
		||||
		NBlisten( ucIndex );
 | 
			
		||||
		ucConnection[ ucIndex ] = 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvNetifInit( void )
 | 
			
		||||
{
 | 
			
		||||
	i2chip_init();
 | 
			
		||||
	initW3100A();
 | 
			
		||||
 | 
			
		||||
	setMACAddr( ( unsigned portCHAR * ) ucMacAddress );
 | 
			
		||||
	setgateway( ( unsigned portCHAR * ) ucGatewayAddress );
 | 
			
		||||
	setsubmask( ( unsigned portCHAR * ) ucSubnetMask );
 | 
			
		||||
	setIP( ( unsigned portCHAR * ) ucIPAddress );
 | 
			
		||||
 | 
			
		||||
	/* See definition of 'sysinit' in socket.c
 | 
			
		||||
	 - 8 KB transmit buffer, and 8 KB receive buffer available.  These buffers
 | 
			
		||||
	   are shared by all 4 channels.
 | 
			
		||||
	 - (0x55, 0x55) configures the send and receive buffers at 
 | 
			
		||||
		httpSOCKET_BUFFER_SIZE bytes for each of the 4 channels. */
 | 
			
		||||
	sysinit( 0x55, 0x55 );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvTransmitHTTP(unsigned portCHAR socket)
 | 
			
		||||
{
 | 
			
		||||
extern portSHORT usCheckStatus;
 | 
			
		||||
 | 
			
		||||
	/* Send the http and html headers. */
 | 
			
		||||
	send( socket, ( unsigned portCHAR * ) httpOUTPUT_OK, strlen( httpOUTPUT_OK ) );
 | 
			
		||||
	send( socket, ( unsigned portCHAR * ) HTML_OUTPUT_BEGIN, strlen( HTML_OUTPUT_BEGIN ) );
 | 
			
		||||
 | 
			
		||||
	/* Generate then send the table showing the status of each task. */
 | 
			
		||||
	vTaskList( ucSocketBuffer );
 | 
			
		||||
 	send( socket, ( unsigned portCHAR * ) ucSocketBuffer, strlen( ucSocketBuffer ) );
 | 
			
		||||
 | 
			
		||||
	/* Send the number of times the idle task has looped. */
 | 
			
		||||
    sprintf( ucSocketBuffer, "</pre></font><p><br>The idle task has looped 0x%08lx times<br>", ulIdleLoops );
 | 
			
		||||
	send( socket, ( unsigned portCHAR * ) ucSocketBuffer, strlen( ucSocketBuffer ) );
 | 
			
		||||
 | 
			
		||||
	/* Send the tick count. */
 | 
			
		||||
    sprintf( ucSocketBuffer, "The tick count is 0x%08lx<br>", xTaskGetTickCount() );
 | 
			
		||||
	send( socket, ( unsigned portCHAR * ) ucSocketBuffer, strlen( ucSocketBuffer ) );
 | 
			
		||||
 | 
			
		||||
	/* Show a message indicating whether or not the check task has discovered 
 | 
			
		||||
	an error in any of the standard demo tasks. */
 | 
			
		||||
    if( usCheckStatus == 0 )
 | 
			
		||||
    {
 | 
			
		||||
	    sprintf( ucSocketBuffer, "No errors detected." );
 | 
			
		||||
		send( socket, ( unsigned portCHAR * ) ucSocketBuffer, strlen( ucSocketBuffer ) );
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	    sprintf( ucSocketBuffer, "<font color=\"red\">An error has been detected in at least one task %x.</font><p>", usCheckStatus );
 | 
			
		||||
		send( socket, ( unsigned portCHAR * ) ucSocketBuffer, strlen( ucSocketBuffer ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* Finish the page off. */
 | 
			
		||||
	send( socket, (unsigned portCHAR*)HTML_OUTPUT_END, strlen(HTML_OUTPUT_END));
 | 
			
		||||
 | 
			
		||||
	/* Must make sure the data is gone before closing the socket. */
 | 
			
		||||
	while( !tx_empty( socket ) )
 | 
			
		||||
    {
 | 
			
		||||
    	vTaskDelay( httpTX_WAIT );
 | 
			
		||||
    }
 | 
			
		||||
	close(socket);
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vApplicationIdleHook( void )
 | 
			
		||||
{
 | 
			
		||||
	ulIdleLoops++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								Demo/WizNET_DEMO_TERN_186/HTTPTask.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Demo/WizNET_DEMO_TERN_186/HTTPTask.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is distributed in the hope that it will be useful,
 | 
			
		||||
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef HTTP_TASK_H
 | 
			
		||||
#define HTTP_TASK_H
 | 
			
		||||
 | 
			
		||||
void vHTTPTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.DSW
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.DSW
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.ide
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.ide
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.mbt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.mbt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.mrt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.mrt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.rom
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Demo/WizNET_DEMO_TERN_186/RTOSDemo.rom
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										239
									
								
								Demo/WizNET_DEMO_TERN_186/i2chip_hw.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								Demo/WizNET_DEMO_TERN_186/i2chip_hw.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,239 @@
 | 
			
		||||
/*
 | 
			
		||||
********************************************************************************
 | 
			
		||||
* TERN, Inc.
 | 
			
		||||
* (c) Copyright 2005, http://www.tern.com
 | 
			
		||||
*
 | 
			
		||||
* - Created to support i2chip module on a variety of TERN hardware platforms.
 | 
			
		||||
********************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <embedded.h>
 | 
			
		||||
#include "i2chip_hw.h"
 | 
			
		||||
 | 
			
		||||
#ifdef I2CHIP_MMC
 | 
			
		||||
#include "mmc.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void i2chip_init(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_586
 | 
			
		||||
/*
 | 
			
		||||
	poke(MMCR,_BOOTCSCTL_,peek(MMCR,_BOOTCSCTL_)&0xffc9);	// ROM 1 wait
 | 
			
		||||
	poke(MMCR,_ROMCS2CTL_,peek(MMCR,_ROMCS2CTL_)&0xffc8);	// SRAM 0 wait
 | 
			
		||||
 | 
			
		||||
	pokeb(MMCR,	_GPCSRT_, 24); // set the GP CS recovery time, 12 works
 | 
			
		||||
	pokeb(MMCR,	_GPCSPW_, 128); // set the GP CS width, 64 works
 | 
			
		||||
	pokeb(MMCR,	_GPCSOFF_, 16); // set the GP CS offset, 8 works
 | 
			
		||||
	pokeb(MMCR,	_GPRDW_, 80); // set the GP RD pulse width, 50 works
 | 
			
		||||
	pokeb(MMCR,	_GPRDOFF_, 30); // set the GP RD offset, 15 works
 | 
			
		||||
	pokeb(MMCR,	_GPWRW_, 80); // set the GP WR pulse width, 50
 | 
			
		||||
	pokeb(MMCR,	_GPWROFF_, 30); // set the GP WR offset, 15
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_5E
 | 
			
		||||
	pokeb(MMCR,	_GPCSDW_, peekb(MMCR, _GPCSDW_)&0xf7); // set /CS3-/CSM Data Width=8
 | 
			
		||||
	pokeb(MMCR,	_CSPFS_, peekb(MMCR, _CSPFS_)|0x08); // set the GP CS3 PIN Function
 | 
			
		||||
	poke(MMCR,	_PAR15_, 0x2000); // set CS3 I/O region
 | 
			
		||||
	poke(MMCR,	_PAR15_+2, 0x2dff); // set CS3 I/O region, 512 bytes
 | 
			
		||||
 | 
			
		||||
	pokeb(MMCR,	_GPCSDW_, peekb(MMCR, _GPCSDW_)&0x7f); // CS7=J4.3 Data Width=8, /CSI
 | 
			
		||||
//	pokeb(MMCR,	_GPCSDW_, peekb(MMCR, _GPCSDW_)|0x80); // CS7=J4.3 Data Width=16
 | 
			
		||||
	pokeb(MMCR,	_CSPFS_, peekb(MMCR, _CSPFS_)|0x80); // set the GP CS7 PIN Function
 | 
			
		||||
	poke(MMCR,	_PAR7_, 0x4000); // set CS7 I/O region
 | 
			
		||||
	poke(MMCR,	_PAR7_+2, 0x3dff); // set CS7 I/O region, 512 bytes
 | 
			
		||||
#else
 | 
			
		||||
   // If it's not 5E, then it must be 5P... in which case, we use PCS0 and
 | 
			
		||||
   // PCS1 as the chip-selects.
 | 
			
		||||
	pokeb(MMCR,	_GPCSDW_, peekb(MMCR, _GPCSDW_)&0xfe); // CS0 Data Width=8
 | 
			
		||||
	poke(MMCR, _PIOPFS31_16_, peek(MMCR,_PIOPFS31_16_)|0x0800); // P27=/CS0
 | 
			
		||||
 	poke(MMCR,	_PAR13_, 0x1800); // CS0 I/O region
 | 
			
		||||
 	poke(MMCR,	_PAR13_+2, 0x21ff); // CS0 I/O RW, 512 bytes, start 0x1800
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
a	HLPRsetvect(0x47, (void far *) spu_m_isr);
 | 
			
		||||
	HLPRsetvect(0x4f, (void far *) spu_1_isr);
 | 
			
		||||
	HLPRsetvect(0x57, (void far *) spu_2_isr);
 | 
			
		||||
#endif  // 186, or RE
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_186
 | 
			
		||||
   pio_init(18, 0);	//	P18=CTS1 for /PCS2
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_16_BIT
 | 
			
		||||
	outport(0xfff2, 2);	// AUXCON, MCS, Bus 16-bit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef I2CHIP_MCS_DIRECT
 | 
			
		||||
	outport(0xffa0,0xc0bf); 						     // UMCS, 256K ROM, disable AD15-0
 | 
			
		||||
	outport(0xfff0,inport(0xfff0)|0x4000 );        // SYSCON, MCS0 0x80000-0xbffff
 | 
			
		||||
	outport(0xffa8,0xa0bf ); 					        // MPCS, MCS0=P14, 64KB, PCS I/O,
 | 
			
		||||
	outport(0xffa6,0x81ff); 						     // MMCS, base 0x80000,
 | 
			
		||||
	outport(0xffa2,0x7fbf);						        // 512K RAM,
 | 
			
		||||
	outport(0xffa4,0x007d); 						     // PACS, base 0,
 | 
			
		||||
	
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
	outport( 0xffa0,0xc0bf); // UMCS, 256K ROM, 3 wait, disable AD15-0
 | 
			
		||||
	outport( 0xfff0,inport(0xfff0)|0x4000 ); // SYSCON, MCS0 0x80000-0xbffff
 | 
			
		||||
//   outport( 0xffa8,0xa0bc ); // MPCS, MCS0=P14, 64KB, PCS I/O 0 wait
 | 
			
		||||
//	outport( 0xffa8,0xa0bd ); // MPCS, MCS0=P14, 64KB, PCS I/O 1 wait
 | 
			
		||||
	outport( 0xffa8,0xa0bf ); // MPCS, MCS0=P14, 64KB, PCS I/O 1 wait
 | 
			
		||||
#endif // I2CHIP_MCS_DIRECT
 | 
			
		||||
 | 
			
		||||
#ifndef TERN_RE   // 80 MHz R- boards can't tolerate zero wait state.
 | 
			
		||||
	outport( 0xffa6,0x81ff ); // MMCS, base 0x80000
 | 
			
		||||
 	outport(0xffa2,0x7fbe);	// 512K RAM, 0 wait states
 | 
			
		||||
 	outport(0xffa4,0x007d); // PACS, base 0, 0 wait
 | 
			
		||||
#endif
 | 
			
		||||
	pio_init(14,0); 									     //  Enable /MCS0
 | 
			
		||||
 | 
			
		||||
#endif // TERN_186
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef I2CHIP_WINDOW
 | 
			
		||||
#ifdef I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
	pio_init(12, 2); // Configure P12 as A7, an output we'll be using.
 | 
			
		||||
   pio_wr(12, 0);   // Set A7 low, initially.
 | 
			
		||||
#endif
 | 
			
		||||
	WINDOW_RESTORE_BASE;    // Equivalent to calling mmc_window(7, 0);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef I2CHIP_WINDOW
 | 
			
		||||
 | 
			
		||||
void i2chip_set_page(u_int page)
 | 
			
		||||
{
 | 
			
		||||
	u_int new_page = page;
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
	if (page & 0x01)   // ... we're checking the right-most bit in the page.
 | 
			
		||||
    	outport(0xff74, inport(0xff74) | 0x1000 ); // Using P12 as A7...
 | 
			
		||||
   else
 | 
			
		||||
   	outport(0xff74, inport(0xff74) & 0xefff );
 | 
			
		||||
 | 
			
		||||
   new_page = page >> 1;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_MMC
 | 
			
		||||
	mmc_window(7, new_page);   // See mmc.c
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef   I2CHIP_P51
 | 
			
		||||
	p51_window(new_page);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static u_int s_addr = 0xffff;
 | 
			
		||||
u_char far* i2chip_mkptr(u_int addr)
 | 
			
		||||
{
 | 
			
		||||
	if ((s_addr & 0xff00) == (addr & 0xff00)) // No point... no point...
 | 
			
		||||
		return MK_FP(WINDOW_BASE_SEGM, addr & 0xff);
 | 
			
		||||
 | 
			
		||||
	s_addr = addr ;
 | 
			
		||||
 | 
			
		||||
	// So the argument to this function is... what again?
 | 
			
		||||
   // I think it should be the highest 16-bits... or, in other words,
 | 
			
		||||
   // FP_SEG of a huge ptr.
 | 
			
		||||
   // Ok, and the *return* value should be a UINT value for the new
 | 
			
		||||
   // segment address to be used, if it's at all needed.  TODO
 | 
			
		||||
   I2CHIP_SET_PAGE(s_addr >> 8);  // Portable version
 | 
			
		||||
//	outportb(0x00, addr>>8); // quicker version
 | 
			
		||||
 | 
			
		||||
	return MK_FP(WINDOW_BASE_SEGM, addr & 0xff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void i2chip_set_window(u_int window_addr)
 | 
			
		||||
{
 | 
			
		||||
	s_addr = window_addr;
 | 
			
		||||
   I2CHIP_SET_PAGE(s_addr >> 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Still inside #define I2CHIP_WINDOW ...
 | 
			
		||||
 | 
			
		||||
u_int i2chip_get_window(void)
 | 
			
		||||
{
 | 
			
		||||
   return s_addr & 0xff00;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void i2chip_push_window(u_int addr)
 | 
			
		||||
{
 | 
			
		||||
	I2CHIP_SET_PAGE(addr>>8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void i2chip_pop_window(void)
 | 
			
		||||
{
 | 
			
		||||
	I2CHIP_SET_PAGE(s_addr >> 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef I2CHIP_WINDOW_IO
 | 
			
		||||
u_char   io_read_value(u_char far* addr)
 | 
			
		||||
{
 | 
			
		||||
	// return value ... we assume the page is already set.  So, instead,
 | 
			
		||||
   // we just go ahead and output valeu.
 | 
			
		||||
   return inportb(I2CHIP_BASE_SEG + (FP_OFF(addr) & 0xff));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void     io_write_value(u_char far* addr, u_char value)
 | 
			
		||||
{
 | 
			
		||||
 	// Get the last whatever bytes... and write value.
 | 
			
		||||
	outportb(I2CHIP_BASE_SEG + (FP_OFF(addr) & 0xff), value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // I2CHIP_WINDOW_IO
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_P51
 | 
			
		||||
void p51_window(unsigned int page)
 | 
			
		||||
{
 | 
			
		||||
asm xor ax, ax
 | 
			
		||||
asm mov ax, page
 | 
			
		||||
#ifdef   I2CHIP_WINDOW_IO
 | 
			
		||||
asm mov dx, 1040h
 | 
			
		||||
asm out dx, al
 | 
			
		||||
#else
 | 
			
		||||
asm out 040h, al
 | 
			
		||||
#endif
 | 
			
		||||
// use J1.19=/CS6
 | 
			
		||||
}
 | 
			
		||||
#endif  // I2CHIP_P51
 | 
			
		||||
 | 
			
		||||
#endif // I2CHIP_WINDOW
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_586
 | 
			
		||||
/*
 | 
			
		||||
//	Function: spu_m_isr
 | 
			
		||||
//	P22=Master PIC IR7, interrupt vector=0x47, /INTA
 | 
			
		||||
*/
 | 
			
		||||
void interrupt far spu_m_isr(void)
 | 
			
		||||
{
 | 
			
		||||
disable();
 | 
			
		||||
// Issue the EOI to interrupt controller
 | 
			
		||||
outportb(_MPICOCW2_IO,0x67); // Specific EQI for master IR7
 | 
			
		||||
enable();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
//	Function: spu_1_isr
 | 
			
		||||
//	P10=slave1 PIC IR7, Master IR2, interrupt vector=0x4f, /INTC
 | 
			
		||||
*/
 | 
			
		||||
void interrupt far spu_1_isr(void)
 | 
			
		||||
{
 | 
			
		||||
disable();
 | 
			
		||||
// Issue the EOI to interrupt controller
 | 
			
		||||
	outportb(_S1PICOCW2_IO,0x67);	// Specific EOI for slave 1 IR7
 | 
			
		||||
  	outportb(_MPICOCW2_IO,0x62); // Specific EQI for master IR2
 | 
			
		||||
enable();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
//	Function: spu_2_isr
 | 
			
		||||
//	P20=Slave2 PIC IR7, Master IR5, interrupt vector=0x57, GPIRQ7=PIO16 GP timer1
 | 
			
		||||
*/
 | 
			
		||||
void interrupt far spu_2_isr(void)
 | 
			
		||||
{
 | 
			
		||||
disable();
 | 
			
		||||
// Issue the EOI to interrupt controller
 | 
			
		||||
	outportb(_S2PICOCW2_IO,0x67);	// Specific EOI for slave 1 IR7
 | 
			
		||||
  	outportb(_MPICOCW2_IO,0x65); // Specific EQI for master IR5
 | 
			
		||||
enable();
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										247
									
								
								Demo/WizNET_DEMO_TERN_186/include/SOCKET.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								Demo/WizNET_DEMO_TERN_186/include/SOCKET.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,247 @@
 | 
			
		||||
/*
 | 
			
		||||
********************************************************************************
 | 
			
		||||
* TERN, Inc.
 | 
			
		||||
* (c) Copyright 2005, http://www.tern.com
 | 
			
		||||
*
 | 
			
		||||
* - Derived based on development version provided by Wiznet.
 | 
			
		||||
*
 | 
			
		||||
* Filename : socket.h
 | 
			
		||||
* Programmer(s):
 | 
			
		||||
* Created : 2002/06/20
 | 
			
		||||
* Modified :
 | 
			
		||||
*  2002/09/27 : - Renaming
 | 
			
		||||
*			       INT_STATUS --> INT_REG
 | 
			
		||||
*			       STATUS(i) --> INT_STATUS(i)
 | 
			
		||||
*			       C_STATUS(i) --> SOCK_STATUS(i)
 | 
			
		||||
*  2003/11/06 : Ported for use with TERN controller.  Note all byte access is at even addresses
 | 
			
		||||
*  2005/10/8  : Modified constants for easier initialization.
 | 
			
		||||
*
 | 
			
		||||
* Description : Header file of W3100A for TERN embedded controller
 | 
			
		||||
********************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
#ifndef	__SOCKET_H__
 | 
			
		||||
#define	__SOCKET_H__
 | 
			
		||||
 | 
			
		||||
#include "types.h"
 | 
			
		||||
#include "i2chip_hw.h"
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
#define	MAX_SOCK_NUM	4					// Concurrent maxmium number of socket
 | 
			
		||||
 | 
			
		||||
#define I2CHIP_C0_CR       0x00
 | 
			
		||||
#define I2CHIP_C1_CR       0x01
 | 
			
		||||
#define I2CHIP_C2_CR       0x02
 | 
			
		||||
#define I2CHIP_C3_CR       0x03
 | 
			
		||||
#define I2CHIP_C0_ISR      0x04
 | 
			
		||||
#define I2CHIP_C1_ISR      0x05
 | 
			
		||||
#define I2CHIP_C2_ISR      0x06
 | 
			
		||||
#define I2CHIP_C3_ISR      0x07
 | 
			
		||||
#define I2CHIP_IR          0x08
 | 
			
		||||
#define I2CHIP_IMR         0x09
 | 
			
		||||
 | 
			
		||||
#define I2CHIP_IDM_OR		0x0C
 | 
			
		||||
#define I2CHIP_IDM_AR0     0x0D
 | 
			
		||||
#define I2CHIP_IDM_AR1     0x0E
 | 
			
		||||
#define I2CHIP_IDM_DR      0x0F
 | 
			
		||||
#define I2CHIP_C0_RW_PR    0x10
 | 
			
		||||
#define I2CHIP_C0_RR_PR    0x14
 | 
			
		||||
#define I2CHIP_C0_TA_PR    0x18
 | 
			
		||||
#define I2CHIP_C1_RW_PR    0x1C
 | 
			
		||||
#define I2CHIP_C1_RR_PR    0x20
 | 
			
		||||
#define I2CHIP_C1_TA_PR    0x24
 | 
			
		||||
#define I2CHIP_C2_RW_PR    0x28
 | 
			
		||||
#define I2CHIP_C2_RR_PR    0x2C
 | 
			
		||||
#define I2CHIP_C2_TA_PR    0x30
 | 
			
		||||
#define I2CHIP_C3_RW_PR    0x34
 | 
			
		||||
#define I2CHIP_C3_RR_PR    0x38
 | 
			
		||||
#define I2CHIP_C3_TA_PR    0x3C
 | 
			
		||||
#define I2CHIP_C0_TW_PR    0x40
 | 
			
		||||
#define I2CHIP_C0_TR_PR    0x44
 | 
			
		||||
#define I2CHIP_C1_TW_PR    0x4C
 | 
			
		||||
#define I2CHIP_C1_TR_PR    0x50
 | 
			
		||||
#define I2CHIP_C2_TW_PR    0x58
 | 
			
		||||
#define I2CHIP_C2_TR_PR    0x5C
 | 
			
		||||
#define I2CHIP_C3_TW_PR    0x64
 | 
			
		||||
#define I2CHIP_C3_TR_PR    0x68
 | 
			
		||||
#define I2CHIP_GAR         0x80
 | 
			
		||||
#define I2CHIP_SMR         0x84
 | 
			
		||||
#define I2CHIP_SHAR     	0x88
 | 
			
		||||
#define I2CHIP_SIPR        0x8E
 | 
			
		||||
#define I2CHIP_IRTR        0x92
 | 
			
		||||
#define I2CHIP_RCR         0x94
 | 
			
		||||
#define I2CHIP_RMSR        0x95
 | 
			
		||||
#define I2CHIP_TMSR        0x96
 | 
			
		||||
#define I2CHIP_C0_SSR      0xA0
 | 
			
		||||
#define I2CHIP_C0_SOPR     0xA1
 | 
			
		||||
#define I2CHIP_C0_DIR      0xA8
 | 
			
		||||
#define I2CHIP_CO_DPR      0xAC
 | 
			
		||||
#define I2CHIP_C0_SPR      0xAE
 | 
			
		||||
#define I2CHIP_C0_IPR      0xB0
 | 
			
		||||
#define I2CHIP_C0_TOSR     0xB1
 | 
			
		||||
#define I2CHIP_C0_MSSR     0xB2
 | 
			
		||||
 | 
			
		||||
#define I2CHIP_C1_SSR      0xB8
 | 
			
		||||
#define I2CHIP_C1_SOPR     0xB9
 | 
			
		||||
#define I2CHIP_C1_DIR      0xC0
 | 
			
		||||
#define I2CHIP_C1_DPR      0xC4
 | 
			
		||||
#define I2CHIP_C1_SPR      0xC6
 | 
			
		||||
#define I2CHIP_C1_IPR      0xC8
 | 
			
		||||
#define I2CHIP_C1_TOSR     0xC9
 | 
			
		||||
#define I2CHIP_C1_MSSR     0xCA
 | 
			
		||||
 | 
			
		||||
#define I2CHIP_C2_SSR      0xD0
 | 
			
		||||
#define I2CHIP_C2_SOPR     0xD1
 | 
			
		||||
#define I2CHIP_C2_DIR      0xD8
 | 
			
		||||
#define I2CHIP_C2_DPR      0xDC
 | 
			
		||||
#define I2CHIP_C2_SPR      0xDE
 | 
			
		||||
#define I2CHIP_C2_IPR      0xE0
 | 
			
		||||
#define I2CHIP_C2_TOSR     0xE1
 | 
			
		||||
#define I2CHIP_C2_MSSR     0xE2
 | 
			
		||||
 | 
			
		||||
#define I2CHIP_C3_SSR      0xE8
 | 
			
		||||
#define I2CHIP_C3_SOPR     0xE9
 | 
			
		||||
#define I2CHIP_C3_DIR      0xF0
 | 
			
		||||
#define I2CHIP_C3_DPR      0xF4
 | 
			
		||||
#define I2CHIP_C3_SPR      0xF6
 | 
			
		||||
#define I2CHIP_C3_IPR      0xF8
 | 
			
		||||
#define I2CHIP_C3_TOSR     0xF9
 | 
			
		||||
#define I2CHIP_C3_MSSR     0xFA
 | 
			
		||||
 | 
			
		||||
#define MAX_SEGMENT_SIZE	1460			// Maximum TCP transmission packet size
 | 
			
		||||
#define MAX_BUF_SIZE1		0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* SOCKET OPTION(Settting OPT_PROTOCOL REG.) */
 | 
			
		||||
#define SOCKOPT_BROADCAST	0x80		// Transmission, Reception of broadcasting data
 | 
			
		||||
#define SOCKOPT_NDTIMEOUT	0x40		// Setting timeout
 | 
			
		||||
#define SOCKOPT_NDACK		0x20		// Setting No Delayed Ack(TCP)
 | 
			
		||||
#define SOCKOPT_SWS			0x10		// Setting Silly Window Syndrome(TCP)
 | 
			
		||||
 | 
			
		||||
/* OPTION(Setting OPT_PROTOCOL REG.) for MAC LAYER RAW MODE */
 | 
			
		||||
#define MACLOPT_RXERR		0x80		// Setting reception of error packet
 | 
			
		||||
#define MACLOPT_BROADCAST	0x40		// Setting reception of broadcast packet
 | 
			
		||||
#define MACLOPT_PROMISC		0x20		// Setting reception of promiscuous packet
 | 
			
		||||
 | 
			
		||||
/* Distinguish TCP / UDP / IP RAW / MAC RAW (Setting OPT_PROTOCOL REG.) */
 | 
			
		||||
#define	SOCK_CLOSEDM	0x00			// unused socket
 | 
			
		||||
#define	SOCK_STREAM		0x01			// TCP
 | 
			
		||||
#define	SOCK_DGRAM		0x02			// UDP
 | 
			
		||||
#define	SOCK_IPL_RAW	0x03			// IP LAYER RAW SOCK
 | 
			
		||||
#define	SOCK_MACL_RAW	0x04			// MAC LAYER RAW SOCK
 | 
			
		||||
 | 
			
		||||
/* Setting IP PROTOCOL */
 | 
			
		||||
#define IPPROTO_IP              0               // dummy for IP
 | 
			
		||||
#define IPPROTO_ICMP            1               // control message protocol
 | 
			
		||||
#define IPPROTO_IGMP            2               // internet group management protocol
 | 
			
		||||
#define IPPROTO_GGP             3               // gateway^2 (deprecated)
 | 
			
		||||
#define IPPROTO_TCP             6               // tcp
 | 
			
		||||
#define IPPROTO_PUP             12              // pup
 | 
			
		||||
#define IPPROTO_UDP             17              // user datagram protocol
 | 
			
		||||
#define IPPROTO_IDP             22              // xns idp
 | 
			
		||||
#define IPPROTO_ND              77              // UNOFFICIAL net disk proto
 | 
			
		||||
#define IPPROTO_RAW             255             // raw IP packet
 | 
			
		||||
 | 
			
		||||
/* Select parameter to use */
 | 
			
		||||
#define SEL_CONTROL	0			//Confirm socket status
 | 
			
		||||
#define SEL_SEND		1			// Confirm Tx free buffer size
 | 
			
		||||
#define SEL_RECV		2			// Confirm Rx data size
 | 
			
		||||
 | 
			
		||||
/* Command variables */
 | 
			
		||||
#define CSYS_INIT		0x01	   // To set up network information(mac address, gateway address,
 | 
			
		||||
                              // subnet mask, source ip)
 | 
			
		||||
#define CSOCK_INIT	0x02		// To initialize socket
 | 
			
		||||
#define CCONNECT		0x04		// To establish connection as tcp client mode
 | 
			
		||||
#define CLISTEN		0x08		// To wait for connection request as tcp server mode
 | 
			
		||||
#define CCLOSE			0x10		// To terminate connection
 | 
			
		||||
#define CSEND			0x20		// To send data
 | 
			
		||||
#define CRECV			0x40		// To receive data
 | 
			
		||||
#define CSW_RESET		0x80		// To do software reset
 | 
			
		||||
 | 
			
		||||
#define CSET_MEMORY_TEST   0x80     // To set the memory test bit
 | 
			
		||||
#define CRESET_MEMORY_TEST 0x00     // To clear the memory test bit
 | 
			
		||||
 | 
			
		||||
/* Status Variables */
 | 
			
		||||
#define SSYS_INIT_OK		0x01	// Completion of CSYS_INIT command
 | 
			
		||||
#define SSOCK_INIT_OK	0x02	// Completion of CSOCK_INIT command
 | 
			
		||||
#define SESTABLISHED		0x04	// Completion of connection setup
 | 
			
		||||
#define SCLOSED			0x08	// Completion of CCLOSED command
 | 
			
		||||
#define SSEND_OK		   0x20	// Completion of sending data
 | 
			
		||||
#define SRECV_OK		   0x40	// Completion of receiving data
 | 
			
		||||
 | 
			
		||||
/* Socket Status Vabiables */
 | 
			
		||||
#define SOCK_CLOSED		   0x00	   // Status of connection closed
 | 
			
		||||
#define SOCK_ARP		      0x01		// Status of ARP
 | 
			
		||||
#define SOCK_LISTEN		   0x02		// Status of waiting for TCP connection setup
 | 
			
		||||
#define SOCK_SYNSENT		   0x03		// Status of setting up TCP connection
 | 
			
		||||
#define SOCK_SYNSENT_ACK	0x04		// Status of setting up TCP connection
 | 
			
		||||
#define SOCK_SYNRECV		   0x05		// Status of setting up TCP connection
 | 
			
		||||
#define SOCK_ESTABLISHED	0x06		// Status of TCP connection established
 | 
			
		||||
#define SOCK_CLOSE_WAIT		0x07		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_LAST_ACK		0x08		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_FIN_WAIT1		0x09		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_FIN_WAIT2		0x0A		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_CLOSING		   0x0B		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_TIME_WAIT		0x0C		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_RESET		   0x0D		// Status of closing TCP connection
 | 
			
		||||
#define SOCK_INIT		      0x0E		// Status of socket initialization
 | 
			
		||||
#define SOCK_UDP		      0x0F		// Status of UDP
 | 
			
		||||
#define SOCK_RAW		      0x10		// Status of IP RAW
 | 
			
		||||
 | 
			
		||||
/* TERN Behavior Parameters */
 | 
			
		||||
#define TERN_TDMA_THRES    10000      // Use DMA for transmits if data > thres bytes.
 | 
			
		||||
#define TERN_RDMA_THRES    10000      // Use DMA for receives if data > thres bytes.
 | 
			
		||||
                                      // High thres value effectively disables DMA
 | 
			
		||||
                                      
 | 
			
		||||
void far interrupt in4_isr_i2chip(void);
 | 
			
		||||
 | 
			
		||||
//void ISR_ESTABLISHED(SOCKET s);
 | 
			
		||||
//void ISR_CLOSED(SOCKET s);
 | 
			
		||||
//void ISR_RX(SOCKET s);
 | 
			
		||||
 | 
			
		||||
void initW3100A(void);
 | 
			
		||||
void sysinit(u_char sbufsize, u_char rbufsize);
 | 
			
		||||
void setsubmask(u_char * addr);
 | 
			
		||||
void setgateway(u_char * addr);
 | 
			
		||||
void setMACAddr(u_char * addr);
 | 
			
		||||
void setIP(u_char * addr);
 | 
			
		||||
 | 
			
		||||
char socket(SOCKET s, u_char protocol, u_int port, u_char flag);
 | 
			
		||||
 | 
			
		||||
void setIPprotocol(SOCKET s, u_char ipprotocol);
 | 
			
		||||
 | 
			
		||||
void setINTMask(u_char mask);
 | 
			
		||||
void settimeout(u_char * val);
 | 
			
		||||
void setTOS(SOCKET s, u_char tos);
 | 
			
		||||
 | 
			
		||||
void GetDestAddr(SOCKET s, u_char* addr);
 | 
			
		||||
 | 
			
		||||
//void setbroadcast(SOCKET s);
 | 
			
		||||
 | 
			
		||||
char connect(SOCKET s, u_char far * addr, u_int port);
 | 
			
		||||
char NBconnect(SOCKET s, u_char far * addr, u_int port);
 | 
			
		||||
 | 
			
		||||
//char listen(SOCKET s, u_char far * addr, u_int far * port);
 | 
			
		||||
char NBlisten(SOCKET s);
 | 
			
		||||
 | 
			
		||||
void initseqnum(SOCKET s);
 | 
			
		||||
 | 
			
		||||
int send(SOCKET s, u_char far * buf, u_int len);
 | 
			
		||||
int send_in(SOCKET s, u_char far * buf, u_int len);
 | 
			
		||||
int recv(SOCKET s, u_char far * buf, u_int len);
 | 
			
		||||
 | 
			
		||||
u_int sendto(SOCKET , u_char far * buf, u_int, u_char * addr, u_int);
 | 
			
		||||
u_int sendto_in(SOCKET , u_char far *, u_int);
 | 
			
		||||
u_int recvfrom(SOCKET , u_char far * buf, u_int, u_char * addr, u_int *);
 | 
			
		||||
 | 
			
		||||
u_int read_data(SOCKET s, u_int src_offset, u_char far * dst, u_int len);
 | 
			
		||||
u_int write_data(SOCKET s, u_char far * src, u_int dst_offset, u_int len);
 | 
			
		||||
 | 
			
		||||
void close(SOCKET s);
 | 
			
		||||
char reset_sock(SOCKET s);
 | 
			
		||||
 | 
			
		||||
u_int select(SOCKET s, u_char func);
 | 
			
		||||
void recv_clear(SOCKET s);
 | 
			
		||||
u_char tx_empty(SOCKET s);
 | 
			
		||||
 | 
			
		||||
#endif	// __SOCKET_H__
 | 
			
		||||
							
								
								
									
										64
									
								
								Demo/WizNET_DEMO_TERN_186/include/TYPES.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								Demo/WizNET_DEMO_TERN_186/include/TYPES.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,64 @@
 | 
			
		||||
/*
 | 
			
		||||
********************************************************************************
 | 
			
		||||
* Wiznet.
 | 
			
		||||
* 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
 | 
			
		||||
* Seoul, Korea
 | 
			
		||||
*
 | 
			
		||||
* (c) Copyright 2002, Wiznet, Seoul, Korea
 | 
			
		||||
*
 | 
			
		||||
* Filename : types.h
 | 
			
		||||
* Programmer(s): 
 | 
			
		||||
* Created : 2002/01/
 | 
			
		||||
* Modified :
 | 
			
		||||
* Description : Define of data type.
 | 
			
		||||
********************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _TYPES_H_
 | 
			
		||||
#define _TYPES_H_
 | 
			
		||||
 | 
			
		||||
#ifndef NULL
 | 
			
		||||
# define NULL		((void *) 0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef enum { false, true } bool;
 | 
			
		||||
 | 
			
		||||
#ifndef _SIZE_T
 | 
			
		||||
#define _SIZE_T
 | 
			
		||||
typedef unsigned int size_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef	unsigned char	BYTE;		// 8-bit value
 | 
			
		||||
typedef	unsigned char	UCHAR;		// 8-bit value
 | 
			
		||||
typedef	         int	INT;		// 16-bit value
 | 
			
		||||
typedef	unsigned int	UINT;		// 16-bit value
 | 
			
		||||
typedef	unsigned short	USHORT;		// 16-bit value
 | 
			
		||||
typedef	unsigned short	WORD;		// 16-bit value
 | 
			
		||||
typedef	unsigned long	ULONG;		// 32-bit value
 | 
			
		||||
typedef	unsigned long	DWORD;		// 32-bit value
 | 
			
		||||
 | 
			
		||||
// bsd
 | 
			
		||||
typedef unsigned char	u_char;		// 8-bit value
 | 
			
		||||
typedef unsigned short	u_short;	// 16-bit value
 | 
			
		||||
typedef unsigned int		u_int;		// 16-bit value
 | 
			
		||||
typedef unsigned long	u_long;		// 32-bit value
 | 
			
		||||
 | 
			
		||||
typedef UCHAR	SOCKET;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Type for treating 4 byte variables with byte by byte */
 | 
			
		||||
typedef union un_l2cval
 | 
			
		||||
  {
 | 
			
		||||
  u_long	lVal;
 | 
			
		||||
  u_char	cVal[4];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
/* Type for treating 2 byte variables with byte by byte */
 | 
			
		||||
typedef union un_i2cval
 | 
			
		||||
  {
 | 
			
		||||
  u_int	iVal;
 | 
			
		||||
  u_char	cVal[2];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
#endif		// _TYPES_H_
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										264
									
								
								Demo/WizNET_DEMO_TERN_186/include/ae.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								Demo/WizNET_DEMO_TERN_186/include/ae.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,264 @@
 | 
			
		||||
#ifndef _AE_H_
 | 
			
		||||
#define _AE_H_
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
	ae.h	 	headers for AM188ES   6-20-99   7-16-98             
 | 
			
		||||
*********************************************************************/
 | 
			
		||||
/*  Data structure for Serial operation */
 | 
			
		||||
 | 
			
		||||
typedef struct  {
 | 
			
		||||
	unsigned char ready;          /* TRUE when ready */
 | 
			
		||||
	unsigned char baud;
 | 
			
		||||
	unsigned int mode;              
 | 
			
		||||
	unsigned char iflag;     /* interrupt status     */
 | 
			
		||||
	unsigned char* in_buf;        /* Input buffer */
 | 
			
		||||
	unsigned int in_tail;        /* Input buffer TAIL ptr */
 | 
			
		||||
	unsigned int in_head;        /* Input buffer HEAD ptr */
 | 
			
		||||
	unsigned int in_size;        /* Input buffer size */
 | 
			
		||||
	unsigned int in_crcnt;       /* Input <CR> count */
 | 
			
		||||
	unsigned char in_mt;          /* Input buffer FLAG */
 | 
			
		||||
	unsigned char in_full;        /* input buffer full */
 | 
			
		||||
	unsigned char* out_buf;       /* Output buffer */
 | 
			
		||||
	unsigned int out_tail;       /* Output buffer TAIL ptr */
 | 
			
		||||
	unsigned int out_head;       /* Output buffer HEAD ptr */
 | 
			
		||||
	unsigned int out_size;       /* Output buffer size */
 | 
			
		||||
	unsigned char out_full;       /* Output buffer FLAG */
 | 
			
		||||
	unsigned char out_mt;         /* Output buffer MT */
 | 
			
		||||
	unsigned char tmso;	// transmit macro service operation
 | 
			
		||||
	unsigned char rts;
 | 
			
		||||
	unsigned char dtr;
 | 
			
		||||
	unsigned char en485;
 | 
			
		||||
	unsigned char err;
 | 
			
		||||
	unsigned char node;
 | 
			
		||||
	unsigned char cr; /* scc CR register    */
 | 
			
		||||
	unsigned char slave;
 | 
			
		||||
	unsigned int in_segm;       /* input buffer segment */
 | 
			
		||||
	unsigned int in_offs;       /* input buffer offset */
 | 
			
		||||
	unsigned int out_segm;       /* output buffer segment */
 | 
			
		||||
	unsigned int out_offs;       /* output buffer offset */
 | 
			
		||||
	unsigned char byte_delay;	/* V25 macro service byte delay */
 | 
			
		||||
} COM;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct{
 | 
			
		||||
	unsigned char sec1;
 | 
			
		||||
	unsigned char sec10;
 | 
			
		||||
	unsigned char min1;
 | 
			
		||||
	unsigned char min10;
 | 
			
		||||
	unsigned char hour1;
 | 
			
		||||
	unsigned char hour10;
 | 
			
		||||
	unsigned char day1;
 | 
			
		||||
	unsigned char day10;
 | 
			
		||||
	unsigned char mon1;
 | 
			
		||||
	unsigned char mon10;
 | 
			
		||||
	unsigned char year1;
 | 
			
		||||
	unsigned char year10; 
 | 
			
		||||
	unsigned char wk;
 | 
			
		||||
} TIM;
 | 
			
		||||
 | 
			
		||||
void ae_init(void);
 | 
			
		||||
void ae_reset(void);
 | 
			
		||||
void led(int i);      //P12 used for led
 | 
			
		||||
void delay_ms(int m);
 | 
			
		||||
void delay0(unsigned int t);
 | 
			
		||||
void	HLPRsetvect(
 | 
			
		||||
				unsigned int	wVec,		/* Interrupt vector number */
 | 
			
		||||
				void	far		*ih		/* Interrupt handler to install */
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
void clka_en(int i);
 | 
			
		||||
void clkb_en(int i);
 | 
			
		||||
void pwr_save_en(int i);
 | 
			
		||||
void hitwd(void);
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//	reset ee to remain enabled for reads
 | 
			
		||||
//	where s = segment register value pointing to ee starting addr.
 | 
			
		||||
//		for example = 0x8000
 | 
			
		||||
//
 | 
			
		||||
void amd_ee_read_reset(unsigned int s);
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//	sec=0x00-0x07 for AM29F010, 16K/sector
 | 
			
		||||
//		sec=0	0x00000-0x03fff
 | 
			
		||||
//		sec=1	0x04000-0x07fff
 | 
			
		||||
//		sec=2	0x08000-0x0bfff
 | 
			
		||||
//		sec=3	0x0c000-0x0ffff
 | 
			
		||||
//		sec=4	0x10000-0x13fff
 | 
			
		||||
//		sec=5	0x14000-0x17fff
 | 
			
		||||
//		sec=6	0x18000-0x1bfff
 | 
			
		||||
//		sec=7	0x1c000-0x1ffff
 | 
			
		||||
//
 | 
			
		||||
//	sec=0x10-0x17 for AM29F040
 | 
			
		||||
//		sec=10	0x00000-0x0ffff
 | 
			
		||||
//		sec=11	0x10000-0x1ffff
 | 
			
		||||
//		sec=12	0x20000-0x2ffff
 | 
			
		||||
//		sec=13	0x30000-0x3ffff
 | 
			
		||||
//		sec=14	0x40000-0x4ffff
 | 
			
		||||
//		sec=15	0x50000-0x5ffff
 | 
			
		||||
//		sec=16	0x60000-0x6ffff
 | 
			
		||||
//		sec=17	0x70000-0x7ffff
 | 
			
		||||
//	segm=segment register value pointing to ee address 0
 | 
			
		||||
// returns:		if pass, return(0);
 | 
			
		||||
// 				if fail, return(1);
 | 
			
		||||
//
 | 
			
		||||
int amd_ee_sec_erase(unsigned int segm, unsigned char sec );
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//	write one byte dat to AM29F040, at address of s:o
 | 
			
		||||
//	Approximately 70 us for 0 wait, 80us for 1 wait.
 | 
			
		||||
//		where s=segment register, it is fixed to 0x8000
 | 
			
		||||
//				o=offset register
 | 
			
		||||
// returns:		if pass, return(0);
 | 
			
		||||
// 				if fail, return(1);
 | 
			
		||||
//
 | 
			
		||||
// Be aware of that a data bit "0" can not be programmed back to a "1" !!!
 | 
			
		||||
// Attempting to do so will hang up the system !!!
 | 
			
		||||
// you can program the "1"s to "0"s.
 | 
			
		||||
// Only erase operation can convert "0"s to "1"s
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
int amd_ee_byte_pro_512(unsigned int s, unsigned int o, unsigned char dat);
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//	write one byte dat to AM29F010, at address of s:o, 80us per byte approx.
 | 
			
		||||
//		where s=segment register, you may use s=0x8000-0xe000
 | 
			
		||||
//				o=offset register
 | 
			
		||||
// returns:		if pass, return(0);
 | 
			
		||||
// 				if fail, return(1);
 | 
			
		||||
//
 | 
			
		||||
// Be aware of that a data bit "0" can not be programmed back to a "1" !!!
 | 
			
		||||
// Attempting to do so will hang up the system !!!
 | 
			
		||||
// you can program the "1"s to "0"s.
 | 
			
		||||
// Only erase operation can convert "0"s to "1"s
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
int amd_ee_byte_pro_128(unsigned int s, unsigned int o, unsigned char dat);
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// unsigned char rtc_rds(char* time_string); 
 | 
			
		||||
// put a time string into time_string, based on the reading of RTC.
 | 
			
		||||
//	At least 15 bytes of buffer must be available for the time_string
 | 
			
		||||
//	returns 0, if RTC OK, or returns 1, if problem
 | 
			
		||||
//
 | 
			
		||||
unsigned char rtc_rds(char* time_string); 
 | 
			
		||||
int rtc_rd(TIM *r);
 | 
			
		||||
void rtc_init(unsigned char*);    
 | 
			
		||||
unsigned char r_rd(void);
 | 
			
		||||
int r_out(unsigned char v);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void t2_init(unsigned int tm,unsigned int ta,void interrupt far(*t2_isr)());
 | 
			
		||||
void t1_init(unsigned int tm,unsigned int ta,unsigned int tb,void interrupt far(*t1_isr)());
 | 
			
		||||
void t0_init(unsigned int tm,unsigned int ta,unsigned int tb,void interrupt far(*t0_isr)());
 | 
			
		||||
unsigned int t2_rd(void);
 | 
			
		||||
unsigned int t1_rd(void);
 | 
			
		||||
unsigned int t0_rd(void);
 | 
			
		||||
 | 
			
		||||
//	Analog to Digital conversion using TLC2543 on the A-Engine-88/86
 | 
			
		||||
//	Input:
 | 
			
		||||
//		unsigned char c = input channel 
 | 
			
		||||
//		c = 0,	input ch = AD0
 | 
			
		||||
//		c = 1,	input ch = AD1
 | 
			
		||||
//		c = 2,	input ch = AD2
 | 
			
		||||
//		c = 3,	input ch = AD3
 | 
			
		||||
//		c = 4,	input ch = AD4
 | 
			
		||||
//		c = 5,	input ch = AD5
 | 
			
		||||
//		c = 6,	input ch = AD6
 | 
			
		||||
//		c = 7,	input ch = AD7
 | 
			
		||||
//		c = 8,	input ch = AD8
 | 
			
		||||
//		c = 9,	input ch = AD9
 | 
			
		||||
//		c = a,	input ch = AD10
 | 
			
		||||
//	In order to operate ADC, P11 must be input.
 | 
			
		||||
//	P11 is shared by RTC, EE. It must be high while power on/reset
 | 
			
		||||
//	For AE88, using PPI for ADC, I20,I21,I22 must be output
 | 
			
		||||
//	For AE86, using PAL for ADC, T0=CLK, T1=DIN, T2=ADCS
 | 
			
		||||
//		Enter the ae_ad12(unsigned char c);  EE is stopped first.
 | 
			
		||||
//		Enter the ae86_ad12(unsigned char c);  EE is stopped first.
 | 
			
		||||
//
 | 
			
		||||
//	Output: 12 bit AD data of the previous channel !
 | 
			
		||||
//		Unipolar:
 | 
			
		||||
//		(Vref+ - Vref-)=0x7ff
 | 
			
		||||
//		Vref- = 0x000
 | 
			
		||||
//		Vref+ = 0xfff
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
int ae_ad12(unsigned char c);
 | 
			
		||||
 | 
			
		||||
//	outportb(0x120,1);  // T0=0, CLK
 | 
			
		||||
//	outportb(0x128,1);  // T1=0, DIN
 | 
			
		||||
//	outportb(0x130,1);  // T2=0, ADCS
 | 
			
		||||
int ae86_ad12(unsigned char c);
 | 
			
		||||
 | 
			
		||||
void nmi_init(void interrupt far (* nmi_isr)());
 | 
			
		||||
void int0_init(unsigned char i, void interrupt far (*int0_isr)());
 | 
			
		||||
void int1_init(unsigned char i, void interrupt far (*int1_isr)());
 | 
			
		||||
void int2_init(unsigned char i, void interrupt far (*int2_isr)());
 | 
			
		||||
void int3_init(unsigned char i, void interrupt far (*int3_isr)());
 | 
			
		||||
void int4_init(unsigned char i, void interrupt far (*int4_isr)());
 | 
			
		||||
void int5_init(unsigned char i, void interrupt far (*int5_isr)());
 | 
			
		||||
void int6_init(unsigned char i, void interrupt far (*int6_isr)());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// void pio_init(char bit, char mode)
 | 
			
		||||
//	where bit=0-31
 | 
			
		||||
//			mode=0, Normal operation
 | 
			
		||||
//			mode=1, Input with pullup/down
 | 
			
		||||
//			mode=2, Output
 | 
			
		||||
//			mode=3, input without pull
 | 
			
		||||
//
 | 
			
		||||
void pio_init(char bit, char mode);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//	void pio_wr(char bit, char dat)
 | 
			
		||||
//	where bit=0-31
 | 
			
		||||
//		dat=0/1
 | 
			
		||||
//
 | 
			
		||||
void pio_wr(char bit, char dat);
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// unsigned int pio_rd(char port)
 | 
			
		||||
//	return P15-P0, if port=0
 | 
			
		||||
//	return P31-P16, if port=1
 | 
			
		||||
//
 | 
			
		||||
unsigned int pio_rd(char port);
 | 
			
		||||
 | 
			
		||||
// setup I/O wait states for I/O instructions
 | 
			
		||||
//	where wait = 0-7
 | 
			
		||||
//	wait=0,			wait states = 0, I/O enable for 100 ns
 | 
			
		||||
//	wait=1,			wait states = 1, I/O enable for 100+25 ns
 | 
			
		||||
//	wait=2,			wait states = 2, I/O enable for 100+50 ns
 | 
			
		||||
//	wait=3,			wait states = 3, I/O enable for 100+75 ns
 | 
			
		||||
//	wait=4,			wait states = 5, I/O enable for 100+125 ns
 | 
			
		||||
//	wait=5,			wait states = 7, I/O enable for 100+175 ns
 | 
			
		||||
//	wait=6,			wait states = 9, I/O enable for 100+225 ns
 | 
			
		||||
//	wait=7,			wait states = 15, I/O enable for 100+375 ns
 | 
			
		||||
void io_wait(char wait);
 | 
			
		||||
 | 
			
		||||
unsigned int crc16(unsigned char *wptr, unsigned int count);
 | 
			
		||||
 | 
			
		||||
/******************************************************
 | 
			
		||||
	void ae_da(int dat1, int dat2)
 | 
			
		||||
	output dat to U11 DAC of AE88
 | 
			
		||||
	Requires P12=CLK, P26=DI, P29=LD/CS as output pins !
 | 
			
		||||
	where dat1 for channel A, dat2 for channel B;	dat1/2 = 0-4095
 | 
			
		||||
*******************************************************/
 | 
			
		||||
void ae_da(int dat1, int dat2);
 | 
			
		||||
 | 
			
		||||
/******************************************************
 | 
			
		||||
	void ae86_da(int dat1, int dat2)
 | 
			
		||||
	output dat to U15 DAC of AE86
 | 
			
		||||
	Requires T0=CLK=0x120, T1=DI=0x128, T3=LD/CS=0x138
 | 
			
		||||
	where dat1 for channel A, dat2 for channel B;	dat1/2 = 0-4095
 | 
			
		||||
	Output 0-2.5V at VA=J4.16, VB=J4.18
 | 
			
		||||
*******************************************************/
 | 
			
		||||
void ae86_da(int dat1, int dat2);
 | 
			
		||||
void interrupt reset_io_trap();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										309
									
								
								Demo/WizNET_DEMO_TERN_186/include/i2chip_hw.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										309
									
								
								Demo/WizNET_DEMO_TERN_186/include/i2chip_hw.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,309 @@
 | 
			
		||||
/*
 | 
			
		||||
********************************************************************************
 | 
			
		||||
* TERN, Inc.
 | 
			
		||||
* (c) Copyright 2005, http://www.tern.com
 | 
			
		||||
*
 | 
			
		||||
* - Created to support i2chip module on a variety of TERN hardware platforms.
 | 
			
		||||
********************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _I2CHIP_HW_H_
 | 
			
		||||
#define _I2CHIP_HW_H_
 | 
			
		||||
 | 
			
		||||
#include "types.h"
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_SC    // SensorCore controller, has mapping identical to the RL
 | 
			
		||||
#define TERN_RL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_RL    // R-Engine-L controller, with mapping at MCS0.
 | 
			
		||||
#define I2CHIP_MCS_DIRECT
 | 
			
		||||
#define I2CHIP_INT4
 | 
			
		||||
#define TERN_RE
 | 
			
		||||
#endif                // TERN_RL
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_5E
 | 
			
		||||
#define TERN_586
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_RD
 | 
			
		||||
#define TERN_RE
 | 
			
		||||
#endif                // TERN_RD
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_RE
 | 
			
		||||
#define TERN_186
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_P51
 | 
			
		||||
void p51_window(unsigned int page);
 | 
			
		||||
#define I2CHIP_WINDOW
 | 
			
		||||
#define I2CHIP_P51
 | 
			
		||||
#ifdef  TERN_186
 | 
			
		||||
#define I2CHIP_INT4
 | 
			
		||||
#define TERN_16_BIT
 | 
			
		||||
#endif                // TERN_186
 | 
			
		||||
#ifdef  TERN_586
 | 
			
		||||
#define I2CHIP_INT0
 | 
			
		||||
#define I2CHIP_WINDOW_IO
 | 
			
		||||
#endif                // TERN_586
 | 
			
		||||
#endif                // TERN_P51
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_CEYE
 | 
			
		||||
#define TERN_EE       // C-Eye configured with onboard i2chip, same as EE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_EE
 | 
			
		||||
#define TERN_186
 | 
			
		||||
#define I2CHIP_MCS_DIRECT
 | 
			
		||||
#define I2CHIP_INT4
 | 
			
		||||
#define TERN_16_BIT
 | 
			
		||||
#endif                    // TERN_EE
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_MMC
 | 
			
		||||
#define I2CHIP_WINDOW
 | 
			
		||||
#define I2CHIP_MMC
 | 
			
		||||
#ifdef TERN_RD
 | 
			
		||||
#define I2CHIP_INT3
 | 
			
		||||
#else
 | 
			
		||||
#ifdef TERN_186
 | 
			
		||||
#define I2CHIP_INT4
 | 
			
		||||
#endif                   // TERN_186
 | 
			
		||||
#endif                   // TERN_RD
 | 
			
		||||
#ifdef TERN_586
 | 
			
		||||
#define I2CHIP_INT0
 | 
			
		||||
#define I2CHIP_WINDOW_IO
 | 
			
		||||
#endif                   // TERN_586
 | 
			
		||||
#endif                   // TERN_MMC
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_586
 | 
			
		||||
#include "586.h"
 | 
			
		||||
void interrupt far int0_isr(void);
 | 
			
		||||
void interrupt far spu_m_isr(void);
 | 
			
		||||
void interrupt far spu_1_isr(void);
 | 
			
		||||
void interrupt far spu_2_isr(void);
 | 
			
		||||
#define MMCR 0xdf00
 | 
			
		||||
#endif                   // TERN_586
 | 
			
		||||
 | 
			
		||||
#ifdef TERN_186
 | 
			
		||||
#ifndef TERN_RE
 | 
			
		||||
#include "ae.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "re.h"
 | 
			
		||||
#define I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef I2CHIP_MCS_DIRECT
 | 
			
		||||
#ifndef I2CHIP_WINDOW
 | 
			
		||||
#ifndef I2CHIP_WINDOW_IO
 | 
			
		||||
#error You must define the TERN address mapping used to drive the I2CHIP module!
 | 
			
		||||
#endif  // I2CHIP_WINDOW_IO
 | 
			
		||||
#endif  // I2CHIP_MMC_WINDOW
 | 
			
		||||
#endif  // I2CHIP_MCS_DIRECT
 | 
			
		||||
 | 
			
		||||
#ifndef I2CHIP_INT0
 | 
			
		||||
#ifndef I2CHIP_INT3
 | 
			
		||||
#ifndef I2CHIP_INT4
 | 
			
		||||
#ifndef I2CHIP_POLL
 | 
			
		||||
#error You must specify an interrupt/polling mechanism for the I2CHIP module!
 | 
			
		||||
#endif  // I2CHIP_POLL
 | 
			
		||||
#endif  // I2CHIP_INT3
 | 
			
		||||
#endif  // I2CHIP_INT4
 | 
			
		||||
#endif  // I2CHIP_INT0
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_POLL
 | 
			
		||||
#define  I2CHIP_POLL_ISR(a)   { delay_ms(20); disable(); a(); enable(); }
 | 
			
		||||
#define  INT_INIT(isr)
 | 
			
		||||
#define  INT_EOI
 | 
			
		||||
#endif   // I2CHIP_POLL
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_INT4
 | 
			
		||||
#define  INT_INIT(isr) int4_init(1, isr)
 | 
			
		||||
#define  INT_EOI       outport(0xff22,0x0010)
 | 
			
		||||
#define  I2CHIP_POLL_ISR(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_INT3
 | 
			
		||||
#define  INT_INIT(isr) int3_init(1, isr)
 | 
			
		||||
#define  INT_EOI       outport(0xff22,0x000f)
 | 
			
		||||
#define  I2CHIP_POLL_ISR(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_INT0
 | 
			
		||||
#define  INT_INIT(isr) int0_init(1, isr)
 | 
			
		||||
#define  INT_EOI        outportb(_MPICOCW2_IO,0x61); // 586 only EOI
 | 
			
		||||
#define  I2CHIP_POLL_ISR(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
#define  SA_OFFSET(a)   ((a) << 1)
 | 
			
		||||
#else
 | 
			
		||||
#define  SA_OFFSET(a)   a
 | 
			
		||||
#endif   // I2CHIP_SHIFTED_ADDRESS ... *if*
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// -------------------- WINDOW-RELATED DEFINES ----------------------
 | 
			
		||||
#ifdef   I2CHIP_WINDOW
 | 
			
		||||
void        i2chip_set_page(u_int addr);
 | 
			
		||||
#define  I2CHIP_SET_PAGE(p) i2chip_set_page(p)
 | 
			
		||||
 | 
			
		||||
u_char far* i2chip_mkptr(u_int addr);
 | 
			
		||||
void 			i2chip_push_window(u_int addr);
 | 
			
		||||
void 			i2chip_pop_window(void);
 | 
			
		||||
u_int       i2chip_get_window(void);
 | 
			
		||||
void i2chip_set_window(u_int window_addr);
 | 
			
		||||
 | 
			
		||||
// Set to command window.
 | 
			
		||||
// Note that if you're using other MMC chips within your application, you will
 | 
			
		||||
// need to call this function regularly, if you've changed the MMC chip/page
 | 
			
		||||
// selection via mmc_window().  The driver code otherwise assume that you never
 | 
			
		||||
// change away from chip 7, page 0.
 | 
			
		||||
#define  WINDOW_RESTORE_BASE    i2chip_mkptr(0)
 | 
			
		||||
 | 
			
		||||
//  ----------------------- I2CHIP_WINDOW_IO ----------------------------
 | 
			
		||||
#ifdef   I2CHIP_WINDOW_IO
 | 
			
		||||
 | 
			
		||||
#ifdef   TERN_5E
 | 
			
		||||
#define	I2CHIP_BASE_SEG	   0x2000			// Address offset for W3100A
 | 
			
		||||
#else
 | 
			
		||||
#define	I2CHIP_BASE_SEG	   0x1800			// Address offset for W3100A
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define  COMMAND_BASE_SEG     0x0000
 | 
			
		||||
#define	SEND_DATA_BUF		   0x4000			// Internal Tx buffer address of W3100A
 | 
			
		||||
#define	RECV_DATA_BUF		   0x6000			// Internal Rx buffer address of W3100A
 | 
			
		||||
#define  WINDOW_BASE_SEGM     COMMAND_BASE_SEG
 | 
			
		||||
 | 
			
		||||
#define  MK_FP_WINDOW(a, b)   i2chip_mkptr(a+SA_OFFSET(b))
 | 
			
		||||
#define  MK_FP_SA             MK_FP_WINDOW
 | 
			
		||||
 | 
			
		||||
u_char   io_read_value(u_char far* addr);
 | 
			
		||||
void     io_write_value(u_char far* addr, u_char value);
 | 
			
		||||
#define  READ_VALUE(a)        io_read_value(a)
 | 
			
		||||
#define  WRITE_VALUE(a, v)    io_write_value(a, v)
 | 
			
		||||
 | 
			
		||||
#define  WINDOW_PTR_INC(a)    \
 | 
			
		||||
         if ((FP_OFF(a) & 0xff) == 0xff) \
 | 
			
		||||
            a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
 | 
			
		||||
         else \
 | 
			
		||||
         	a++;
 | 
			
		||||
 | 
			
		||||
#endif  // I2CHIP_WINDOW_IO
 | 
			
		||||
 | 
			
		||||
//  -------------------- !NOT! I2CHIP_WINDOW_IO ----------------------------
 | 
			
		||||
#ifndef  I2CHIP_WINDOW_IO
 | 
			
		||||
 | 
			
		||||
#define  READ_VALUE(a)        *(a)
 | 
			
		||||
#define  WRITE_VALUE(a, v)    *(a) = v
 | 
			
		||||
 | 
			
		||||
#define  WINDOW_BASE_SEGM  0x8000
 | 
			
		||||
#define  MK_FP_WINDOW(a, b)   i2chip_mkptr(a+SA_OFFSET(b))
 | 
			
		||||
#define  MK_FP_SA  MK_FP_WINDOW
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
#define  COMMAND_BASE_SEG  0x0000
 | 
			
		||||
#define  SEND_DATA_BUF     0x8000
 | 
			
		||||
#define  RECV_DATA_BUF     0xC000
 | 
			
		||||
#define  WINDOW_PTR_INC(a)    \
 | 
			
		||||
         if ((FP_OFF(a) & 0xff) == 0xfe) \
 | 
			
		||||
            a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
 | 
			
		||||
         else \
 | 
			
		||||
         	a+=2;
 | 
			
		||||
#else
 | 
			
		||||
#define  COMMAND_BASE_SEG  0x0000
 | 
			
		||||
#define  SEND_DATA_BUF     0x4000
 | 
			
		||||
#define  RECV_DATA_BUF     0x6000
 | 
			
		||||
#define  WINDOW_PTR_INC(a)    \
 | 
			
		||||
         if ((FP_OFF(a) & 0xff) == 0xff) \
 | 
			
		||||
            a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
 | 
			
		||||
         else \
 | 
			
		||||
         	a++;
 | 
			
		||||
#endif   // I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
#endif   // NOT I2CHIP_WINDOW_IO
 | 
			
		||||
 | 
			
		||||
#endif   // I2CHIP_WINDOW
 | 
			
		||||
 | 
			
		||||
//  --------------------  I2CHIP_DIRECT ----------------------------
 | 
			
		||||
#ifdef   I2CHIP_MCS_DIRECT
 | 
			
		||||
 | 
			
		||||
#define  READ_VALUE(a)        *(a)
 | 
			
		||||
#define  WRITE_VALUE(a, v)    *(a) = v
 | 
			
		||||
 | 
			
		||||
#define  I2CHIP_BASE_SEG  0x8000
 | 
			
		||||
#define  MK_FP_SA(a, b)   MK_FP(a, SA_OFFSET(b))
 | 
			
		||||
#define  WINDOW_PTR_INC(a)   a+=SA_OFFSET(1);
 | 
			
		||||
#define  WINDOW_RESTORE_BASE
 | 
			
		||||
#define  MK_FP_WINDOW           MK_FP_SA
 | 
			
		||||
#define  WINDOW_BASE_SEG        I2CHIP_BASE_SEG
 | 
			
		||||
#define  COMMAND_BASE_SEG       I2CHIP_BASE_SEG
 | 
			
		||||
 | 
			
		||||
#ifdef   I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
#define	SEND_DATA_BUF		0x8800			// Internal Tx buffer address of W3100A
 | 
			
		||||
#define	RECV_DATA_BUF		0x8C00			// Internal Rx buffer address of W3100A
 | 
			
		||||
#else
 | 
			
		||||
#define	SEND_DATA_BUF		0x8400			// Internal Tx buffer address of W3100A
 | 
			
		||||
#define	RECV_DATA_BUF		0x8600			// Internal Rx buffer address of W3100A
 | 
			
		||||
#endif   // I2CHIP_SHIFTED_ADDRESS
 | 
			
		||||
 | 
			
		||||
#endif   // I2CHIP_MCS_DIRECT
 | 
			
		||||
 | 
			
		||||
/* Internal register set of W3100A */
 | 
			
		||||
#define	COMMAND(i)		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, i)))
 | 
			
		||||
#define	INT_STATUS(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_C0_ISR + i)))
 | 
			
		||||
#define	INT_REG   		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_IR)))
 | 
			
		||||
#define	INTMASK     	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_IMR)))
 | 
			
		||||
#define	RESETSOCK      ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x0A)))
 | 
			
		||||
 | 
			
		||||
#define RX_PTR_BASE		I2CHIP_C0_RW_PR
 | 
			
		||||
#define RX_PTR_SIZE		(I2CHIP_C1_RW_PR - I2CHIP_C0_RW_PR)
 | 
			
		||||
 | 
			
		||||
#define	RX_WR_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i)))
 | 
			
		||||
#define	RX_RD_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i + 0x04)))
 | 
			
		||||
#define	RX_ACK_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i + 0x08)))
 | 
			
		||||
 | 
			
		||||
#define TX_PTR_BASE		I2CHIP_C0_TW_PR
 | 
			
		||||
#define TX_PTR_SIZE		(I2CHIP_C1_TW_PR - I2CHIP_C0_TW_PR)
 | 
			
		||||
 | 
			
		||||
#define	TX_WR_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i)))
 | 
			
		||||
#define	TX_RD_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i + 0x04)))
 | 
			
		||||
#define	TX_ACK_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i + 0x08)))
 | 
			
		||||
 | 
			
		||||
/* Shadow Register Pointer Define */
 | 
			
		||||
/* For windowing purposes, these are definitely outside the first 256-byte Window...
 | 
			
		||||
therefore, use the MK_FP_WINDOW macros instead. */
 | 
			
		||||
#define SHADOW_RXWR_PTR(i)		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E0 + 3*i)))
 | 
			
		||||
#define SHADOW_RXRD_PTR(i)		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E1 + 3*i)))
 | 
			
		||||
#define SHADOW_TXACK_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E2 + 3*i)))
 | 
			
		||||
#define SHADOW_TXWR_PTR(i)		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1F0 + 3*i)))
 | 
			
		||||
#define SHADOW_TXRD_PTR(i)		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1F1 + 3*i)))
 | 
			
		||||
 | 
			
		||||
#define SOCK_BASE		I2CHIP_C0_SSR
 | 
			
		||||
#define SOCK_SIZE		(I2CHIP_C1_SSR - I2CHIP_C0_SSR)
 | 
			
		||||
 | 
			
		||||
#define SOCK_STATUS(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i)))
 | 
			
		||||
#define OPT_PROTOCOL(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x01)))
 | 
			
		||||
#define DST_HA_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x02)))
 | 
			
		||||
#define DST_IP_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x08)))
 | 
			
		||||
#define DST_PORT_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x0C)))
 | 
			
		||||
#define SRC_PORT_PTR(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x0E)))
 | 
			
		||||
#define IP_PROTOCOL(i)	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x10)))
 | 
			
		||||
#define TOS(i)				((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,SOCK_BASE + SOCK_SIZE * i + 0x11)))
 | 
			
		||||
#define MSS(i)				((u_int far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x12)))
 | 
			
		||||
#define P_WINDOW(i)		((u_int far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,SOCK_BASE + SOCK_SIZE * i + 0x14)))
 | 
			
		||||
#define WINDOW(i)			((u_int far*)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x16)))
 | 
			
		||||
 | 
			
		||||
#define GATEWAY_PTR		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_GAR)))
 | 
			
		||||
#define SUBNET_MASK_PTR	((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SMR)))
 | 
			
		||||
 | 
			
		||||
#define SRC_HA_PTR		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SHAR)))
 | 
			
		||||
#define SRC_IP_PTR		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SIPR)))
 | 
			
		||||
#define TIMEOUT_PTR		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_IRTR)))
 | 
			
		||||
 | 
			
		||||
#define RX_DMEM_SIZE		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_RMSR)))
 | 
			
		||||
#define TX_DMEM_SIZE		((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_TMSR)))
 | 
			
		||||
 | 
			
		||||
void i2chip_init(void);
 | 
			
		||||
 | 
			
		||||
#endif  // _irchip_hw_h
 | 
			
		||||
							
								
								
									
										12
									
								
								Demo/WizNET_DEMO_TERN_186/include/utils/system_common.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Demo/WizNET_DEMO_TERN_186/include/utils/system_common.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#ifndef _SYSTEM_COMMON_H_
 | 
			
		||||
#define _SYSTEM_COMMON_H_
 | 
			
		||||
 | 
			
		||||
typedef unsigned char UCHAR8;
 | 
			
		||||
typedef unsigned int  UINT16;
 | 
			
		||||
 | 
			
		||||
#define RETURN_OK                       0    // Non-zero return values are always
 | 
			
		||||
                                             // error values.
 | 
			
		||||
#define RETURN_ILLEGAL                  1    // Some sort of illegal argument.
 | 
			
		||||
#define RETURN_MEM                      2    // Out of memory space.
 | 
			
		||||
 | 
			
		||||
#endif // _SYSTEM_COMMON_H_
 | 
			
		||||
							
								
								
									
										196
									
								
								Demo/WizNET_DEMO_TERN_186/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								Demo/WizNET_DEMO_TERN_186/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,196 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is distributed in the hope that it will be useful,
 | 
			
		||||
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Creates all the demo application tasks then starts the scheduler.  In 
 | 
			
		||||
 * addition to the standard demo application tasks main() creates the 
 | 
			
		||||
 * HTTPServer task, and a "Check" task.  The Check task periodically inspects
 | 
			
		||||
 * all the other tasks in the system to see if any errors have been reported.
 | 
			
		||||
 * The error status is then displayed on the served WEB page.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Tern includes. */
 | 
			
		||||
#include <ae.h>
 | 
			
		||||
#include <embedded.h>
 | 
			
		||||
 | 
			
		||||
/* FreeRTOS.org includes. */
 | 
			
		||||
#include <FreeRTOS.h>
 | 
			
		||||
#include <task.h>
 | 
			
		||||
 | 
			
		||||
/* Demo application includes. */
 | 
			
		||||
#include "HTTPTask.h"
 | 
			
		||||
#include "integer.h"
 | 
			
		||||
#include "PollQ.h"
 | 
			
		||||
#include "semtest.h"
 | 
			
		||||
#include "dynamic.h"
 | 
			
		||||
#include "BlockQ.h"
 | 
			
		||||
#include "Death.h"
 | 
			
		||||
#include "serial.h"
 | 
			
		||||
#include "comtest.h"
 | 
			
		||||
 | 
			
		||||
/* How often should the "check" task execute? */
 | 
			
		||||
#define mainCHECK_DELAY		( 3000 / portTICK_RATE_MS )
 | 
			
		||||
 | 
			
		||||
/* Priorities allocated to the various tasks. */
 | 
			
		||||
#define mainQUEUE_POLL_PRIORITY		( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainCHECK_TASK_PRIORITY		( tskIDLE_PRIORITY + 4 )
 | 
			
		||||
#define mainSEM_TEST_PRIORITY		( tskIDLE_PRIORITY + 1 )
 | 
			
		||||
#define mainBLOCK_Q_PRIORITY		( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainHTTP_TASK_PRIORITY		( tskIDLE_PRIORITY + 3 )
 | 
			
		||||
#define mainSUICIDE_TASKS_PRIORITY  ( tskIDLE_PRIORITY + 1 )
 | 
			
		||||
#define mainCOM_TEST_PRIORITY		( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
 | 
			
		||||
/* Used to indicate the error status.  A value of 0 means that an error has not
 | 
			
		||||
been detected in any task.  A non zero value indicates which group of demo 
 | 
			
		||||
tasks has reported an error.  See prvCheckTask() for bit definitions. */
 | 
			
		||||
unsigned portSHORT usCheckStatus = 0;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Setup any hardware required by the demo - other than the RTOS tick which
 | 
			
		||||
 * is configured when the scheduler is started.
 | 
			
		||||
 */
 | 
			
		||||
static void prvSetupHardware( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Periodically inspect all the other tasks, updating usCheckStatus should an
 | 
			
		||||
 * error be discovered in any task.
 | 
			
		||||
 */
 | 
			
		||||
static void prvCheckTask( void *pvParameters );
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
	prvSetupHardware();
 | 
			
		||||
 | 
			
		||||
    /* Start the HTTP server task. */
 | 
			
		||||
	xTaskCreate( vHTTPTask, "WizNet", configMINIMAL_STACK_SIZE, NULL, mainHTTP_TASK_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
	/* Start the demo/test application tasks.  See the demo application 
 | 
			
		||||
	section of the FreeRTOS.org WEB site for more information. */
 | 
			
		||||
	vStartIntegerMathTasks( tskIDLE_PRIORITY );
 | 
			
		||||
	vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
 | 
			
		||||
	vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
 | 
			
		||||
  	vStartDynamicPriorityTasks();
 | 
			
		||||
	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
 | 
			
		||||
    vStartComTestTasks( mainCOM_TEST_PRIORITY, serCOM2, ser57600 );
 | 
			
		||||
 | 
			
		||||
	/* Start the task that checks the other demo tasks for errors. */
 | 
			
		||||
    xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
	/* The suicide tasks must be created last as they monitor the number of
 | 
			
		||||
	tasks in the system to ensure there are no more or fewer than expected
 | 
			
		||||
	compared to the number that were executing when the task started. */
 | 
			
		||||
   	vCreateSuicidalTasks( mainSUICIDE_TASKS_PRIORITY );
 | 
			
		||||
        
 | 
			
		||||
	/* Finally start the scheduler. */
 | 
			
		||||
    vTaskStartScheduler();
 | 
			
		||||
 | 
			
		||||
	/* Should not get here! */
 | 
			
		||||
	for( ;; );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvSetupHardware( void )
 | 
			
		||||
{
 | 
			
		||||
	ae_init();
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvCheckTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
	/* Check all the demo tasks to ensure that they are all still running, and
 | 
			
		||||
    that none of them have detected	an error. */
 | 
			
		||||
    for( ;; )
 | 
			
		||||
    {
 | 
			
		||||
		/* Block until it is time to check again. */
 | 
			
		||||
    	vTaskDelay( mainCHECK_DELAY );
 | 
			
		||||
        
 | 
			
		||||
		if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			usCheckStatus |= 0x01;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xArePollingQueuesStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			usCheckStatus |= 0x02;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreSemaphoreTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			usCheckStatus |= 0x04;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			usCheckStatus |= 0x08;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreBlockingQueuesStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			usCheckStatus |= 0x10;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        if( xIsCreateTaskStillRunning() != pdTRUE )
 | 
			
		||||
        {
 | 
			
		||||
        	usCheckStatus |= 0x20;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if( xAreComTestTasksStillRunning() != pdTRUE )
 | 
			
		||||
        {
 | 
			
		||||
        	usCheckStatus |= 0x40;
 | 
			
		||||
        }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* This is included to prevent link errors - allowing the 'full' version of
 | 
			
		||||
the comtest tasks to be used.  It can be ignored. */
 | 
			
		||||
void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend )
 | 
			
		||||
{
 | 
			
		||||
	( void ) ppcMessageToSend;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										442
									
								
								Demo/WizNET_DEMO_TERN_186/serial/serial.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										442
									
								
								Demo/WizNET_DEMO_TERN_186/serial/serial.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,442 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS is distributed in the hope that it will be useful,
 | 
			
		||||
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <embedded.h>
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "portasm.h"
 | 
			
		||||
#include "queue.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
#include "semphr.h"
 | 
			
		||||
 | 
			
		||||
#define serMAX_PORTS			( ( unsigned portSHORT ) 2 )
 | 
			
		||||
 | 
			
		||||
#define serPORT_0_INT_REG		( 0xff44 )
 | 
			
		||||
#define serPORT_0_BAUD_REG		( 0xff88 )
 | 
			
		||||
#define serPORT_0_RX_REG		( 0xff86 )
 | 
			
		||||
#define serPORT_0_TX_REG		( 0xff84 )
 | 
			
		||||
#define serPORT_0_STATUS_REG	( 0xff82 )
 | 
			
		||||
#define serPORT_0_CTRL_REG		( 0xff80 )
 | 
			
		||||
#define serPORT_0_IRQ			( 0x14 )
 | 
			
		||||
 | 
			
		||||
#define serPORT_1_INT_REG		( 0xff42 )
 | 
			
		||||
#define serPORT_1_BAUD_REG		( 0xff18 )
 | 
			
		||||
#define serPORT_1_RX_REG		( 0xff16 )
 | 
			
		||||
#define serPORT_1_TX_REG		( 0xff14 )
 | 
			
		||||
#define serPORT_1_STATUS_REG	( 0xff12 )
 | 
			
		||||
#define serPORT_1_CTRL_REG		( 0xff10 )
 | 
			
		||||
#define serPORT_1_IRQ			( 0x11 )
 | 
			
		||||
 | 
			
		||||
#define serTX_EMPTY				( ( unsigned portSHORT ) 0x40 )
 | 
			
		||||
#define serRX_READY				( ( unsigned portSHORT ) 0x80 )
 | 
			
		||||
 | 
			
		||||
#define serRESET_PIC( usEOI_TYPE )	portOUTPUT_WORD( ( unsigned portSHORT ) 0xff22, usEOI_TYPE )
 | 
			
		||||
#define serTX_HOLD_EMPTY_INT		( ( unsigned portSHORT ) 0x100 )
 | 
			
		||||
 | 
			
		||||
#define serENABLE_INTERRUPTS		( ( unsigned portSHORT ) 0x80 )
 | 
			
		||||
#define serMODE						( ( unsigned portSHORT ) 0x01 )
 | 
			
		||||
#define serENABLE_TX_MACHINES		( ( unsigned portSHORT ) 0x40 )
 | 
			
		||||
#define serENABLE_RX_MACHINES		( ( unsigned portSHORT ) 0x20 )
 | 
			
		||||
#define serINTERRUPT_MASK			( ( unsigned portSHORT ) 0x08 )
 | 
			
		||||
#define serCLEAR_ALL_STATUS_BITS	( ( unsigned portSHORT ) 0x00 )
 | 
			
		||||
#define serINTERRUPT_PRIORITY		( ( unsigned portSHORT ) 0x01 ) /*< Just below the scheduler priority. */
 | 
			
		||||
 | 
			
		||||
#define serDONT_BLOCK				( ( portTickType ) 0 )
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{ 
 | 
			
		||||
	serCOM1 = 0, 
 | 
			
		||||
	serCOM2, 
 | 
			
		||||
	serCOM3, 
 | 
			
		||||
	serCOM4, 
 | 
			
		||||
	serCOM5, 
 | 
			
		||||
	serCOM6, 
 | 
			
		||||
	serCOM7, 
 | 
			
		||||
	serCOM8 
 | 
			
		||||
} eCOMPort;
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{ 
 | 
			
		||||
	serNO_PARITY, 
 | 
			
		||||
	serODD_PARITY, 
 | 
			
		||||
	serEVEN_PARITY, 
 | 
			
		||||
	serMARK_PARITY, 
 | 
			
		||||
	serSPACE_PARITY 
 | 
			
		||||
} eParity;
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{ 
 | 
			
		||||
	serSTOP_1, 
 | 
			
		||||
	serSTOP_2 
 | 
			
		||||
} eStopBits;
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
	serBITS_5,
 | 
			
		||||
	serBITS_6,
 | 
			
		||||
	serBITS_7,
 | 
			
		||||
	serBITS_8
 | 
			
		||||
} eDataBits;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
	ser50 = 0,
 | 
			
		||||
	ser75,
 | 
			
		||||
	ser110,
 | 
			
		||||
	ser134,
 | 
			
		||||
	ser150,
 | 
			
		||||
	ser200,
 | 
			
		||||
	ser300,
 | 
			
		||||
	ser600,
 | 
			
		||||
	ser1200,
 | 
			
		||||
	ser1800,
 | 
			
		||||
	ser2400,
 | 
			
		||||
	ser4800,
 | 
			
		||||
	ser9600,
 | 
			
		||||
	ser19200,
 | 
			
		||||
	ser38400,
 | 
			
		||||
	ser57600,
 | 
			
		||||
	ser115200
 | 
			
		||||
} eBaud;
 | 
			
		||||
 | 
			
		||||
typedef struct xCOM_PORT
 | 
			
		||||
{
 | 
			
		||||
	/* Hardware parameters for this port. */
 | 
			
		||||
	portSHORT sTxInterruptOn;
 | 
			
		||||
	unsigned portSHORT usIntReg;
 | 
			
		||||
	unsigned portSHORT usBaudReg;
 | 
			
		||||
	unsigned portSHORT usRxReg;
 | 
			
		||||
	unsigned portSHORT usTxReg;
 | 
			
		||||
	unsigned portSHORT usStatusReg;
 | 
			
		||||
	unsigned portSHORT usCtrlReg;
 | 
			
		||||
 | 
			
		||||
	unsigned portSHORT usIRQVector;
 | 
			
		||||
 | 
			
		||||
	/* Queues used for communications with com test task. */
 | 
			
		||||
	xQueueHandle xRxedChars; 
 | 
			
		||||
	xQueueHandle xCharsForTx;
 | 
			
		||||
 | 
			
		||||
	/* This semaphore does nothing useful except test a feature of the
 | 
			
		||||
	scheduler. */
 | 
			
		||||
	xSemaphoreHandle xTestSem;
 | 
			
		||||
 | 
			
		||||
} xComPort;
 | 
			
		||||
 | 
			
		||||
static xComPort xPorts[ serMAX_PORTS ] = 
 | 
			
		||||
{
 | 
			
		||||
	{ pdFALSE, serPORT_0_INT_REG, serPORT_0_BAUD_REG, serPORT_0_RX_REG, serPORT_0_TX_REG, serPORT_0_STATUS_REG, serPORT_0_CTRL_REG, serPORT_0_IRQ, NULL, NULL, NULL },
 | 
			
		||||
	{ pdFALSE, serPORT_1_INT_REG, serPORT_1_BAUD_REG, serPORT_1_RX_REG, serPORT_1_TX_REG, serPORT_1_STATUS_REG, serPORT_1_CTRL_REG, serPORT_1_IRQ, NULL, NULL, NULL }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef xComPort * xComPortHandle;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Lookup the baud rate from the enum.
 | 
			
		||||
 */
 | 
			
		||||
static unsigned portLONG prvBaud( eBaud eWantedBaud ); 
 | 
			
		||||
 | 
			
		||||
/* These prototypes are repeated here so we don't have to include the serial header.  This allows
 | 
			
		||||
the xComPortHandle structure details to be private to this file. */
 | 
			
		||||
xComPortHandle xSerialPortInit( eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength );
 | 
			
		||||
portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, portCHAR *pcRxedChar, portTickType xBlockTime );
 | 
			
		||||
portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, portCHAR cOutChar, portTickType xBlockTime );
 | 
			
		||||
void vSerialClose( xComPortHandle xPort );
 | 
			
		||||
portSHORT sSerialWaitForSemaphore( xComPortHandle xPort );
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static portSHORT xComPortISR( xComPort * const pxPort );
 | 
			
		||||
 | 
			
		||||
#define vInterruptOn( pxPort, usInterrupt )										\
 | 
			
		||||
{																				\
 | 
			
		||||
unsigned portSHORT usIn;														\
 | 
			
		||||
																				\
 | 
			
		||||
	portENTER_CRITICAL();														\
 | 
			
		||||
	{																			\
 | 
			
		||||
		if( pxPort->sTxInterruptOn == pdFALSE )									\
 | 
			
		||||
		{																		\
 | 
			
		||||
			usIn = portINPUT_WORD( pxPort->usCtrlReg );							\
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usCtrlReg, usIn | usInterrupt );			\
 | 
			
		||||
																				\
 | 
			
		||||
			pxPort->sTxInterruptOn = pdTRUE;									\
 | 
			
		||||
		}																		\
 | 
			
		||||
	}																			\
 | 
			
		||||
	portEXIT_CRITICAL();														\
 | 
			
		||||
}																				
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#define vInterruptOff( pxPort, usInterrupt )									\
 | 
			
		||||
{																				\
 | 
			
		||||
	unsigned portSHORT usIn = portINPUT_WORD( pxPort->usCtrlReg );				\
 | 
			
		||||
	if( usIn & usInterrupt )													\
 | 
			
		||||
	{																			\
 | 
			
		||||
		portOUTPUT_WORD( pxPort->usCtrlReg, usIn & ~usInterrupt);				\
 | 
			
		||||
		pxPort->sTxInterruptOn = pdFALSE;										\
 | 
			
		||||
	}																			\
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Define an interrupt handler for each port */
 | 
			
		||||
#define COM_IRQ_WRAPPER(N)										\
 | 
			
		||||
	static void __interrupt COM_IRQ##N##_WRAPPER( void )		\
 | 
			
		||||
	{															\
 | 
			
		||||
        if( xComPortISR( &( xPorts[##N##] ) ) )                 \
 | 
			
		||||
        {                                                       \
 | 
			
		||||
			portEND_SWITCHING_ISR();                            \
 | 
			
		||||
		}                                                       \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
COM_IRQ_WRAPPER( 0 )
 | 
			
		||||
COM_IRQ_WRAPPER( 1 )
 | 
			
		||||
 | 
			
		||||
static pxISR xISRs[ serMAX_PORTS ] = 
 | 
			
		||||
{
 | 
			
		||||
	COM_IRQ0_WRAPPER, 
 | 
			
		||||
	COM_IRQ1_WRAPPER
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static unsigned portLONG prvBaud( eBaud eWantedBaud )
 | 
			
		||||
{
 | 
			
		||||
	switch( eWantedBaud )
 | 
			
		||||
    {
 | 
			
		||||
		case ser50			:	return 50UL;
 | 
			
		||||
		case ser75			:	return 75UL;
 | 
			
		||||
		case ser110			:	return 110UL;
 | 
			
		||||
		case ser134			:	return 134UL;
 | 
			
		||||
		case ser150			:	return 150UL;
 | 
			
		||||
		case ser200			:	return 200UL;
 | 
			
		||||
		case ser300			:	return 300UL;
 | 
			
		||||
		case ser600			:	return 600UL;
 | 
			
		||||
		case ser1200		:	return 1200UL;
 | 
			
		||||
		case ser1800		:	return 1800UL;
 | 
			
		||||
		case ser2400		:	return 2400UL;
 | 
			
		||||
		case ser4800		:	return 4800UL;
 | 
			
		||||
		case ser19200		:	return 19200UL;
 | 
			
		||||
		case ser38400		:	return 38400UL;
 | 
			
		||||
		case ser57600		:	return 57600UL;
 | 
			
		||||
		case ser115200		:	return 115200UL;
 | 
			
		||||
		default				:	return 9600UL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
xComPortHandle xSerialPortInit( eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength )
 | 
			
		||||
{
 | 
			
		||||
unsigned portSHORT usPort;
 | 
			
		||||
xComPortHandle pxPort = NULL;
 | 
			
		||||
unsigned portLONG ulBaudDiv;
 | 
			
		||||
 | 
			
		||||
	/* BAUDDIV = ( Microprocessor Clock / Baud Rate ) / 16 */
 | 
			
		||||
    ulBaudDiv = ( configCPU_CLOCK_HZ / prvBaud( eWantedBaud ) ) / 16UL;
 | 
			
		||||
 | 
			
		||||
	/* Only n, 8, 1 is supported so these parameters are not required for this
 | 
			
		||||
	port. */
 | 
			
		||||
	( void ) eWantedParity;
 | 
			
		||||
	( void ) eWantedDataBits;
 | 
			
		||||
    ( void ) eWantedStopBits;
 | 
			
		||||
 | 
			
		||||
	/* Currently only n,8,1 is supported. */
 | 
			
		||||
 | 
			
		||||
	usPort = ( unsigned portSHORT ) ePort;
 | 
			
		||||
	
 | 
			
		||||
	if( usPort < serMAX_PORTS )
 | 
			
		||||
	{
 | 
			
		||||
		pxPort = &( xPorts[ usPort ] );
 | 
			
		||||
 | 
			
		||||
		portENTER_CRITICAL();
 | 
			
		||||
		{
 | 
			
		||||
			unsigned portSHORT usInWord;
 | 
			
		||||
 | 
			
		||||
			/* Create the queues used by the com test task. */
 | 
			
		||||
			pxPort->xRxedChars = xQueueCreate( uxBufferLength, ( unsigned portBASE_TYPE ) sizeof( portCHAR ) );
 | 
			
		||||
			pxPort->xCharsForTx = xQueueCreate( uxBufferLength, ( unsigned portBASE_TYPE ) sizeof( portCHAR ) );
 | 
			
		||||
 | 
			
		||||
			/* Create the test semaphore.  This does nothing useful except test a feature of the scheduler. */
 | 
			
		||||
			vSemaphoreCreateBinary( pxPort->xTestSem );
 | 
			
		||||
 | 
			
		||||
			/* There is no ISR here already to restore later. */
 | 
			
		||||
			setvect( ( portSHORT ) pxPort->usIRQVector, xISRs[ usPort ] );
 | 
			
		||||
 | 
			
		||||
			usInWord = portINPUT_WORD( pxPort->usIntReg );
 | 
			
		||||
			usInWord &= ~serINTERRUPT_MASK;
 | 
			
		||||
			usInWord |= serINTERRUPT_PRIORITY;
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usIntReg, usInWord );
 | 
			
		||||
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usBaudReg, ( unsigned portSHORT ) ulBaudDiv );
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usCtrlReg, serENABLE_INTERRUPTS | serMODE | serENABLE_TX_MACHINES | serENABLE_RX_MACHINES );
 | 
			
		||||
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usStatusReg, serCLEAR_ALL_STATUS_BITS );
 | 
			
		||||
		}
 | 
			
		||||
		portEXIT_CRITICAL();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pxPort;
 | 
			
		||||
} /*lint !e715 Some parameters are not used as only a subset of the serial port functionality is currently implemented. */
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vSerialPutString( xComPortHandle pxPort, const portCHAR * const pcString, unsigned portSHORT usStringLength )
 | 
			
		||||
{
 | 
			
		||||
unsigned portSHORT usByte;
 | 
			
		||||
portCHAR *pcNextChar;
 | 
			
		||||
 | 
			
		||||
	pcNextChar = ( portCHAR * ) pcString;
 | 
			
		||||
 | 
			
		||||
	for( usByte = 0; usByte < usStringLength; usByte++ )
 | 
			
		||||
	{
 | 
			
		||||
		xQueueSend( pxPort->xCharsForTx, pcNextChar, serDONT_BLOCK );
 | 
			
		||||
		pcNextChar++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vInterruptOn( pxPort, serTX_HOLD_EMPTY_INT );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, portCHAR *pcRxedChar, portTickType xBlockTime )
 | 
			
		||||
{
 | 
			
		||||
	/* Get the next character from the buffer, note that this routine is only 
 | 
			
		||||
	called having checked that the is (at least) one to get */
 | 
			
		||||
	if( xQueueReceive( pxPort->xRxedChars, pcRxedChar, xBlockTime ) )
 | 
			
		||||
	{
 | 
			
		||||
		return pdTRUE;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		return pdFALSE;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, portCHAR cOutChar, portTickType xBlockTime )
 | 
			
		||||
{
 | 
			
		||||
	if( xQueueSend( pxPort->xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
 | 
			
		||||
	{
 | 
			
		||||
		return pdFAIL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vInterruptOn( pxPort, serTX_HOLD_EMPTY_INT );
 | 
			
		||||
 | 
			
		||||
	return pdPASS;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
portBASE_TYPE xSerialWaitForSemaphore( xComPortHandle xPort )
 | 
			
		||||
{
 | 
			
		||||
const portTickType xBlockTime = ( portTickType ) 0xffff;
 | 
			
		||||
 | 
			
		||||
	/* This function does nothing interesting, but test the 
 | 
			
		||||
	semaphore from ISR mechanism. */
 | 
			
		||||
	return xSemaphoreTake( xPort->xTestSem, xBlockTime );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vSerialClose( xComPortHandle xPort )
 | 
			
		||||
{
 | 
			
		||||
unsigned portSHORT usOutput;
 | 
			
		||||
 | 
			
		||||
	/* Turn off the interrupts.  We may also want to delete the queues and/or
 | 
			
		||||
	re-install the original ISR. */
 | 
			
		||||
 | 
			
		||||
	portENTER_CRITICAL();
 | 
			
		||||
	{
 | 
			
		||||
		usOutput = portINPUT_WORD( xPort->usCtrlReg );
 | 
			
		||||
 | 
			
		||||
		usOutput &= ~serENABLE_INTERRUPTS;
 | 
			
		||||
		usOutput &= ~serENABLE_TX_MACHINES;
 | 
			
		||||
		usOutput &= ~serENABLE_RX_MACHINES;
 | 
			
		||||
		portOUTPUT_WORD( xPort->usCtrlReg, usOutput );
 | 
			
		||||
 | 
			
		||||
		usOutput = portINPUT_WORD( xPort->usIntReg );
 | 
			
		||||
		usOutput |= serINTERRUPT_MASK;
 | 
			
		||||
		portOUTPUT_WORD( xPort->usIntReg, usOutput );
 | 
			
		||||
	}
 | 
			
		||||
	portEXIT_CRITICAL();
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
unsigned short usStatus;
 | 
			
		||||
static portBASE_TYPE xComPortISR( xComPort * const pxPort )
 | 
			
		||||
{
 | 
			
		||||
unsigned portSHORT usStatusRegister;
 | 
			
		||||
portCHAR cChar;
 | 
			
		||||
portBASE_TYPE xTaskWokenByPost = pdFALSE, xAnotherTaskWokenByPost = pdFALSE, xTaskWokenByTx = pdFALSE;
 | 
			
		||||
 | 
			
		||||
	/* NOTE:  THIS IS NOT AN EFFICIENT ISR AS IT IS DESIGNED SOLELY TO TEST
 | 
			
		||||
	THE SCHEDULER FUNCTIONALITY.  REAL APPLICATIONS SHOULD NOT USE THIS
 | 
			
		||||
	FUNCTION. */
 | 
			
		||||
 | 
			
		||||
	usStatusRegister = portINPUT_WORD( pxPort->usStatusReg );
 | 
			
		||||
 | 
			
		||||
	if( usStatusRegister & serRX_READY )
 | 
			
		||||
	{
 | 
			
		||||
		cChar = ( portCHAR ) portINPUT_WORD( pxPort->usRxReg );
 | 
			
		||||
		xTaskWokenByPost = xQueueSendFromISR( pxPort->xRxedChars, &cChar, xTaskWokenByPost );
 | 
			
		||||
 | 
			
		||||
		/* Also release the semaphore - this does nothing interesting and is just a test. */
 | 
			
		||||
		xAnotherTaskWokenByPost = xSemaphoreGiveFromISR( pxPort->xTestSem, xAnotherTaskWokenByPost );
 | 
			
		||||
	}
 | 
			
		||||
	else if( pxPort->sTxInterruptOn && ( usStatusRegister & serTX_EMPTY ) )
 | 
			
		||||
	{
 | 
			
		||||
		if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			portOUTPUT_WORD( pxPort->usTxReg, ( unsigned portSHORT ) cChar );
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			/* Queue empty, nothing to send */
 | 
			
		||||
			vInterruptOff( pxPort, serTX_HOLD_EMPTY_INT );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    serRESET_PIC( pxPort->usIRQVector );
 | 
			
		||||
 | 
			
		||||
	/* If posting to the queue woke a task that was blocked on the queue we may
 | 
			
		||||
	want to switch to the woken task - depending on its priority relative to
 | 
			
		||||
	the task interrupted by this ISR. */
 | 
			
		||||
	if( xTaskWokenByPost || xAnotherTaskWokenByPost || xTaskWokenByTx)
 | 
			
		||||
	{
 | 
			
		||||
		return pdTRUE;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		return pdFALSE;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1861
									
								
								Demo/WizNET_DEMO_TERN_186/socket.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1861
									
								
								Demo/WizNET_DEMO_TERN_186/socket.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user