提交 97e80a16 编写于 作者: wuyangyong's avatar wuyangyong

add PIC32 Ethernet Starter Kit demo

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1433 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 2f70bf95
/*
* File : application.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-05-23 aozima first implementation for PIC32.
*/
// Adds support for PIC32 Peripheral library functions and macros
#include <plib.h>
static void delay(void)
{
volatile unsigned long i;
for(i=0;i<500000;i++);
}
int rt_application_init(void)
{
PORTSetPinsDigitalOut(IOPORT_D, BIT_0);
while(1)
{
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
PORTSetBits(IOPORT_D, BIT_0);
delay();
PORTClearBits(IOPORT_D, BIT_0);
}
return 0;
}
/*
* File : board.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006-2011, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-05-23 aozima first implementation for PIC32.
*/
// Adds support for PIC32 Peripheral library functions and macros
#include <plib.h>
// Configuration Bits
#pragma config FNOSC = PRIPLL // Oscillator Selection
#pragma config FPLLIDIV = DIV_2 // PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)
#pragma config FPLLMUL = MUL_20 // PLL Multiplier
#pragma config FPLLODIV = DIV_1 // PLL Output Divider
#pragma config FPBDIV = DIV_1 // Peripheral Clock divisor
#pragma config FWDTEN = OFF // Watchdog Timer
#pragma config WDTPS = PS1 // Watchdog Timer Postscale
#pragma config FCKSM = CSDCMD // Clock Switching & Fail Safe Clock Monitor
#pragma config OSCIOFNC = OFF // CLKO Enable
#pragma config POSCMOD = XT // Primary Oscillator
#pragma config IESO = OFF // Internal/External Switch-over
#pragma config FSOSCEN = OFF // Secondary Oscillator Enable
#pragma config CP = OFF // Code Protect
#pragma config BWP = OFF // Boot Flash Write Protect
#pragma config PWP = OFF // Program Flash Write Protect
#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select
#pragma config DEBUG = OFF // Debugger Disabled for Starter Kit
// The following is used by the main application
#define SYS_FREQ (80000000)
static void rt_hw_show_info(void)
{
rt_kprintf("\r\n\r\n---------- board info ----------\r\n");
rt_kprintf("DEVICE_FAMILY: PIC32\r\n");
rt_kprintf("CPU_ARCHITECTURE: MIPS\r\n");
rt_kprintf("CPU_FREQ: %uMHz\r\n",SYS_FREQ/1000000UL);
}
/**
* This function will initial FM3 Easy Kit board.
*/
void rt_hw_board_init()
{
// Configure the device for maximum performance, but do not change the PBDIV clock divisor.
// Given the options, this function will change the program Flash wait states,
// RAM wait state and enable prefetch cache, but will not change the PBDIV.
// The PBDIV value is already set via the pragma FPBDIV option above.
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
rt_hw_console_init();
rt_hw_show_info();
}
/*
* File : console.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006-2011, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-05-23 aozima first implementation for PIC32.
*/
#include <rtthread.h>
// Warning:
// if you want to use DBPRINTF in PIC32 Ethernet Starter Kit,
// you project must globl define PIC32_STARTER_KIT and debug in MPLAB.
// but,if you want run app without debug mode,you must remove this features.
// Adds support for PIC32 Peripheral library functions and macros
#include <plib.h>
void rt_hw_console_init(void)
{
//Initialize the DB_UTILS IO channel
DBINIT();
}
/**
* This function is used by rt_kprintf to display a string on console.
*
* @param str the displayed string
*/
void rt_hw_console_output(const char* str)
{
DBPRINTF(str);
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="project" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin\Debug\project" prefix_auto="1" extension_auto="1" />
<Option object_output="obj\Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="application.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="board.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="console.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="rtconfig.h" />
<Unit filename="startup.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\include\rtdef.h" />
<Unit filename="..\..\include\rthw.h" />
<Unit filename="..\..\include\rtm.h" />
<Unit filename="..\..\include\rtthread.h" />
<Unit filename="..\..\libcpu\mips\pic32\context_gcc.S" />
<Unit filename="..\..\libcpu\mips\pic32\interrupt.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\libcpu\mips\pic32\stack.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\clock.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\device.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\idle.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\ipc.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\irq.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\kservice.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\kservice.h" />
<Unit filename="..\..\src\mem.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\mempool.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\module.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\module.h" />
<Unit filename="..\..\src\object.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\rtm.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\scheduler.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\slab.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\thread.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\..\src\timer.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<DoxyBlocks>
<comment_style block="0" line="0" />
<doxyfile_project />
<doxyfile_build />
<doxyfile_warnings />
<doxyfile_output />
<doxyfile_dot />
<general />
</DoxyBlocks>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
[HEADER]
magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13}
file_version=1.0
device=PIC32MX795F512L
[PATH_INFO]
BuildDirPolicy=BuildDirIsProjectDir
dir_src=
dir_bin=./obj
dir_tmp=./obj
dir_sin=
dir_inc=.;../../include
dir_lib=C:\Program Files\Microchip\MPLAB C32 Suite\lib;C:\Program Files\Microchip\MPLAB C32 Suite\pic32mx\lib
dir_lkr=
[CAT_FILTERS]
filter_src=*.s;*.c
filter_inc=*.h;*.inc
filter_obj=*.o
filter_lib=*.a
filter_lkr=*.ld
[CAT_SUBFOLDERS]
subfolder_src=kernel;pic32
subfolder_inc=
subfolder_obj=
subfolder_lib=
subfolder_lkr=
[FILE_SUBFOLDERS]
file_000=.
file_001=.
file_002=kernel
file_003=kernel
file_004=kernel
file_005=kernel
file_006=kernel
file_007=kernel
file_008=kernel
file_009=kernel
file_010=kernel
file_011=kernel
file_012=kernel
file_013=kernel
file_014=kernel
file_015=kernel
file_016=kernel
file_017=.
file_018=pic32
file_019=pic32
file_020=.
file_021=.
[GENERATED_FILES]
file_000=no
file_001=no
file_002=no
file_003=no
file_004=no
file_005=no
file_006=no
file_007=no
file_008=no
file_009=no
file_010=no
file_011=no
file_012=no
file_013=no
file_014=no
file_015=no
file_016=no
file_017=no
file_018=no
file_019=no
file_020=no
file_021=no
[OTHER_FILES]
file_000=no
file_001=no
file_002=no
file_003=no
file_004=no
file_005=no
file_006=no
file_007=no
file_008=no
file_009=no
file_010=no
file_011=no
file_012=no
file_013=no
file_014=no
file_015=no
file_016=no
file_017=no
file_018=no
file_019=no
file_020=no
file_021=no
[FILE_INFO]
file_000=board.c
file_001=application.c
file_002=..\..\src\device.c
file_003=..\..\src\idle.c
file_004=..\..\src\ipc.c
file_005=..\..\src\irq.c
file_006=..\..\src\kservice.c
file_007=..\..\src\mem.c
file_008=..\..\src\mempool.c
file_009=..\..\src\module.c
file_010=..\..\src\object.c
file_011=..\..\src\rtm.c
file_012=..\..\src\scheduler.c
file_013=..\..\src\slab.c
file_014=..\..\src\thread.c
file_015=..\..\src\timer.c
file_016=..\..\src\clock.c
file_017=startup.c
file_018=..\..\libcpu\mips\pic32\context_gcc.S
file_019=..\..\libcpu\mips\pic32\stack.c
file_020=console.c
file_021=rtconfig.h
[SUITE_INFO]
suite_guid={14495C23-81F8-43F3-8A44-859C583D7760}
suite_state=
[TOOL_SETTINGS]
TS{CB0AF4B8-4022-429D-8F99-8A56782B2C6D}=
TS{9C698E0A-CBC9-4EFF-AE7D-B569F93E7322}=-g -DPIC32_STARTER_KIT
TS{77F59DA1-3C53-4677-AC5F-A03EB0125170}=-Map="$(BINDIR_)$(TARGETBASE).map" -o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)"
TS{0396C0A1-9052-4E4F-8B84-EF0162B1B4E9}=
[INSTRUMENTED_TRACE]
enable=0
transport=0
format=0
[CUSTOM_BUILD]
Pre-Build=
Pre-BuildEnabled=1
Post-Build=pic32-size $(BINDIR_)$(TargetName)
Post-BuildEnabled=1
board: PIC32 Ethernet Starter Kit
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en545713
Warning:
Because PIC32 Ethernet Starter Kit have no uart or other.
so,console print use DBPRINTF.
if you want to use DBPRINTF in PIC32 Ethernet Starter Kit,
you project must globl define PIC32_STARTER_KIT and debug in MPLAB.
but,if you want run app without debug mode,you must remove this features.
if not,the app can't run(loop in DBPRINTF).
/* RT-Thread config file */
#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__
/* RT_NAME_MAX*/
#define RT_NAME_MAX 8
/* RT_ALIGN_SIZE*/
#define RT_ALIGN_SIZE 4
/* PRIORITY_MAX */
#define RT_THREAD_PRIORITY_MAX 32
/* Tick per Second */
#define RT_TICK_PER_SECOND 100
/* SECTION: RT_DEBUG */
/* Thread Debug */
#define RT_DEBUG
//#define THREAD_DEBUG
#define SCHEDULER_DEBUG
//#define IRQ_DEBUG
#define IDLE_THREAD_STACK_SIZE 1024
#define RT_USING_OVERFLOW_CHECK
/* Using Hook */
#define RT_USING_HOOK
/* Using Software Timer */
/* #define RT_USING_TIMER_SOFT */
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
#define RT_TIMER_TICK_PER_SECOND 10
/* SECTION: IPC */
/* Using Semaphore*/
#define RT_USING_SEMAPHORE
/* Using Mutex */
#define RT_USING_MUTEX
/* Using Event */
#define RT_USING_EVENT
/* Using MailBox */
#define RT_USING_MAILBOX
/* Using Message Queue */
#define RT_USING_MESSAGEQUEUE
/* SECTION: Memory Management */
/* Using Memory Pool Management*/
#define RT_USING_MEMPOOL
/* Using Dynamic Heap Management */
//#define RT_USING_HEAP
/* Using Small MM */
#define RT_USING_SMALL_MEM
/* SECTION: Device System */
/* Using Device System */
#define RT_USING_DEVICE
#define RT_USING_UART1
/* SECTION: Console options */
#define RT_USING_CONSOLE
/* the buffer size of console*/
#define RT_CONSOLEBUF_SIZE 128
#define RT_USING_NEWLIB
/* SECTION: finsh, a C-Express shell */
//#define RT_USING_FINSH
/* Using symbol table */
#define FINSH_USING_SYMTAB
#define FINSH_USING_DESCRIPTION
#define __fsymtab_start _alt_partition_FSymTab_start
#define __fsymtab_end _alt_partition_FSymTab_end
#define __vsymtab_start _alt_partition_VSymTab_start
#define __vsymtab_end _alt_partition_VSymTab_end
/* SECTION: device filesystem */
//#define RT_USING_DFS
#define RT_USING_DFS_ELMFAT
/* the max number of mounted filesystem */
#define DFS_FILESYSTEMS_MAX 2
/* the max number of opened files */
#define DFS_FD_MAX 4
/* the max number of cached sector */
#define DFS_CACHE_MAX_NUM 4
/* SECTION: lwip, a lighwight TCP/IP protocol stack */
//#define RT_USING_LWIP
/* LwIP uses RT-Thread Memory Management */
#define RT_LWIP_USING_RT_MEM
/* Enable ICMP protocol*/
#define RT_LWIP_ICMP
/* Enable UDP protocol*/
#define RT_LWIP_UDP
/* Enable TCP protocol*/
#define RT_LWIP_TCP
/* Enable DNS */
#define RT_LWIP_DNS
/* the number of simulatenously active TCP connections*/
#define RT_LWIP_TCP_PCB_NUM 5
/* Using DHCP */
//#define RT_LWIP_DHCP
/* ip address of target*/
#define RT_LWIP_IPADDR0 192
#define RT_LWIP_IPADDR1 168
#define RT_LWIP_IPADDR2 1
#define RT_LWIP_IPADDR3 30
/* gateway address of target*/
#define RT_LWIP_GWADDR0 192
#define RT_LWIP_GWADDR1 168
#define RT_LWIP_GWADDR2 1
#define RT_LWIP_GWADDR3 1
/* mask address of target*/
#define RT_LWIP_MSKADDR0 255
#define RT_LWIP_MSKADDR1 255
#define RT_LWIP_MSKADDR2 255
#define RT_LWIP_MSKADDR3 0
/* tcp thread options */
#define RT_LWIP_TCPTHREAD_PRIORITY 12
#define RT_LWIP_TCPTHREAD_MBOX_SIZE 4
#define RT_LWIP_TCPTHREAD_STACKSIZE 1024
/* ethernet if thread options */
#define RT_LWIP_ETHTHREAD_PRIORITY 15
#define RT_LWIP_ETHTHREAD_MBOX_SIZE 4
#define RT_LWIP_ETHTHREAD_STACKSIZE 512
#endif
/*
* File : startup.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-05-23 aozima first implementation for PIC32.
*/
// Adds support for PIC32 Peripheral library functions and macros
#include <plib.h>
/**
* This function will startup RT-Thread RTOS.
*/
void rtthread_startup(void)
{
/* init board */
rt_hw_board_init();
/* show version */
rt_show_version();
/* init tick */
rt_system_tick_init();
/* init kernel object */
rt_system_object_init();
/* init timer system */
rt_system_timer_init();
//#ifdef RT_USING_HEAP
// #ifdef __CC_ARM
// rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)FM3_SRAM_END);
// #elif __ICCARM__
// rt_system_heap_init(__segment_end("HEAP"), (void*)FM3_SRAM_END);
// #else
// /* init memory system */
// rt_system_heap_init((void*)&__bss_end, (void*)FM3_SRAM_END);
// #endif
//#endif
/* init scheduler system */
rt_system_scheduler_init();
//#ifdef RT_USING_DEVICE
// /* register uart0 */
// rt_hw_serial_register(&uart0_device, "uart0",
// RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
// &uart0);
//
// /* register uart2, used for RTI debug */
// rt_hw_serial_register(&uart2_device, "uart2",
// RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
// &uart2);
//
//#ifdef RT_USING_DFS
//#ifdef RT_USING_DFS_UFFS
// rt_hw_nand_init();
//#endif
//#endif
//
// /*init all registed devices */
// rt_device_init_all();
//#endif
/* init application */
rt_application_init();
//#ifdef RT_USING_FINSH
// /* init finsh */
// finsh_system_init();
//#ifdef RT_USING_DEVICE
// finsh_set_device("uart2");
//#endif
//#endif
/* init timer thread */
rt_system_timer_thread_init();
/* init idle thread */
rt_thread_idle_init();
/* start scheduler */
rt_system_scheduler_start();
/* never reach here */
return ;
}
int main(void)
{
// /* disable interrupt first */
// rt_hw_interrupt_disable();
/* startup RT-Thread RTOS */
rtthread_startup();
return 0;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册