|
|
View previous topic :: View next topic |
Author |
Message |
drx2k
Joined: 31 Mar 2010 Posts: 10
|
Flexible 4x20 LCD Driver and CCS C TCP IP Stack |
Posted: Wed Jun 13, 2012 9:07 am |
|
|
Hi! How to use properly the flexible 4x20 lcd driver and ccs c tcp ip stack together?
I tried to use it together but the lcd display don't respond.
I'm using PIC18F4620, and I connect the RS, RW, E, D4-D7 to port D of PIC18F4620.
I also tried to use the dlcd.c and it works, but it works only for 2 x 20 / 2x16 lcd.
What modification do I need to make the dlcd.c for 4x20 type lcd? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 13, 2012 5:18 pm |
|
|
dlcd.c is on pudn, and it's simply the traditional old CCS driver, called lcd.c
which he has renamed.
CCS has a 4x20 driver based on the same code, and it's in this location:
Quote: |
c:\program files\picc\drivers\lcd420.c
|
|
|
|
drx2k
Joined: 31 Mar 2010 Posts: 10
|
1st problem solve |
Posted: Sun Jun 17, 2012 9:45 am |
|
|
Hi! I already solve my problem regarding TCP IP and Flexible LCD
i just comment the #use fast_io(D) in hardware.h so that i can use the flexible lcd driver
my problem now is how to use FAT MMC/SD Card in TCP IP Stack
I tried to use the example (ex_st_webserver2.c) but it's not working
and I also tried to modify it and but it still not working, i can't connect to ftp, sd card is not activating
btw. I'm using Proteus ISIS to test program using TCP IP Stack in PIC18F4620
Is there any example in how to use TCP IP Stack and MMC/SD Card that are easy to understand?
TIA |
|
|
drx2k
Joined: 31 Mar 2010 Posts: 10
|
My Code |
Posted: Sun Jun 17, 2012 9:53 am |
|
|
webserver mmc.c
Code: | //You must set one (and only) one of these to TRUE to tell the stack what hardware layer you are using
#define STACK_USE_MAC 1 //use the nic card
//define only one of these file systems
#define STACK_USE_FAT 1 //FAT file system on MMC
#define STACK_USE_MPFS 0 //Microchip's MPFS simulated file system
//if you want to be able to upload new files, set either one of these to TRUE.
#define STACK_USE_FTP 1 //FTP Server
#define STACK_USE_TFTP 0 //TFTP Server
#define HTTP_USE_AUTHENTICATION 1
#if STACK_USE_MAC
#define STACK_USE_DHCP TRUE //for auto resolution of IP address
#define STACK_USE_ARP TRUE //needed to resolve MAC addresses of IP addresses
#define STACK_USE_UDP TRUE //needed for dhcp
#endif
#define STACK_USE_ICMP TRUE //Enabled for ping support
#define STACK_USE_TCP TRUE //To send TCP packets (talk to HTTP clients)
#define STACK_USE_HTTP2 TRUE //CCS webserver with MMC/MPFS
#define STACK_USE_IP_GLEANING FALSE //Disable Microchip's propietary auto-IP configuration
#include "ccstcpip.h"
#include "flex_lcd420.h"
char g_HTTPMessageStack[20];
char g_HTTPLCDMessage[20]="CCS Webserver2";
int8 g_LEDState[2]={0,0};
//this isn't a required callback, this is an application function being
//used by http_format_char.
int http_format_char_checked(int8 flag, char *str)
{
int len=0;
if (flag)
{
sprintf(str,"checked=\"checked\"");
len = 7;
}
return(len);
}
//this is a callback function to the HTTP stack. see http.c
//The following escape characters are used:
// %0 - AN0
// %1 - AN1
// %2 - BUTTON0
// %3 - BUTTON1
// %4 - Current LCD Message
// %5 - CHECKED if LED1 is ON
// %6 - CHECKED if LED1 is OFF
// %7 - CHECKED if LED2 is ON
// %8 - CHECKED if LED2 is OFF
// %F - Message stack
int8 http_format_char(char* file, char id, char *str, int8 max_ret) {
char new_str[25];
int8 len=0;
int8 i;
switch(id) {
case '0':
set_adc_channel(0);
delay_us(100);
i=read_adc();
sprintf(new_str,"<B>AN%U = </B>0x%X",0,i);
len=strlen(new_str);
break;
case '1':
set_adc_channel(1);
delay_us(100);
i=read_adc();
sprintf(new_str,"<B>AN%U = </B>0x%X",1,i);
len=strlen(new_str);
break;
case '2':
sprintf(new_str,"<B></B>");
if (!input(USER_BUTTON1))
sprintf(&new_str[7], "DOWN");
else
sprintf(&new_str[7], "UP");
len=strlen(new_str);
break;
case '3':
sprintf(new_str,"<B></B>");
if (!input(USER_BUTTON2))
sprintf(&new_str[7], "DOWN");
else
sprintf(&new_str[7], "UP");
len=strlen(new_str);
break;
case '4':
//len = http_format_char_checked(g_LEDState[0], new_str);
sprintf(new_str,"<B></B>");
if(g_LEDState[0]==1)
sprintf(&new_str[7], "ON");
else
sprintf(&new_str[7], "OFF");
len=strlen(new_str);
break;
case '5':
//len = http_format_char_checked(g_LEDState[1], new_str);
sprintf(new_str,"<B></B>");
if(g_LEDState[1]==1)
sprintf(&new_str[7], "ON");
else
sprintf(&new_str[7], "OFF");
len=strlen(new_str);
break;
case '6':
strncpy(new_str, g_HTTPLCDMessage, sizeof(new_str));
new_str[sizeof(new_str)-1] = 0;
len = strlen(new_str);
break;
case '7':
strncpy(new_str, g_HTTPMessageStack, sizeof(new_str));
new_str[sizeof(new_str)-1] = 0;
len = strlen(new_str);
g_HTTPMessageStack[0] = 0;
break;
}
if (len){
strncpy(str, new_str, max_ret);
}else
*str=0;
return(len);
}
//this is a callback function to the HTTP stack. see http.c
//in this example it verifies that "pwd" is "master", if it is
//then it sets led1 and led2 ("led1" and "led2") based on their value
//and changes the lcd screen ("lcd").
void http_exec_cgi(char* file, char *key, char *val) {
static char led1_key[]="led1";
static char led2_key[]="led2";
static char lcd_key[]="lcd";
static char msgStack_key[]="msgStack";
int8 v;
v=atoi(val);
//fprintf(USER, "\r\nval: %s", val);
if (stricmp(key,led1_key)==0)
{
g_LEDState[0]=v;
if (g_LEDState[0])
LED_ON(USER_LED1);
else
LED_OFF(USER_LED1);
}
if (stricmp(key,led2_key)==0)
{
g_LEDState[1]=v;
if (g_LEDState[1])
LED_ON(USER_LED2);
else
LED_OFF(USER_LED2);
}
if (stricmp(key, msgStack_key)==0)
{
strncpy(g_HTTPMessageStack, val, sizeof(g_HTTPMessageStack));
g_HTTPMessageStack[sizeof(g_HTTPMessageStack)-1] = 0;
printf("\f%s",val);
}
if (stricmp(key,lcd_key)==0)
{
strncpy(g_HTTPLCDMessage, val, sizeof(g_HTTPLCDMessage));
g_HTTPLCDMessage[sizeof(g_HTTPLCDMessage)-1] = 0;
lcd_gotoxy(1,4);printf(lcd_putc,"\fWEB SERVER");
lcd_gotoxy(1,4);printf(lcd_putc,"%s",val);
//printf("\f%s",val);
}
}
#if HTTP_USE_AUTHENTICATION
//This is a callback to the HTTP stack.
//fileName is a file that has been requested over HTTP and is password
//protected, user and pwd contains the authentication login the user had
//attempted. This function returns TRUE if the user/pwd is valid for this
//fileName.
int1 http_check_authentication(char *fileName, char *user, char *pwd)
{
static char goodUser[]="fuzzy";
static char goodPwd[]="bunnies";
return((stricmp(goodUser,user)==0) && (stricmp(goodPwd,pwd)==0));
}
#endif
#if STACK_USE_FTP
//This is a callback to the FTP stack.
//Verify that the login and password provided by the FTP client are valid
//according to your specifications.
//This isn't terribly secure but, then again, neither is FTP.
//Return 1 if login and password are accepted, return 0 if denied.
BOOL FTPVerify(char *login, char *password){
static char goodUser[]="fuzzy";
static char goodPwd[]="bunnies";
return((stricmp(goodUser,login)==0) && (stricmp(goodPwd,password)==0));
}
#endif
void LCDTask(void) {
static TICKTYPE lastTick;
static enum {LCD_Display=0, LCD_Wait=1} state=0;
switch(state) {
case LCD_Display:
if (!MACIsLinked()) {
printf(lcd_putc,"\fNo Ethernet\n");
}
else {
printf(lcd_putc,"\fIP:%u.%u.%u.%u\n", MY_IP_BYTE1, MY_IP_BYTE2, MY_IP_BYTE3, MY_IP_BYTE4);
printf(lcd_putc,"Subnet:%u.%u.%u.%u\n", MY_MASK_BYTE1, MY_MASK_BYTE2, MY_MASK_BYTE3, MY_MASK_BYTE4);
printf(lcd_putc,"Gatewy:%u.%u.%u.%u", MY_GATE_BYTE1, MY_GATE_BYTE2, MY_GATE_BYTE3, MY_GATE_BYTE4);
}
lastTick=TickGet();
state=LCD_Wait;
break;
case LCD_Wait:
if (TickGetDiff(TickGet(), lastTick) >= TICKS_PER_SECOND) {
//output_toggle(USER_LED1);
state=LCD_Display;
}
break;
}
}
void main(void)
{
MACAddrInit();
IPAddrInit();
init_user_io();
StackInit();
lcd_init();
while (TRUE)
{
restart_wdt();
StackTask();
LCDTask();
if (second_counter>=1)
{
second_counter=0;
}
}
}
|
ccstcpip.h
Code: | #define STACK_USE_CCS_PICENS 0 //18f4620 + enc28j60
#define STACK_USE_CCS_PICNET 0 //18f6722 + realtek
#define STACK_USE_CCS_PICEEC 0 //18f97j60
#define STACK_USE_CUSTOM_HW 1 //enc28j60 + pic18
#if STACK_USE_CCS_PICENS
#define STACK_USE_MCPENC 1
#endif
#if STACK_USE_CCS_PICEEC
#define STACK_USE_MCPINC 1
#endif
#if STACK_USE_CUSTOM_HW
#define STACK_USE_MCPENC 1
#endif
#if STACK_USE_CCS_PICENS
#include <18F4620.h>
#use delay(clock=40000000)
#fuses H4, NOWDT, NOLVP, NODEBUG
#elseif STACK_USE_CCS_PICNET
#include <18F6722.h>
#use delay(clock=40000000)
#fuses H4, NOWDT, NOLVP, NODEBUG
#elseif STACK_USE_CCS_PICEEC
#include <18F67J60.h>
//#use delay(clock=41666667)
//#fuses NOWDT, NODEBUG, H4_SW, NOIESO, NOFCMEN, PRIMARY
#use delay(clock=25M)
#fuses NOWDT, NODEBUG, HS, NOIESO, NOFCMEN, PRIMARY, ETHLEDNOEMB
#elseif STACK_USE_CCS_PICNET_OLD
#include <18F6720.h>
#use delay(clock=20000000)
#fuses HS, NOWDT, NOLVP, NODEBUG
#define STACK_USE_CCS_PICNET TRUE
#elif STACK_USE_CUSTOM_HW
#include <18F4620.h>
#device adc=10
#use delay(clock=32000000)
#fuses H4, NOWDT, NOLVP, NODEBUG, NOMCLR
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#else
#error You need to define your custom hardware
#endif
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include "tcpip/stacktsk.c" //include Microchip TCP/IP Stack
#if STACK_USE_CCS_PICENS
#include "tcpip/mlcd.c"
#define BUTTON1_PRESSED() (!input(PIN_A4))
#define USER_LED1 PIN_A5
#define USER_LED2 PIN_B4
#define USER_LED3 PIN_B5
#define LED_ON output_low
#define LED_OFF output_high
#define STANDARD_ADC_STRING "AN0"
#define STANDARD_ADC_CHANNEL 0
void init_user_io(void) {
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
*0xF92=(*0xF92 & 0xDF) | 0x11; //a5 output, a4 and a0 input
*0xF93=*0xF93 & 0xCF; //b4 and b5 output
LED_OFF(USER_LED1);
LED_OFF(USER_LED2);
LED_OFF(USER_LED3);
set_adc_channel(0);
}
#elif STACK_USE_CCS_PICEEC
#include "tcpip/elcd.c"
#define BUTTON1_PRESSED() (!input(PIN_A4))
#define USER_LED1 PIN_B3
#define USER_LED2 PIN_B4
#define USER_LED3 PIN_B5
#define LED_ON output_low
#define LED_OFF output_high
#define STANDARD_ADC_STRING "AN2"
#define STANDARD_ADC_CHANNEL 2
void init_user_io(void) {
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_TO_AN2);
set_adc_channel(2);
*0xF92=*0xF92 & 0xFC; //a0 and a1 output
*0xF93=*0xF93 & 0xC7; //b3, b4 and b5 output
LED_OFF(USER_LED1);
LED_OFF(USER_LED2);
LED_OFF(USER_LED3);
set_adc_channel(2);
}
#elif STACK_USE_CUSTOM_HW
//User Define
#define USER_LED1 PIN_B0
#define USER_LED2 PIN_B1
#define USER_BUTTON1 PIN_B2
#define USER_BUTTON2 PIN_B3
#define LED_ON output_high
#define LED_OFF output_low
#define BUTTON_PRESSED !input
void init_user_io(void)
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
//*0xF92=(*0xF92 & 0xDF) | 0x11;
*0xF93=(*0xF93 & 0xFC); //B0 and B1 input, B2 and B4 output
*0xF96=(*0xF96 & 0x0);
LED_OFF(USER_LED1);
LED_OFF(USER_LED2);
}
#else
#include "tcpip/dlcd.c"
#define BUTTON1_PRESSED() (!input(PIN_B0))
#define BUTTON2_PRESSED() (!input(PIN_B1))
#define USER_LED1 PIN_B2
#define USER_LED2 PIN_B4
#define LED_ON output_low
#define LED_OFF output_high
#define STANDARD_ADC_STRING "AN0"
#define STANDARD_ADC_CHANNEL 0
void init_user_io(void)
{
setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports(ANALOG_AN0_TO_AN1);
*0xF92=*0xF92 | 3; //a0 and a1 input (for ADC)
*0xF93=(*0xF93 & 0xEB) | 3; //B0 and B1 input, B2 and B4 output
LED_OFF(USER_LED1);
LED_OFF(USER_LED2);
set_adc_channel(0);
}
#endif
void MACAddrInit(void) {
MY_MAC_BYTE1=0;
MY_MAC_BYTE2=2;
MY_MAC_BYTE3=3;
MY_MAC_BYTE4=4;
MY_MAC_BYTE5=5;
MY_MAC_BYTE6=6;
}
void IPAddrInit(void) {
//IP address of this unit
MY_IP_BYTE1=192;
MY_IP_BYTE2=168;
MY_IP_BYTE3=95;
MY_IP_BYTE4=2;
//network gateway
MY_GATE_BYTE1=192;
MY_GATE_BYTE2=168;
MY_GATE_BYTE3=95;
MY_GATE_BYTE4=1;
//subnet mask
MY_MASK_BYTE1=255;
MY_MASK_BYTE2=255;
MY_MASK_BYTE3=255;
MY_MASK_BYTE4=0;
}
|
hardware.h
Code: | #IFNDEF ___TCPIP_STACK_CONFIGURATION
#define ___TCPIP_STACK_CONFIGURATION
#ifndef STACK_USE_CCS_PICNET
#define STACK_USE_CCS_PICNET FALSE
#endif
#ifndef STACK_USE_CCS_PICENS
#define STACK_USE_CCS_PICENS FALSE
#endif
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#if STACK_USE_CCS_PICNET || STACK_USE_CCS_PICEEC
#use fast_io(F)
#endif
//// VARIOUS MODEM SETTINGS.
#DEFINE MODEM_DCD PIN_G3
#DEFINE MODEM_RESET PIN_G4
#define MODEM_TX PIN_G1
#define MODEM_RX PIN_G2
#DEFINE MODEM_INIT_STR "ATM1L3&K0" //speaker on, volume high, no hw flow control
#DEFINE MODEM_DIAL_STR "ATDT"
#DEFINE MODEM_BAUD_RATE 115200
#DEFINE MODEM_RESPONSE_TIMEOUT 2000 //time to wait for a response to an AT command (in ms)
#DEFINE MODEM_CONNECT_TIMEOUT 120000 //time to wait for modem to make a connection (in ms)
//// VARIOUS MAC/NIC SETTINGS.
#if STACK_USE_CCS_PICNET
//Latch and Directional control SFR locations for the 3 control pins
#define NIC_RESET_LAT LATE_RE7
#define NIC_IOW_LAT LATE_RE6
#define NIC_IOR_LAT LATE_RE5
#define NIC_RESET_TRIS TRISE_RE7
#define NIC_IOW_TRIS TRISE_RE6
#define NIC_IOR_TRIS TRISE_RE5
//Latch and Directional control SFR locations for the 5bit address port
#define NIC_ADDR_LAT LATE
#define NIC_ADDR_TRIS TRISE
//Latch, Directional and I/O SFR locations for the 8bit data port
#define NIC_DATA_IO PORTF
#define NIC_DATA_LAT LATF
#define NIC_DATA_TRIS TRISF
//This macro takes an address and properly outputs it on the latch register, and sets proper pins to output.
//Leaves other pins alone.
#define WRITE_NIC_ADDR(a) NIC_ADDR_LAT = (NIC_ADDR_LAT & 0xE0)|a; \
NIC_ADDR_TRIS = NIC_ADDR_TRIS & 0xE0
#elif STACK_USE_CCS_PICENS
#define PIN_ENC_MAC_SO PIN_C4 // PIC <<<< ENC
#define PIN_ENC_MAC_SI PIN_C5 // PIC >>>> ENC
#define PIN_ENC_MAC_CLK PIN_C3
#define PIN_ENC_MAC_CS PIN_D1
#define PIN_ENC_MAC_RST PIN_D0
#define PIN_ENC_MAC_INT PIN_B0
#define PIN_ENC_MAC_WOL PIN_B1
#define ENC_MAC_USE_SPI TRUE //due to an errata in the ENC28J60, you should always use HW SPI to assure that SPI clock is over 8MHz!
#define mac_enc_spi_tris_init() TRISB=(TRISB | 0b11); TRISC = (TRISC & 0b11010111) | 0x10; TRISD=TRISD & 0xF4//was 0xFC
/*
#elif STACK_USE_CCS_EWL5V
#define PIN_ENC_MAC_SO PIN_C4 // PIC <<<< ENC
#define PIN_ENC_MAC_SI PIN_C5 // PIC >>>> ENC
#define PIN_ENC_MAC_CLK PIN_C3
#define PIN_ENC_MAC_CS PIN_A4
#define PIN_ENC_MAC_RST PIN_B5
#define PIN_ENC_MAC_INT PIN_B2
#define PIN_ENC_MAC_WOL PIN_B3
#define ENC_MAC_USE_SPI TRUE //due to an errata in the ENC28J60, you should always use HW SPI to assure that SPI clock is over 8MHz!
#define mac_enc_spi_tris_init() TRISB=(TRISB | 0b00001100)&0b11011111; TRISC = (TRISC & 0b11010111) | 0x10; TRISA=TRISA & 0b11101111
*/
#elif STACK_USE_CCS_PICEEC
//no hardware definitions - everything is internal
#elif STACK_USE_CUSTOM_HW
#define PIN_ENC_MAC_SO PIN_C4 // PIC <<<< ENC PIN_ENC_MAC_SO PIC_SDI/SDA
#define PIN_ENC_MAC_SI PIN_C5 // PIC >>>> ENC PIN_ENC_MAC_SI PIC_SDO
#define PIN_ENC_MAC_CLK PIN_C3 // PIC <<>> ENC PIN_ENC_MAC_CLK PIN_SCK/SCL
#define PIN_ENC_MAC_CS PIN_C1 //PIN_D1 -tris-out
#define PIN_ENC_MAC_RST PIN_C0 //PIN_DO -tris_out
#define PIN_ENC_MAC_INT PIN_C2 //PIN_D2 -tris_in
#define PIN_ENC_MAC_WOL PIN_E0 //PIN_D3 -tris-in
#define ENC_MAC_USE_SPI TRUE //due to an errata in the ENC28J60, you should always use HW SPI to assure that SPI clock is over 8MHz!
//#define mac_enc_spi_tris_init() TRISC = (TRISC & 0b11010111) | 0x10; TRISD=TRISD & 0xFC//was 0xFC
#define mac_enc_spi_tris_init() TRISC = (TRISC & 0b11010100) | 0x10;
#else
#error Please define your MAC/NIC I/O settings
#endif
//// SET TCP_NO_WAIT_FOR_ACK TO FALSE IF TCP STACK SHOULD WAIT FOR ACK FROM
//// REMOTE HOST BEFORE TRANSMITTING ANOTHER PACKET. THIS MAY REDUCE THROUGHPUT.
//// DEFAULT VALUE (TRUE) GETS LOADED IN TCP.H IF THIS LINE IS REMOVED.
#define TCP_NO_WAIT_FOR_ACK FALSE
///DEFAULT HARDCODED IP ADDRESSES.
/// FUTURE APPLICATIONS MAY WANT TO SAVE THESE TO AN EEPROM.
/// OR USE AUTO IP ASSIGNMENT (DHCP).
/// NO TWO DEVICES ON A NETwORK CAN HAVE THE SAME IP ADDRESS
#define MY_DEFAULT_IP_ADDR_BYTE1 10 //IP ADDRESS
#define MY_DEFAULT_IP_ADDR_BYTE2 10 // This unit's IP address.
#define MY_DEFAULT_IP_ADDR_BYTE3 5
#define MY_DEFAULT_IP_ADDR_BYTE4 15
#define MY_DEFAULT_MASK_BYTE1 0xff //NETMASK
#define MY_DEFAULT_MASK_BYTE2 0xff // Netmask tells the IP / ARP stack which
#define MY_DEFAULT_MASK_BYTE3 0xff // IP's are on your local network.
#define MY_DEFAULT_MASK_BYTE4 0x00
#define MY_DEFAULT_GATE_BYTE1 192 //GATEWAY IP ADDRESS
#define MY_DEFAULT_GATE_BYTE2 168 // Gateway acts as a conduit between two networks.
#define MY_DEFAULT_GATE_BYTE3 100
#define MY_DEFAULT_GATE_BYTE4 1
///DEFAULT HARDCODED MAC ADDRESS.
/// FUTURE APPLICATIONS MAY WANT TO SAVE THIS TO AN EEPROM, OR GENERATE
/// A DYNAMIC ONE BASED UPON UNIT'S SERIAL NUMBER.
/// NO TWO DEVICES ON THE SAME ETHERNET NETWORK CAN HAVE THE SAME MAC ADDRESS.
#define MY_DEFAULT_MAC_BYTE1 0x00
#define MY_DEFAULT_MAC_BYTE2 0x04
#define MY_DEFAULT_MAC_BYTE3 0xa3
#define MY_DEFAULT_MAC_BYTE4 0x00
#define MY_DEFAULT_MAC_BYTE5 0x00
#define MY_DEFAULT_MAC_BYTE6 0x00
///Maximum sockets to be defined.
/// Note that each socket consumes 36 bytes of RAM.
/// If you remove this, a default value will be loaded in stacktsk.h
#ifndef MAX_SOCKETS
#define MAX_SOCKETS 5
#endif
///Avaialble UDP Socket
/// DCHP takes 1 socket.
/// If you remove this, a default value will be loaded in stacktsk.h
#ifndef MAX_UDP_SOCKETS
#define MAX_UDP_SOCKETS 2
#endif
///BUFFER SIZE DEFINITIONS
///
/// For SLIP, there can only be one transmit and one receive buffer.
/// Both buffer must fit in one bank. If bigger buffer is required,
/// you must manually locate tx and rx buffer in different bank
/// or modify your linker script file to support arrays bigger than
/// 256 bytes.
/// I think Microchip needs MAC_RX_BUFFER_SIZE to equal MAC_TX_BUFFER_SIZE
///
/// For PPP, there can only be one transmit and one receive buffer.
/// You can receive messages larger than the receive buffer if your
/// routines are fast enough. You cannot transmit messages larger
/// than the TX buffer. The larger the buffer you can make, the better.
/// BUG: MAC_RX_BUFFER_SIZE must equal MAC_TX_BUFFER_SIZE
///
/// For Ethernet, the Ethernet controler has many buffers that are
/// 1k in size. Only one buffer is used for TX, rest are for RX.
/// Unlike SLIP and PPP, no RAM is used for these buffers.
#if STACK_USE_MAC
#define MAC_TX_BUFFER_SIZE 1024 //do not modify this line
#define MAC_TX_BUFFER_COUNT 1 //do not modify this line
#elif STACK_USE_PPP
#define MAC_TX_BUFFER_SIZE 1024
#define MAC_TX_BUFFER_COUNT 1
#elif STACK_USE_SLIP
#define MAC_TX_BUFFER_SIZE 250
#define MAC_TX_BUFFER_COUNT 1
#endif
#define MAC_RX_BUFFER_SIZE MAC_TX_BUFFER_SIZE //do not modify this line unless you are certain you know what you're doing
#endif |
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|