config mpalb tcpip

12
HƯỚNG DẪN CONFIG HARDWARE CHO BỘ THƯ VIỆN TCP/IP STACK DÙNG CCS VÀ MPLAB. 2. MPLAB: _ Ở phần trước mình đã giới thiệu các bạn cách config HW cho bộ thư viện TCP/IP do CCS chỉnh sửa lại cho trình biên dịch của mình. Ở phần này mình xin hướng dẫn các bạn cách config HW cho bộ thư viện TCP/IP gốc của Microchip và trình biên dịch mình sử dụng là MPLAB C30 cho dòng PIC24 và cũng tương tự cho PIC18 với trình dịch MPLAB C18. +Bước 1: Không như bộ CCS TCP/IP, bộ thư viện TCP/IP Stack của Microchip cung cấp đầy đủ các dòng VXL do đó bạn cần phải biết mình cần có gì trước khi thực hiện 1 ứng dụng với bộ Microchip TCP/IP Stack. Theo file help của Microchip thì những file bạn cần cho 1 project đó là : . HardwareProfile.h : File này gồm các thông số cấu hình phần cứng . TCPIPConfig.h : File này gồm các thông số cho ứng dụng của bạn như địa chỉ IP, MAC, các giao thức sử dụng trong project. File này có thể tạo bằng phần mềm TCP/IP Config Wizard do Microchip cung cấp . . Các file dùng cho các giao thức của bạn. + Bước 2: Khi đã nắm được thì bạn có thể bắt đầu bước vào việc cấu hình. Đầu tiên các bạn tạo 1 thư mục test trong ổ cài thư viện Microchip. Sau đó chúng ta sẽ bắt đầu với file TCPIPConfig.h trước các bạn tạo 1 file trống với tên như vậy và lưu vào thư mục test. Sau đó bật phần mềm TCP/IP Config Wizard lên ( nằm trong thư mục Utilities của TCP/IP Stack).

Upload: nguyen-duc-thinh

Post on 16-Apr-2015

347 views

Category:

Documents


1 download

DESCRIPTION

cấu hình Tcpip cho mplab và ccs

TRANSCRIPT

Page 1: config mpalb tcpip

HƯỚNG DẪN CONFIG HARDWARE CHO BỘ THƯ VIỆN TCP/IP STACK DÙNG CCS VÀ MPLAB.

2. MPLAB: _ Ở phần trước mình đã giới thiệu các bạn cách config HW cho bộ thư viện TCP/IP do CCS chỉnh sửa lại cho trình biên dịch của mình. Ở phần này mình xin hướng dẫn các bạn cách config HW cho bộ thư viện TCP/IP gốc của Microchip và trình biên dịch mình sử dụng là MPLAB C30 cho dòng PIC24 và cũng tương tự cho PIC18 với trình dịch MPLAB C18. +Bước 1: Không như bộ CCS TCP/IP, bộ thư viện TCP/IP Stack của Microchip cung cấp đầy đủ các dòng VXL do đó bạn cần phải biết mình cần có gì trước khi thực hiện 1 ứng dụng với bộ Microchip TCP/IP Stack. Theo file help của Microchip thì những file bạn cần cho 1 project đó là : . HardwareProfile.h : File này gồm các thông số cấu hình phần cứng . TCPIPConfig.h : File này gồm các thông số cho ứng dụng của bạn như địa chỉ IP, MAC, các giao thức sử dụng trong project. File này có thể tạo bằng phần mềm TCP/IP Config Wizard do Microchip cung cấp . . Các file dùng cho các giao thức của bạn. + Bước 2: Khi đã nắm được thì bạn có thể bắt đầu bước vào việc cấu hình. Đầu tiên các bạn tạo 1 thư mục test trong ổ cài thư viện Microchip. Sau đó chúng ta sẽ bắt đầu với file TCPIPConfig.h trước các bạn tạo 1 file trống với tên như vậy và lưu vào thư mục test. Sau đó bật phần mềm TCP/IP Config Wizard lên ( nằm trong thư mục Utilities của TCP/IP Stack).

Page 2: config mpalb tcpip

Các bạn chọn như hình và file để lưu cấu hình này là file TCPIPENC28 trong thư mục Config của example Demo App. Các bạn cứ để nguyên vậy sau khi tạo xong chúng ta sẽ copy nội dung này đến file TCPIPConfig.h trong thư mục test của chúng ta.

Tiếp theo các bạn chọn Next thì chương trình yêu cầu bạn chọn giao thức trong ứng dụng của bạn. Ở đây mình chọn giao thức TCP.

Page 3: config mpalb tcpip

Tiếp đó chương trình yêu cầu bạn có chọn các example trong project của mình không, nếu muốn thêm example nào thì các bạn check vào example đó.

Page 4: config mpalb tcpip

Tiếp theo là các module support cho ứng dụng của bạn như DHCP (Tự cấp IP cho board), DNS( Phân giải tên miền).. Các bạn có thể lựa chọn sau cho phù hợp với ứng dụng của mình. Kế tiếp là địa chỉ IP và địa chỉ MAC của board.

Và cuối cùng là bộ nhớ đệm cho các giao thức. Vậy là xong các bạn đã cấu hình được các thông số yêu cầu cho các ứng dụng của mình sau đó các bạn copy nó vào file TCPIPConfig.h ở thư mục test. + Bước 3 : Tiếp theo là file config hardware của board . Các bạn copy file HardwareProfile.h trong thư mục Demo App vào thư mục test của mình. Bật file này lên các bạn sẽ thấy nếu các bạn sử dụng board của Mirochip cung cấp thì sẽ chỉnh MPLAB theo các thông số nó yêu cầu, còn không thì tạo file HWP YOUR_BOARD.h và định nghĩa board của mình vào đó. Các bạn tạo 1 thư mục Configs trong thư mục test và trong đó các bạn tạo 1 file HWP YOUR_BOARD.h. Bật file này lên và chúng ta bắt đầu tham khảo các ví dụ trong thư mục App Demo/Configs để cấu hình cho board của mình. Ở đây mình sẽ cấu hình cho PIC24FJ128GA010 ( vì nó có trong example của Protues dễ cho chúng ta trong việc test code ). Ở đây mình tham khảo file HWP EX16_ENC28 C30, nếu là PIC18 các bạn có thể tham khảo file HWP PIC18EX_ENC28.h .

Page 5: config mpalb tcpip

#ifndef HARDWARE_PROFILE_H #define HARDWARE_PROFILE_H #include "Compiler.h" #define EXPLORER_16 #if defined(THIS_IS_STACK_APPLICATION)

_CONFIG2(FNOSC_PRIPLL & POSCMOD_XT) //Config _CONFIG1(JTAGEN_OFF & FWDTEN_OFF) #endif #define MAXIMUM_PIC_FREQ (32000000ul) // Tan so thach anh #define GetSystemClock() (MAXIMUM_PIC_FREQ) // Hz #define GetInstructionClock() (GetSystemClock()/2) #define GetPeripheralClock() (GetSystemClock()/2) #define ENC_CS_TRIS (TRISDbits.TRISD14) #define ENC_CS_IO (LATDbits.LATD14) // Các chân SPI SCK, SDI, SDO sẽ được định nghĩa trong hàm InitializeBoard() của file main.c hoặc mặc định sẽ là module SPI 1 trừ 1 số loại . #define ENC_SPI_IF (IFS0bits.SPI1IF) #define ENC_SSPBUF (SPI1BUF) #define ENC_SPISTAT (SPI1STAT) #define ENC_SPISTATbits (SPI1STATbits) #define ENC_SPICON1 (SPI1CON1) #define ENC_SPICON1bits (SPI1CON1bits) #define ENC_SPICON2 (SPI1CON2) #define LCD_DATA_TRIS (*((volatile unsigned char*)&TRISE)) #define LCD_DATA_IO (*((volatile unsigned char*)&LATE)) #define LCD_RD_WR_TRIS (TRISDbits.TRISD5) #define LCD_RD_WR_IO (LATDbits.LATD5) #define LCD_RS_TRIS (TRISBbits.TRISB15) #define LCD_RS_IO (LATBbits.LATB15) #define LCD_E_TRIS (TRISDbits.TRISD4) #define LCD_E_IO (LATDbits.LATD4) #define UBRG U2BRG #define UMODE U2MODE #define USTA U2STA #define BusyUART() BusyUART2() #define CloseUART() CloseUART2()

Page 6: config mpalb tcpip

#define ConfigIntUART(a) ConfigIntUART2(a) #define DataRdyUART() DataRdyUART2() #define OpenUART(a,b,c) OpenUART2(a,b,c) #define ReadUART() ReadUART2() #define WriteUART(a) WriteUART2(a) #define getsUART(a,b,c) getsUART2(a,b,c) #define putsUART(a) putsUART2((unsigned int*)a) #define getcUART() getcUART2() #define putcUART(a) do{while(BusyUART()); WriteUART(a); while(BusyUART()); }while(0) #define putrsUART(a) putrsUART2(a) #endif // #ifndef HARDWARE_PROFILE_H +Bước 4: Vậy là đã xong việc định nghĩa giờ chúng ta bắt đầu tạo project tên test trong thư mục test.Sau khi tạo xong các bạn nhấn phải vào project vừa tạo và chọn build option , chọn mplab c30, click vào mục add trong ô preprocessor macro và đánh vào YOUR_BOARD như hình mục đích để chương trình biết bạn chọn file cấu hình phần cứng nào.

Page 7: config mpalb tcpip

Tiếp đó các bạn chọn thẻ Directories và chọn Include Search Path trong ô show directories for . Các bạn chọn New và đánh đường dẫn là “.” , sau đó tiếp tục chọn New và trỏ tới thư mục Đường dẫn cài đặt thư viện Microchip\Microchip\Include

Page 8: config mpalb tcpip

Sau đó các bạn tạo cấu trúc thư mục cho project như hình.

_ Và bắt đầu việc add các file thư viện vào : + Source file : Trong thư mục TCPIP Stack của phần Source file các bạn add các file trong mục Microchip/TCPIPStack vào và bỏ bớt 1 số file giao thức không cần thiết cho ứng dụng của mình. Lưu ý nên bỏ bớt vì 1 số file sẽ gây lỗi khi biên dịch. + Header file : Trong thư mục TCPIP Stack của phần Header file các bạn add các file header trong mục Microchip/Include/TCPIPStack vào và cũng bỏ bớt 1 số file không cần thiết. Các bạn add tiếp vào đó file TCPIPConfig.h và HardwareProfile.h mà chúng ta vừa tạo ban nãy.Trong phần Header file các bạn add vào file HWP YOUR_BOARD.h. + Library : Các bạn add vào 2 file nằm trong thư mục Microchip/TCP IP Stack. _ Sau khi add đúng như yêu cầu các bạn được cấu trúc thư mục như sau:

+ Bước 5: Các bạn tạo 1 file test.c trong thư mục Source file và đây là file chương trình chúng ta cần viết. Do TCPIP Stack là 1 bộ thư viện lớn vì

Page 9: config mpalb tcpip

vậy để làm việc với nó chúng ta cần thực hiện hàm main theo các trình tự mà Microchip đề ra để khởi tạo board và các giao thức. Đầu tiên chúng ta gọi hàm khởi tạo các phần cứng trên board để thiết lập giao tiếp SPI với ENC28J60 và 1 số IO khác nếu có. Tiếp đó là hàm TickInit(), InitAppConfig() để config các thông số cho ứng dụng Ethernet của chúng ta, và cuối cùng là hàm StackInit() để khởi tạo TCPIP Stack. Trong chương trình lặp chúng ta sẽ chạy 2 hàm StackTask và StackApplication(), chức năng 2 hàm này dùng để bắt các gói tin và load các module của các giao thức .Và đây là code của mình sau khi tham khảo file MainDemo.c. Ứng dụng này sẽ tự nhận IP từ router của bạn và hiển thị địa chỉ IP mà router cấp cho board lên LCD. #define THIS_IS_STACK_APPLICATION #include "TCPIP Stack/TCPIP.h" APP_CONFIG AppConfig; static unsigned short wOriginalAppConfigChecksum; // Checksum of the ROM defaults for AppConfig BYTE AN0String[8]; static void InitAppConfig(void); static void InitializeBoard(void); static void ProcessIO(void); void _ISR __attribute__((__no_auto_psv__)) _AddressError(void) { Nop(); Nop(); } void _ISR __attribute__((__no_auto_psv__)) _StackError(void) { Nop(); Nop(); } int main() { BYTE IPDigit[4]; static DWORD dwLastIP = 0; BYTE i; BYTE j; BYTE LCDPos=16; InitializeBoard(); LCDInit();

Page 10: config mpalb tcpip

DelayMs(100); strcpypgm2ram((char*)LCDText, "TCPStack " TCPIP_STACK_VERSION " " " "); LCDUpdate(); TickInit(); InitAppConfig(); StackInit(); while(1) { StackTask(); StackApplications(); if(dwLastIP != AppConfig.MyIPAddr.Val) { dwLastIP = AppConfig.MyIPAddr.Val; for(i = 0; i < sizeof(IP_ADDR); i++) { uitoa((WORD)AppConfig.MyIPAddr.v[i], IPDigit); for(j = 0; j < strlen((char*)IPDigit); j++) { LCDText[LCDPos++] = IPDigit[j]; } if(i == sizeof(IP_ADDR)-1) break; LCDText[LCDPos++] = '.'; } if(LCDPos < 32u) LCDText[LCDPos] = 0; LCDUpdate(); LCDPos=16; } } } static void InitializeBoard(void) { CLKDIVbits.RCDIV = 0; ENC_CS_IO = 1; ENC_CS_TRIS = 0; }

Page 11: config mpalb tcpip

static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1, MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4, MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6}; static void InitAppConfig(void) { memset((void*)&AppConfig, 0x00, sizeof(AppConfig)); AppConfig.Flags.bIsDHCPEnabled = TRUE; AppConfig.Flags.bInConfigMode = TRUE; memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr)); AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 | MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul | MY_DEFAULT_IP_ADDR_BYTE4<<24ul; AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val; AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul | MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul; AppConfig.DefaultMask.Val = AppConfig.MyMask.Val; AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul | MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul; AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 | MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul | MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul; AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 | MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul | MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul; memcpypgm2ram(AppConfig.NetBIOSName, (ROM void*)MY_DEFAULT_HOST_NAME, 16); FormatNetBIOSName(AppConfig.NetBIOSName);

Page 12: config mpalb tcpip

} _ Từ đây các bạn có thể triển khai các ứng dụng cụ thể với thư viện TCP/IP Stack của Microchip thông qua các code mẫu. Đối với PIC18,16 các bạn cũng config tương tự như PIC24 và trong các hàm khởi tạo trong chương trình chính các bạn copy phần code có định nghĩa #if(__18CXX) ở đầu .