Merge branch 'mbed_dev2' of https://github.com/Wiznet/mbed into Wiznet-mbed_dev2

pull/1346/head^2
0xc0170 2015-09-28 12:43:52 +02:00
commit 4b5bb913d2
17 changed files with 1597 additions and 102 deletions

View File

@ -0,0 +1,15 @@
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00000000 0x00020000 { ; load region size_region
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
}

View File

@ -0,0 +1,213 @@
;/**************************************************************************//**
; * @file startup_CMSDK_CM0.s
; * @brief CMSIS Cortex-M0 Core Device Startup File for
; * Device CMSDK_CM0
; * @version V3.01
; * @date 06. March 2012
; * @modify 29. April 2014 by WIZnet ; added WZTOE_HANDLER
; * @note
; * Copyright (C) 2012 ARM Limited. All rights reserved.
; *
; * @par
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
; * processor based microcontrollers. This file can be freely distributed
; * within development tools that are supporting such ARM based processors.
; *
; * @par
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
; *
; ******************************************************************************/
;/*
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
;*/
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp EQU 0x20004000 ; Top of RAM (16 KB for WIZwiki_W7500)
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000400
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
DCD SSP0_Handler ; 16+ 0: SSP 0 Handler
DCD SSP1_Handler ; 16+ 1: SSP 1 Handler
DCD UART0_Handler ; 16+ 2: UART 0 Handler
DCD UART1_Handler ; 16+ 3: UART 1 Handler
DCD UART2_Handler ; 16+ 4: UART 2 Handler
DCD I2C0_Handler ; 16+ 5: I2C 0 Handler
DCD I2C1_Handler ; 16+ 6: I2C 1 Handler
DCD PORT0_Handler ; 16+ 7: GPIO Port 0 Combined Handler
DCD PORT1_Handler ; 16+ 8: GPIO Port 1 Combined Handler
DCD PORT2_Handler ; 16+ 9: GPIO Port 2 Combined Handler
DCD PORT3_Handler ; 16+10: GPIO Port 3 Combined Handler
DCD DMA_Handler ; 16+11: DMA Combined Handler
DCD DUALTIMER0_Handler ; 16+12: Dual timer 0 handler
DCD DUALTIMER1_Handler ; 16+13: Dual timer 1 handler
DCD PWM0_Handler ; 16+14: PWM0 Handler
DCD PWM1_Handler ; 16+15: PWM1 Handler
DCD PWM2_Handler ; 16+16: PWM2 Handler
DCD PWM3_Handler ; 16+17: PWM3 Handler
DCD PWM4_Handler ; 16+18: PWM4 Handler
DCD PWM5_Handler ; 16+19: PWM5 Handler
DCD PWM6_Handler ; 16+20: PWM6 Handler
DCD PWM7_Handler ; 16+21: PWM7 Handler
DCD RTC_Handler ; 16+22: RTC Handler
DCD ADC_Handler ; 16+23: ADC Handler
DCD WZTOE_Handler ; 16+24: WZTOE_Handler
DCD EXTI_Handler ; 16+25: EXTI_Handler
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY
; Reset Handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B .
ENDP
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
SVC_Handler PROC
EXPORT SVC_Handler [WEAK]
B .
ENDP
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
Default_Handler PROC
EXPORT SSP0_Handler [WEAK]
EXPORT SSP1_Handler [WEAK]
EXPORT UART0_Handler [WEAK]
EXPORT UART1_Handler [WEAK]
EXPORT UART2_Handler [WEAK]
EXPORT I2C0_Handler [WEAK]
EXPORT I2C1_Handler [WEAK]
EXPORT PORT0_Handler [WEAK]
EXPORT PORT1_Handler [WEAK]
EXPORT PORT2_Handler [WEAK]
EXPORT PORT3_Handler [WEAK]
EXPORT DMA_Handler [WEAK]
EXPORT DUALTIMER0_Handler [WEAK]
EXPORT DUALTIMER1_Handler [WEAK]
EXPORT PWM0_Handler [WEAK]
EXPORT PWM1_Handler [WEAK]
EXPORT PWM2_Handler [WEAK]
EXPORT PWM3_Handler [WEAK]
EXPORT PWM4_Handler [WEAK]
EXPORT PWM5_Handler [WEAK]
EXPORT PWM6_Handler [WEAK]
EXPORT PWM7_Handler [WEAK]
EXPORT RTC_Handler [WEAK]
EXPORT ADC_Handler [WEAK]
EXPORT WZTOE_Handler [WEAK]
EXPORT EXTI_Handler [WEAK]
SSP0_Handler
SSP1_Handler
UART0_Handler
UART1_Handler
UART2_Handler
I2C0_Handler
I2C1_Handler
PORT0_Handler
PORT1_Handler
PORT2_Handler
PORT3_Handler
DMA_Handler
DUALTIMER0_Handler
DUALTIMER1_Handler
PWM0_Handler
PWM1_Handler
PWM2_Handler
PWM3_Handler
PWM4_Handler
PWM5_Handler
PWM6_Handler
PWM7_Handler
RTC_Handler
ADC_Handler
WZTOE_Handler
EXTI_Handler
B .
ENDP
ALIGN
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
END

View File

@ -0,0 +1,31 @@
/* mbed Microcontroller Library - stackheap
* Copyright (C) 2009-2011 ARM Limited. All rights reserved.
*
* Setup a fixed single stack/heap memory model,
* between the top of the RW/ZI region and the stackpointer
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <rt_misc.h>
#include <stdint.h>
extern char Image$$RW_IRAM1$$ZI$$Limit[];
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) {
uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
uint32_t sp_limit = __current_sp();
zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
struct __initial_stackheap r;
r.heap_base = zi_limit;
r.heap_limit = sp_limit;
return r;
}
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,15 @@
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00000000 0x00020000 { ; load region size_region
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
}

View File

@ -0,0 +1,186 @@
;/**************************************************************************//**
; * @file startup_CMSDK_CM0.s
; * @brief CMSIS Cortex-M0 Core Device Startup File for
; * Device CMSDK_CM0
; * @version V3.01
; * @date 06. March 2012
; * @modify 29. April 2014 by WIZnet ; added WZTOE_HANDLER
; * @note
; * Copyright (C) 2012 ARM Limited. All rights reserved.
; *
; * @par
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
; * processor based microcontrollers. This file can be freely distributed
; * within development tools that are supporting such ARM based processors.
; *
; * @par
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
; *
; ******************************************************************************/
;/*
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
;*/
__initial_sp EQU 0x20004000 ; Top of RAM (16 KB for WIZwiki_W7500)
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
DCD SSP0_Handler ; 16+ 0: SSP 0 Handler
DCD SSP1_Handler ; 16+ 1: SSP 1 Handler
DCD UART0_Handler ; 16+ 2: UART 0 Handler
DCD UART1_Handler ; 16+ 3: UART 1 Handler
DCD UART2_Handler ; 16+ 4: UART 2 Handler
DCD I2C0_Handler ; 16+ 5: I2C 0 Handler
DCD I2C1_Handler ; 16+ 6: I2C 1 Handler
DCD PORT0_Handler ; 16+ 7: GPIO Port 0 Combined Handler
DCD PORT1_Handler ; 16+ 8: GPIO Port 1 Combined Handler
DCD PORT2_Handler ; 16+ 9: GPIO Port 2 Combined Handler
DCD PORT3_Handler ; 16+10: GPIO Port 3 Combined Handler
DCD DMA_Handler ; 16+11: DMA Combined Handler
DCD DUALTIMER0_Handler ; 16+12: Dual timer 0 handler
DCD DUALTIMER1_Handler ; 16+13: Dual timer 1 handler
DCD PWM0_Handler ; 16+14: PWM0 Handler
DCD PWM1_Handler ; 16+15: PWM1 Handler
DCD PWM2_Handler ; 16+16: PWM2 Handler
DCD PWM3_Handler ; 16+17: PWM3 Handler
DCD PWM4_Handler ; 16+18: PWM4 Handler
DCD PWM5_Handler ; 16+19: PWM5 Handler
DCD PWM6_Handler ; 16+20: PWM6 Handler
DCD PWM7_Handler ; 16+21: PWM7 Handler
DCD RTC_Handler ; 16+22: RTC Handler
DCD ADC_Handler ; 16+23: ADC Handler
DCD WZTOE_Handler ; 16+24: WZTOE_Handler
DCD EXTI_Handler ; 16+25: EXTI_Handler
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY
; Reset Handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B .
ENDP
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
SVC_Handler PROC
EXPORT SVC_Handler [WEAK]
B .
ENDP
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
Default_Handler PROC
EXPORT SSP0_Handler [WEAK]
EXPORT SSP1_Handler [WEAK]
EXPORT UART0_Handler [WEAK]
EXPORT UART1_Handler [WEAK]
EXPORT UART2_Handler [WEAK]
EXPORT I2C0_Handler [WEAK]
EXPORT I2C1_Handler [WEAK]
EXPORT PORT0_Handler [WEAK]
EXPORT PORT1_Handler [WEAK]
EXPORT PORT2_Handler [WEAK]
EXPORT PORT3_Handler [WEAK]
EXPORT DMA_Handler [WEAK]
EXPORT DUALTIMER0_Handler [WEAK]
EXPORT DUALTIMER1_Handler [WEAK]
EXPORT PWM0_Handler [WEAK]
EXPORT PWM1_Handler [WEAK]
EXPORT PWM2_Handler [WEAK]
EXPORT PWM3_Handler [WEAK]
EXPORT PWM4_Handler [WEAK]
EXPORT PWM5_Handler [WEAK]
EXPORT PWM6_Handler [WEAK]
EXPORT PWM7_Handler [WEAK]
EXPORT RTC_Handler [WEAK]
EXPORT ADC_Handler [WEAK]
EXPORT WZTOE_Handler [WEAK]
EXPORT EXTI_Handler [WEAK]
SSP0_Handler
SSP1_Handler
UART0_Handler
UART1_Handler
UART2_Handler
I2C0_Handler
I2C1_Handler
PORT0_Handler
PORT1_Handler
PORT2_Handler
PORT3_Handler
DMA_Handler
DUALTIMER0_Handler
DUALTIMER1_Handler
PWM0_Handler
PWM1_Handler
PWM2_Handler
PWM3_Handler
PWM4_Handler
PWM5_Handler
PWM6_Handler
PWM7_Handler
RTC_Handler
ADC_Handler
WZTOE_Handler
EXTI_Handler
B .
ENDP
ALIGN
END

View File

@ -0,0 +1,31 @@
/* mbed Microcontroller Library - stackheap
* Copyright (C) 2009-2011 ARM Limited. All rights reserved.
*
* Setup a fixed single stack/heap memory model,
* between the top of the RW/ZI region and the stackpointer
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <rt_misc.h>
#include <stdint.h>
extern char Image$$RW_IRAM1$$ZI$$Limit[];
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) {
uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
uint32_t sp_limit = __current_sp();
zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
struct __initial_stackheap r;
r.heap_base = zi_limit;
r.heap_limit = sp_limit;
return r;
}
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,152 @@
/* Linker script to configure memory regions. */
MEMORY
{
FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x20000 /* 128K */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x4000 /* 16K */
}
/* Library configurations */
GROUP(libgcc.a libc.a libm.a libnosys.a)
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
*/
ENTRY(Reset_Handler)
SECTIONS
{
.text :
{
KEEP(*(.isr_vector))
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
__etext = .;
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
} > RAM
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (COPY):
{
__end__ = .;
end = __end__;
*(.heap*)
__HeapLimit = .;
} > RAM
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}

View File

@ -0,0 +1,259 @@
/* File: startup_W7500.s
* Purpose: startup file for Cortex-M0 devices. Should use with
* GCC for ARM Embedded Processors
* Version: V1.4
* Date: 20 Dezember 2012
*
*/
/* Copyright (c) 2011 - 2012 ARM LIMITED
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of ARM nor the names of its contributors may be used
to endorse or promote products derived from this software without
specific prior written permission.
*
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
.syntax unified
.arch armv6-m
.section .stack
.align 3
/*
// <h> Stack Configuration
// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
// </h>
*/
.section .stack
.align 3
#ifdef __STACK_SIZE
.equ Stack_Size, __STACK_SIZE
#else
.equ Stack_Size, 0x200
#endif
.globl __StackTop
.globl __StackLimit
__StackLimit:
.space Stack_Size
.size __StackLimit, . - __StackLimit
__StackTop:
.size __StackTop, . - __StackTop
/*
// <h> Heap Configuration
// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
// </h>
*/
.section .heap
.align 3
#ifdef __HEAP_SIZE
.equ Heap_Size, __HEAP_SIZE
#else
.equ Heap_Size, 0
#endif
.globl __HeapBase
.globl __HeapLimit
__HeapBase:
.if Heap_Size
.space Heap_Size
.endif
.size __HeapBase, . - __HeapBase
__HeapLimit:
.size __HeapLimit, . - __HeapLimit
/* Vector Table */
.section .isr_vector
.align 2
.globl __isr_vector
__isr_vector:
.long __StackTop /* Top of Stack */
.long Reset_Handler /* Reset Handler */
.long NMI_Handler /* NMI Handler */
.long HardFault_Handler /* Hard Fault Handler */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long 0 /* Reserved */
.long SVC_Handler /* SVCall Handler */
.long 0 /* Debug Monitor Handler */
.long 0 /* Reserved */
.long PendSV_Handler /* PendSV Handler */
.long SysTick_Handler /* SysTick Handler */
/* External Interrupts */
.long SSP0_Handler /* 16+ 0: SSP 0 Handler */
.long SSP1_Handler /* 16+ 1: SSP 1 Handler */
.long UART0_Handler /* 16+ 2: UART 0 Handler */
.long UART1_Handler /* 16+ 3: UART 1 Handler */
.long UART2_Handler /* 16+ 4: UART 2 Handler */
.long I2C0_Handler /* 16+ 5: I2C 0 Handler */
.long I2C1_Handler /* 16+ 6: I2C 1 Handler */
.long PORT0_Handler /* 16+ 7: GPIO Port 0 Combined Handler */
.long PORT1_Handler /* 16+ 8: GPIO Port 1 Combined Handler */
.long PORT2_Handler /* 16+ 9: GPIO Port 2 Combined Handler */
.long PORT3_Handler /* 16+10: GPIO Port 3 Combined Handler */
.long DMA_Handler /* 16+11: DMA Combined Handler */
.long DUALTIMER0_Handler /* 16+12: Dual timer 0 handler */
.long DUALTIMER1_Handler /* 16+ 13: Dual timer 1 Handler */
.long PWM0_Handler /* 16+ 14: PWM0 Handler */
.long PWM1_Handler /* 16+ 15: PWM1 Handler */
.long PWM2_Handler /* 16+ 16: PWM2 Handler */
.long PWM3_Handler /* 16+ 17: PWM3 Handler */
.long PWM4_Handler /* 16+ 18: PWM4 Handler */
.long PWM5_Handler /* 16+ 19: PWM5 Handler */
.long PWM6_Handler /* 16+ 20: PWM6 Handler */
.long PWM7_Handler /* 16+ 21: PWM7 Handler */
.long RTC_Handler /* 16+ 22: RTC Handler */
.long ADC_Handler /* 16+ 23: ADC Handler */
.long WZTOE_Handler /* 16+ 24: WZTOE Handler */
.long EXTI_Handler /* 16+ 25: EXTI Handler */
.size __isr_vector, . - __isr_vector
/* Reset Handler */
.text
.thumb
.thumb_func
.align 2
.globl Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
/* Loop to copy data from read only memory to RAM. The ranges
* of copy from/to are specified by following symbols evaluated in
* linker script.
* __etext: End of code section, i.e., begin of data sections to copy from.
* __data_start__/__data_end__: RAM address range that data should be
* copied to. Both must be aligned to 4 bytes boundary. */
ldr r1, =__etext
ldr r2, =__data_start__
ldr r3, =__data_end__
subs r3, r2
ble .LC1
.LC0:
subs r3, #4
ldr r0, [r1, r3]
str r0, [r2, r3]
bgt .LC0
.LC1:
#ifdef __STARTUP_CLEAR_BSS
/* This part of work usually is done in C library startup code. Otherwise,
* define this macro to enable it in this startup.
*
* Loop to zero out BSS section, which uses following symbols
* in linker script:
* __bss_start__: start of BSS section. Must align to 4
* __bss_end__: end of BSS section. Must align to 4
*/
ldr r1, =__bss_start__
ldr r2, =__bss_end__
subs r2, r1
ble .LC3
movs r0, 0
.LC2:
str r0, [r1, r2]
subs r2, 4
bge .LC2
.LC3:
#endif /* __STARTUP_CLEAR_BSS */
/*bl _start*/
bl main
.pool
.size Reset_Handler, . - Reset_Handler
/* Macro to define default handlers. Default handler
* will be weak symbol and just dead loops. They can be
* overwritten by other handlers */
.macro def_default_handler handler_name
.align 1
.thumb_func
.weak \handler_name
.type \handler_name, %function
\handler_name :
b .
.size \handler_name, . - \handler_name
.endm
/* System Exception Handlers */
def_default_handler NMI_Handler
def_default_handler HardFault_Handler
def_default_handler MemManage_Handler
def_default_handler BusFault_Handler
def_default_handler UsageFault_Handler
def_default_handler SVC_Handler
def_default_handler DebugMon_Handler
def_default_handler PendSV_Handler
def_default_handler SysTick_Handler
/* IRQ Handlers */
def_default_handler SSP0_Handler
def_default_handler SSP1_Handler
def_default_handler UART0_Handler
def_default_handler UART1_Handler
def_default_handler UART2_Handler
def_default_handler I2C0_Handler
def_default_handler I2C1_Handler
def_default_handler PORT0_Handler
def_default_handler PORT1_Handler
def_default_handler PORT2_Handler
def_default_handler PORT3_Handler
def_default_handler DMA_Handler
def_default_handler DUALTIMER0_Handler
def_default_handler DUALTIMER1_Handler
def_default_handler PWM0_Handler
def_default_handler PWM1_Handler
def_default_handler PWM2_Handler
def_default_handler PWM3_Handler
def_default_handler PWM4_Handler
def_default_handler PWM5_Handler
def_default_handler PWM6_Handler
def_default_handler PWM7_Handler
def_default_handler RTC_Handler
def_default_handler ADC_Handler
def_default_handler WZTOE_Handler
def_default_handler EXTI_Handler
/*
def_default_handler Default_Handler
.weak DEF_IRQHandler
.set DEF_IRQHandler, Default_Handler
*/
.end

View File

@ -43,7 +43,8 @@ typedef enum {
typedef enum {
UART_0 = (int)W7500x_UART0_BASE,
UART_1 = (int)W7500x_UART1_BASE
UART_1 = (int)W7500x_UART1_BASE,
UART_2 = (int)W7500x_UART2_BASE
} UARTName;

View File

@ -0,0 +1,132 @@
/* mbed Microcontroller Library
*******************************************************************************
* Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of ARM Limited nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
*/
#include "PeripheralPins.h"
#include "PeripheralNames.h"
#include "pinmap.h"
//*** ADC ***
const PinMap PinMap_ADC[] = {
{PC_15, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN0
{PC_14, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN1
{PC_13, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN2
{PC_12, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN3
{PC_11, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN4
{PC_10, ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN5
{PC_9 , ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN6
{PC_8 , ADC_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF3)}, // ADC0_IN7
{NC, NC, 0}
};
//*** SERIAL ***
const PinMap PinMap_UART_TX[] = {
{PA_13, UART_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{PC_2, UART_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{PC_10, UART_2, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{NC, NC, 0}
};
const PinMap PinMap_UART_RX[] = {
{PA_14, UART_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{PC_3, UART_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{PC_11, UART_2, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_PULLUP, Px_AFSR_AF0)},
{NC, NC, 0}
};
//*** I2C ***
const PinMap PinMap_I2C_SDA[] = {
{PA_10, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_9, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_5, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PA_6, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC, NC, 0}
};
const PinMap PinMap_I2C_SCL[] = {
{PA_9, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_8, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_4, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PA_5, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC, NC, 0}
};
//*** SPI ***
const PinMap PinMap_SPI_SCLK[] = {
{PA_6 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PB_1 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_13, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_12, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC , NC , 0}
};
const PinMap PinMap_SPI_MOSI[] = {
{PA_8 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PB_3 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_15, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_14, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC , NC , 0}
};
const PinMap PinMap_SPI_MISO[] = {
{PA_7 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PB_2 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_14, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_13, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC , NC , 0}
};
const PinMap PinMap_SPI_SSEL[] = {
{PA_5 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PB_0 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_12, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_11, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC , NC , 0}
};
const PinMap PinMap_PWM[] = {
{PA_0 , PWM_6, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_1 , PWM_7, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PA_5 , PWM_2, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
{PA_7 , PWM_4, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
{PA_8 , PWM_5, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
{PA_9 , PWM_6, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
{PA_10, PWM_7, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
{PC_0 , PWM_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_2 , PWM_2, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_4 , PWM_4, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_5 , PWM_5, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{PC_8 , PWM_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
{PC_10, PWM_2, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
{NC , NC , WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)}
};

View File

@ -0,0 +1,230 @@
/* mbed Microcontroller Library
*******************************************************************************
* Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of ARM Limited nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
*/
#ifndef MBED_PINNAMES_H
#define MBED_PINNAMES_H
#include "cmsis.h"
#ifdef __cplusplus
extern "C" {
#endif
// See W7500x_hal_gpio.h for values of MODE, PUPD and AFNUM
#define WIZ_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE) << 8) | ((PUPD) << 4) | ((AFNUM) << 0)))
#define WIZ_PIN_PUPD(X) (((X) >> 4) & 0x0F)
#define WIZ_PIN_AFNUM(X) (((X) >> 0) & 0x0F)
#define WIZ_PIN_MODE(X) (((X) >> 8) & 0x0F)
#define WIZ_MODE_INPUT (0)
#define WIZ_MODE_OUTPUT (1)
#define WIZ_MODE_AF (2)
#define WIZ_GPIO_NOPULL (0) /*!< No Pull-up or Pull-down activation */
#define WIZ_GPIO_PULLDOWN (1) /*!< Pull-down activation */
#define WIZ_GPIO_PULLUP (2) /*!< Pull-up activation */
#define WIZ_GPIO_OPEN_DRAIN (3) /*!< Open Drain activation */
#define WIZ_PORT(X) (((uint32_t)(X) >> 4) & 0xF) // port number (0=A, 1=B, 2=C, 3=D)
#define WIZ_PIN_NUM(X) ((uint32_t)(X) & 0xF) // pin number
#define WIZ_PIN_INDEX(X) (1 << ((uint32_t)(X) & 0xF)) // pin index : flag bit
typedef enum {
PIN_INPUT,
PIN_OUTPUT
} PinDirection;
typedef enum {
// W7500x PORT[5:4] + PIN[3:0])
PA_0 = 0x000,
PA_1 = 0x001,
PA_2 = 0x002,
PA_3 = 0x003,
PA_4 = 0x004,
PA_5 = 0x005,
PA_6 = 0x006,
PA_7 = 0x007,
PA_8 = 0x008,
PA_9 = 0x009,
PA_10 = 0x00A,
PA_11 = 0x00B,
PA_12 = 0x00C,
PA_13 = 0x00D,
PA_14 = 0x00E,
PA_15 = 0x00F,
PB_0 = 0x010,
PB_1 = 0x011,
PB_2 = 0x012,
PB_3 = 0x013,
PB_4 = 0x014,
PB_5 = 0x015,
PB_6 = 0x016,
PB_7 = 0x017,
PB_8 = 0x018,
PB_9 = 0x019,
PB_10 = 0x01A,
PB_11 = 0x01B,
PB_12 = 0x01C,
PB_13 = 0x01D,
PB_14 = 0x01E,
PB_15 = 0x01F,
PC_0 = 0x020,
PC_1 = 0x021,
PC_2 = 0x022,
PC_3 = 0x023,
PC_4 = 0x024,
PC_5 = 0x025,
PC_6 = 0x026,
PC_7 = 0x027,
PC_8 = 0x028,
PC_9 = 0x029,
PC_10 = 0x02A,
PC_11 = 0x02B,
PC_12 = 0x02C,
PC_13 = 0x02D,
PC_14 = 0x02E,
PC_15 = 0x02F,
PD_0 = 0x030,
PD_1 = 0x031,
PD_2 = 0x032,
PD_3 = 0x033,
PD_4 = 0x034,
PA_00 = PA_0,
PA_01 = PA_1,
PA_02 = PA_2,
PA_03 = PA_3,
PA_04 = PA_4,
PA_05 = PA_5,
PA_06 = PA_6,
PA_07 = PA_7,
PA_08 = PA_8,
PA_09 = PA_9,
PB_00 = PB_0,
PB_01 = PB_1,
PB_02 = PB_2,
PB_03 = PB_3,
PB_04 = PB_4,
PB_05 = PB_5,
PB_06 = PB_6,
PB_07 = PB_7,
PB_08 = PB_8,
PB_09 = PB_9,
PC_00 = PC_0,
PC_01 = PC_1,
PC_02 = PC_2,
PC_03 = PC_3,
PC_04 = PC_4,
PC_05 = PC_5,
PC_06 = PC_6,
PC_07 = PC_7,
PC_08 = PC_8,
PC_09 = PC_9,
PD_00 = PD_0,
PD_01 = PD_1,
PD_02 = PD_2,
PD_03 = PD_3,
PD_04 = PD_4,
// Arduino connector namings
A0 = PC_15, // AIN0
A1 = PC_14, // AIN1
A2 = PC_13, // AIN2
A3 = PC_12, // AIN3
A4 = PC_9, // AIN4
A5 = PC_8, // AIN5
D0 = PA_14,
D1 = PA_13,
D2 = PC_3,
D3 = PC_2,
D4 = PA_2,
D5 = PA_1,
D6 = PA_0,
D7 = PA_12,
D8 = PA_11,
D9 = PC_1,
D10 = PA_5,
D11 = PA_8,
D12 = PA_7,
D13 = PA_6,
D14 = PA_10,
D15 = PA_9,
// Generic signals namings
LED_RED = PC_0,
LED_GREEN = PC_4,
LED_BLUE = PC_5,
LED1 = LED_RED,
LED2 = LED_GREEN,
LED3 = LED_BLUE,
LED4 = LED_BLUE,
LEDR = LED_RED,
LEDG = LED_GREEN,
LEDB = LED_BLUE,
USBTX = PC_10,
USBRX = PC_11,
//Use SPI1
SD_SEL = PB_0, // SPI1_CS
SD_CLK = PB_1, // SPI1_CLK
SD_MISO = PB_2, // MOSI1
SD_MOSI = PB_3, // MISO1
// Not connected
NC = (int)0xFFFFFFFF
} PinName;
typedef enum {
PullNone = 0,
PullDown = 1,
PullUp = 2,
PullDefault = PullNone
} PinMode;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,78 @@
/* mbed Microcontroller Library
*******************************************************************************
* Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of ARM Limited nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
*/
#ifndef MBED_DEVICE_H
#define MBED_DEVICE_H
#define DEVICE_PORTIN 1
#define DEVICE_PORTOUT 1
#define DEVICE_PORTINOUT 1
#define DEVICE_INTERRUPTIN 1
#define DEVICE_ANALOGIN 1
#define DEVICE_ANALOGOUT 0 // Not present on this device
#define DEVICE_SERIAL 1
#define DEVICE_I2C 1
#define DEVICE_I2CSLAVE 0
#define DEVICE_SPI 1
#define DEVICE_SPISLAVE 1
#define DEVICE_RTC 1
#define DEVICE_PWMOUT 1
#define DEVICE_SLEEP 0
#define DEVICE_ETHERNET 0
//=======================================
#define DEVICE_SEMIHOST 0
#define DEVICE_LOCALFILESYSTEM 0
#define DEVICE_ID_LENGTH 24
#define DEVICE_DEBUG_AWARENESS 0
#define DEVICE_STDIO_MESSAGES 1
#define STDIO_UART_TX PC_10
#define STDIO_UART_RX PC_11
#define STDIO_UART UART_2
#define DEVICE_ERROR_RED 0
#include "objects.h"
#endif

View File

@ -208,13 +208,24 @@ void S_UART_DeInit()
uint32_t S_UART_Init(uint32_t baud)
{
uint32_t tmpreg=0x00;
uint32_t uartclock = 0x00, integer_baud = 0x00;
assert_param(IS_UART_MODE(S_UART_InitStruct->UART_Mode));
S_UART_SetBaud(baud);
tmpreg = UART2->CTRL;
tmpreg &= ~(S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
tmpreg |= (S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
UART2->CTRL = tmpreg;
return 0;
}
void S_UART_SetBaud(uint32_t baud)
{
uint32_t uartclock = 0x00, integer_baud = 0x00;
if(CRG->FCLK_SSR == CRG_FCLK_SSR_RCLK)
{
uartclock = INTERN_XTAL;
uartclock = INTERN_XTAL;
}
else if(CRG->FCLK_SSR == CRG_FCLK_SSR_OCLK)
{
@ -227,18 +238,11 @@ uint32_t S_UART_Init(uint32_t baud)
integer_baud = (uint32_t)(uartclock / baud);
UART2->BAUDDIV = integer_baud;
tmpreg = UART2->CTRL;
tmpreg &= ~(S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
tmpreg |= (S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
UART2->CTRL = tmpreg;
return 0;
}
void S_UART_SendData(uint16_t Data)
{
while(UART2->STATE & S_UART_STATE_TX_BUF_FULL);
while(UART2->STATE & S_UART_STATE_TX_BUF_FULL);
UART2->DATA = Data;
}
@ -248,13 +252,13 @@ uint16_t S_UART_ReceiveData()
}
FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_FLAG)
FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_STATE)
{
FlagStatus bitstatus = RESET;
assert_param(IS_S_UART_FLAG(S_UART_FLAG));
assert_param(IS_S_UART_STATE(S_UART_STATE));
if ((UART2->STATE & S_UART_FLAG) != (uint16_t)RESET)
if ((UART2->STATE & S_UART_STATE) != (FlagStatus)RESET)
{
bitstatus = SET;
}
@ -266,28 +270,40 @@ FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_FLAG)
return bitstatus;
}
void S_UART_ITConfig(uint16_t S_UART_IT, FunctionalState NewState)
void S_UART_SetCTRL(uint16_t S_UART_CTRL, FunctionalState NewState)
{
assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
if ( NewState != DISABLE )
{
UART2->CTRL |= S_UART_CTRL;
}
else
{
UART2->CTRL &= ~(S_UART_CTRL);
}
}
void S_UART_ITConfig(uint16_t S_UART_CTRL, FunctionalState NewState)
{
assert_param(IS_S_UART_CTRL_FLAG(S_UART_CTRL));
if ( NewState != DISABLE )
{
UART2->CTRL |= S_UART_IT;
UART2->CTRL |= S_UART_CTRL;
}
else
{
UART2->CTRL &= ~(S_UART_IT);
UART2->CTRL &= ~(S_UART_CTRL);
}
}
ITStatus S_UART_GetITStatus(uint16_t S_UART_IT)
ITStatus S_UART_GetITStatus(uint16_t S_UART_INTSTATUS)
{
ITStatus bitstatus = RESET;
assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
assert_param(IS_S_UART_INTSATUS(S_UART_INTSTATUS));
if ((UART2->INT.STATUS & (S_UART_IT >> 2)) != (uint16_t) RESET)
if ((UART2->INT.STATUS & (S_UART_INTSTATUS)) != (uint16_t) RESET)
{
bitstatus = SET;
}
@ -299,11 +315,11 @@ ITStatus S_UART_GetITStatus(uint16_t S_UART_IT)
return bitstatus;
}
void S_UART_ClearITPendingBit(uint16_t S_UART_IT)
void S_UART_ClearITPendingBit(uint16_t S_UART_INTSTATUS)
{
assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
assert_param(IS_S_UART_INTSATUS(S_UART_INTSTATUS));
UART2->INT.CLEAR |= (S_UART_IT >> 2);
UART2->INT.CLEAR |= (S_UART_INTSTATUS);
}

View File

@ -224,12 +224,32 @@ typedef struct
/** @addtogroup S_UART_Flags
* @{
*/
#define S_UART_FLAG_RXO ((uint16_t)0x01UL << 3) /*!< RX buffer Overrun */
#define S_UART_FLAG_TXO ((uint16_t)0x01UL << 2) /*!< TX buffer Overrun */
#define S_UART_FLAG_RXF ((uint16_t)0x01UL << 1) /*!< RX buffer Full */
#define S_UART_FLAG_TXF ((uint16_t)0x01UL << 0) /*!< TX buffer Full */
#define IS_S_UART_FLAG(FLAG) (((FLAG) == S_UART_FLAG_RXO) || ((FLAG) == S_UART_FLAG_TXO) || \
((FLAG) == S_UART_FLAG_RXF) || ((FLAG) == S_UART_FLAG_TXF))
#define S_UART_STATE_RXO ((uint16_t)0x01UL << 3) /*!< RX buffer Overrun */
#define S_UART_STATE_TXO ((uint16_t)0x01UL << 2) /*!< TX buffer Overrun */
#define S_UART_STATE_RXF ((uint16_t)0x01UL << 1) /*!< RX buffer Full */
#define S_UART_STATE_TXF ((uint16_t)0x01UL << 0) /*!< TX buffer Full */
#define IS_S_UART_STATE(FLAG) (((FLAG) == S_UART_STATE_RXO) || ((FLAG) == S_UART_STATE_TXO) || \
((FLAG) == S_UART_STATE_RXF) || ((FLAG) == S_UART_STATE_TXF))
/**
* @}
*/
/** @addtogroup S_UART_CTRL_Flags
* @{
*/
#define S_UART_CTRL_RXOI ((uint16_t)0x01UL << 5) /*!< RX overrun interrupt */
#define S_UART_CTRL_TXOI ((uint16_t)0x01UL << 4) /*!< TX overrun interrupt */
#define S_UART_CTRL_RXI ((uint16_t)0x01UL << 3) /*!< RX interrupt */
#define S_UART_CTRL_TXI ((uint16_t)0x01UL << 2) /*!< TX interrupt */
#define S_UART_CTRL_RX ((uint16_t)0x01UL << 1) /*!< RX */
#define S_UART_CTRL_TX ((uint16_t)0x01UL << 0) /*!< TX */
#define IS_S_UART_CTRL_FLAG(FLAG) (((FLAG) == S_UART_CTRL_FLAG_RXOI) || ((FLAG) == S_UART_CTRL_FLAG_TXOI) || \
((FLAG) == S_UART_CTRL_FLAG_RXI) || ((FLAG) == S_UART_CTRL_FLAG_TXI) || \
((FLAG) == S_UART_CTRL_FLAG_RX) || ((FLAG) == S_UART_CTRL_FLAG_TX))
/**
* @}
*/
@ -239,13 +259,12 @@ typedef struct
* @{
*/
#define S_UART_IT_FLAG_RXOI ((uint16_t)0x01UL << 5) /*!< RX overrun interrupt */
#define S_UART_IT_FLAG_TXOI ((uint16_t)0x01UL << 4) /*!< TX overrun interrupt */
#define S_UART_IT_FLAG_RXI ((uint16_t)0x01UL << 3) /*!< RX interrupt */
#define S_UART_IT_FLAG_TXI ((uint16_t)0x01UL << 2) /*!< TX interrupt */
#define IS_S_UART_IT_FLAG(FLAG) (((FLAG) == S_UART_IT_FLAG_RXOI) || ((FLAG) == S_UART_IT_FLAG_TXOI) || \
((FLAG) == S_UART_IT_FLAG_RXI) || ((FLAG) == S_UART_IT_FLAG_TXI))
#define S_UART_INTSTATUS_RXOI ((uint16_t)0x01UL << 3) /*!< RX overrun interrupt */
#define S_UART_INTSTATUS_TXOI ((uint16_t)0x01UL << 2) /*!< TX overrun interrupt */
#define S_UART_INTSTATUS_RXI ((uint16_t)0x01UL << 1) /*!< RX interrupt */
#define S_UART_INTSTATUS_TXI ((uint16_t)0x01UL << 0) /*!< TX interrupt */
#define IS_S_UART_INTSTATUS(FLAG) (((FLAG) == S_UART_INTSTATUS_RXOI) || ((FLAG) == S_UART_INTSTATUS_TXOI) || \
((FLAG) == S_UART_INTSTATUS_RXI) || ((FLAG) == S_UART_INTSTATUS_TXI))
/**
* @}
*/
@ -263,21 +282,26 @@ void UART_ITConfig (UART_TypeDef* UARTx, uint16_t UART_IT, Func
ITStatus UART_GetITStatus (UART_TypeDef* UARTx, uint16_t UART_IT);
void UART_ClearITPendingBit (UART_TypeDef* UARTx, uint16_t UART_IT);
void S_UART_DeInit(void);
uint32_t S_UART_Init(uint32_t baud);
void S_UART_SendData(uint16_t Data);
uint16_t S_UART_ReceiveData(void);
uint8_t UartPutc (UART_TypeDef* UARTx, uint8_t ch);
void UartPuts (UART_TypeDef* UARTx, uint8_t *str);
uint8_t UartGetc (UART_TypeDef* UARTx);
uint8_t S_UartPutc(uint8_t ch);
void S_UartPuts(uint8_t *str);
uint8_t S_UartGetc(void);
void S_UART_DeInit (void);
uint32_t S_UART_Init (uint32_t baud);
void S_UART_SetBaud (uint32_t baud);
void S_UART_SetCTRL (uint16_t S_UART_CTRL, FunctionalState NewState);
void S_UART_SendData (uint16_t Data);
uint16_t S_UART_ReceiveData(void);
uint8_t S_UartPutc (uint8_t ch);
void S_UartPuts (uint8_t *str);
uint8_t S_UartGetc (void);
FlagStatus S_UART_GetFlagStatus (uint16_t S_UART_STATE);
void S_UART_ITConfig (uint16_t S_UART_CTRL, FunctionalState NewState);
ITStatus S_UART_GetITStatus (uint16_t S_UART_IT);
void S_UART_ClearITPendingBit(uint16_t S_UART_IT);
#ifdef __cplusplus

View File

@ -39,9 +39,9 @@
#include "PeripheralPins.h"
#include "W7500x_uart.h"
#define UART_NUM (2)
#define UART_NUM (3)
static uint32_t serial_irq_ids[UART_NUM] = {0, 0};
static uint32_t serial_irq_ids[UART_NUM] = {0, 0, 0};
static uart_irq_handler irq_handler;
@ -55,23 +55,46 @@ serial_t stdio_uart;
static void init_uart(serial_t *obj)
{
UART = (UART_TypeDef *)(obj->uart);
UART_InitStructure.UART_BaudRate = obj->baudrate;
UART_InitStructure.UART_WordLength = obj->databits;
UART_InitStructure.UART_StopBits = obj->stopbits;
UART_InitStructure.UART_Parity = obj->parity;
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
if(obj->index == 2) // For UART2, It is simple UART.
{
SystemCoreClockUpdate();
//S_UART_Init(obj->baudrate);
S_UART_SetCTRL((S_UART_CTRL_RX_EN|S_UART_CTRL_TX_EN), DISABLE);
S_UART_SetBaud(obj->baudrate);
if (obj->pin_rx == NC) {
UART_InitStructure.UART_Mode = UART_Mode_Tx;
} else if (obj->pin_tx == NC) {
UART_InitStructure.UART_Mode = UART_Mode_Rx;
} else {
UART_InitStructure.UART_Mode = (UART_Mode_Rx | UART_Mode_Tx);
if(obj->pin_rx == NC)
{
S_UART_SetCTRL(S_UART_CTRL_TX_EN, ENABLE);
}
else if(obj->pin_tx == NC)
{
S_UART_SetCTRL(S_UART_CTRL_RX_EN, ENABLE);
}
else
{
S_UART_SetCTRL((S_UART_CTRL_TX_EN|S_UART_CTRL_RX_EN),ENABLE);
}
}
else // For UART0 and UART1.
{
UART = (UART_TypeDef *)(obj->uart);
UART_InitStructure.UART_BaudRate = obj->baudrate;
UART_InitStructure.UART_WordLength = obj->databits;
UART_InitStructure.UART_StopBits = obj->stopbits;
UART_InitStructure.UART_Parity = obj->parity;
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
UART_Init(UART,&UART_InitStructure);
if (obj->pin_rx == NC) {
UART_InitStructure.UART_Mode = UART_Mode_Tx;
} else if (obj->pin_tx == NC) {
UART_InitStructure.UART_Mode = UART_Mode_Rx;
} else {
UART_InitStructure.UART_Mode = (UART_Mode_Rx | UART_Mode_Tx);
}
UART_Init(UART,&UART_InitStructure);
}
}
void serial_init(serial_t *obj, PinName tx, PinName rx)
@ -94,6 +117,10 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
obj->index = 1;
}
if (obj->uart == UART_2) {
obj->index = 2;
}
// Configure the UART pins
pinmap_pinout(tx, PinMap_UART_TX);
pinmap_pinout(rx, PinMap_UART_RX);
@ -131,11 +158,8 @@ void serial_free(serial_t *obj)
if (obj->uart == UART_1) {
}
// Configure GPIOs
// pin_function(obj->pin_tx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
// pin_function(obj->pin_rx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
if (obj->uart == UART_2) {
}
serial_irq_ids[obj->index] = 0;
}
@ -195,6 +219,20 @@ static void uart_irq(UARTName name, int id)
}
}
static void uart2_irq()
{
if(serial_irq_ids[2] != 0){
if( S_UART_GetITStatus(S_UART_INTSTATUS_TXI) != RESET ){
S_UART_ClearITPendingBit(S_UART_INTSTATUS_TXI);
irq_handler(serial_irq_ids[2], TxIrq);
}
if( S_UART_GetITStatus(S_UART_INTSTATUS_RXI) != RESET ) {
S_UART_ClearITPendingBit(S_UART_INTSTATUS_RXI);
irq_handler(serial_irq_ids[2], RxIrq);
}
}
}
#ifdef __cplusplus
extern "C"{
#endif
@ -207,6 +245,11 @@ void UART1_Handler()
{
uart_irq(UART_1, 1);
}
void UART2_Handler()
{
uart2_irq();
}
#ifdef __cplusplus
}
#endif
@ -222,28 +265,49 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
{
IRQn_Type irq_n = (IRQn_Type)0;
UART = (UART_TypeDef *)(obj->uart);
if (obj->uart == UART_0) {
irq_n = UART0_IRQn;
if (obj->uart == UART_2)
{
irq_n = UART2_IRQn;
if (enable){
if (irq == RxIrq){
S_UART_ITConfig(S_UART_CTRL_RXI,ENABLE);
} else {
S_UART_ITConfig(S_UART_CTRL_TXI,ENABLE);
}
NVIC_ClearPendingIRQ(irq_n);
NVIC_EnableIRQ(irq_n);
} else { // disable
S_UART_ITConfig((S_UART_CTRL_RXI|S_UART_CTRL_TXI),DISABLE);
NVIC_DisableIRQ(irq_n);
}
}
if (obj->uart == UART_1) {
irq_n = UART1_IRQn;
}
if (enable) {
if (irq == RxIrq) {
UART_ITConfig(UART,UART_IT_FLAG_RXI,ENABLE);
} else { // TxIrq
UART_ITConfig(UART,UART_IT_FLAG_TXI,ENABLE);
else
{
UART = (UART_TypeDef *)(obj->uart);
if (obj->uart == UART_0) {
irq_n = UART0_IRQn;
}
NVIC_ClearPendingIRQ(irq_n);
NVIC_EnableIRQ(irq_n);
} else { // disable
UART_ITConfig(UART,(UART_IT_FLAG_RXI|UART_IT_FLAG_TXI),DISABLE);
NVIC_DisableIRQ(irq_n);
if (obj->uart == UART_1) {
irq_n = UART1_IRQn;
}
if (enable) {
if (irq == RxIrq) {
UART_ITConfig(UART,UART_IT_FLAG_RXI,ENABLE);
} else { // TxIrq
UART_ITConfig(UART,UART_IT_FLAG_TXI,ENABLE);
}
NVIC_ClearPendingIRQ(irq_n);
NVIC_EnableIRQ(irq_n);
} else { // disable
UART_ITConfig(UART,(UART_IT_FLAG_RXI|UART_IT_FLAG_TXI),DISABLE);
NVIC_DisableIRQ(irq_n);
}
}
}
@ -253,36 +317,74 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
int serial_getc(serial_t *obj)
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
// while(!serial_readable(obj));
while(uart->FR & UART_FR_RXFE);
if (obj->uart == UART_2)
{
S_UART_TypeDef *uart = (S_UART_TypeDef *)(obj->uart);
return (uart->DR & 0xFF);
while( (uart->STATE & S_UART_STATE_RX_BUF_FULL) == 0 );
return (uint16_t)(uart->DATA);
}
else
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
while(uart->FR & UART_FR_RXFE);
return (uart->DR & 0xFF);
}
}
void serial_putc(serial_t *obj, int c)
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
if (obj->uart == UART_2)
{
S_UART_TypeDef *uart = (S_UART_TypeDef *)(obj->uart);
uart->DR = (uint32_t)(c & (uint16_t)0xFF);
while(uart->FR & UART_FR_BUSY);
while(uart->STATE & S_UART_STATE_TX_BUF_FULL);
uart->DATA = (uint32_t)(c & (uint16_t)0xFF);
}
else
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
uart->DR = (uint32_t)(c & (uint16_t)0xFF);
while(uart->FR & UART_FR_BUSY);
}
}
int serial_readable(serial_t *obj)
{
int status;
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
// Check if data is received
status = ((uart->FR & UART_FR_RXFE) ? 0: 1);
if (obj->uart == UART_2)
{
S_UART_TypeDef *uart = (S_UART_TypeDef *)(obj->uart);
status = ((uart->STATE & S_UART_STATE_RX_BUF_FULL) ? 1 : 0);
}
else
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
// Check if data is received
status = ((uart->FR & UART_FR_RXFE) ? 0: 1);
}
return status;
}
int serial_writable(serial_t *obj)
{
int status;
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
// Check if data is transmitted
status = ((uart->FR & UART_FR_BUSY) ? 0: 1);
if (obj->uart == UART_2)
{
S_UART_TypeDef *uart = (S_UART_TypeDef *)(obj->uart);
status = ((uart->STATE & S_UART_STATE_TX_BUF_FULL) ? 0 : 1);
}
else
{
UART_TypeDef *uart = (UART_TypeDef *)(obj->uart);
// Check if data is transmitted
status = ((uart->FR & UART_FR_BUSY) ? 0: 1);
}
return status;
}

View File

@ -119,6 +119,7 @@ OFFICIAL_MBED_LIBRARY_BUILD = (
('MAX32600MBED', ('ARM', 'GCC_ARM', 'IAR')),
('WIZWIKI_W7500', ('ARM', 'uARM')),
('WIZWIKI_W7500P',('ARM', 'uARM')),
)

View File

@ -1585,6 +1585,14 @@ class WIZWIKI_W7500(Target):
self.default_toolchain = "ARM"
self.supported_form_factors = ["ARDUINO"]
class WIZWIKI_W7500P(Target):
def __init__(self):
Target.__init__(self)
self.core = "Cortex-M0"
self.extra_labels = ['WIZNET', 'W7500x', 'WIZwiki_W7500P']
self.supported_toolchains = ["uARM", "ARM"]
self.default_toolchain = "ARM"
self.supported_form_factors = ["ARDUINO"]
class SAMR21G18A(Target):
def __init__(self):
@ -1762,6 +1770,7 @@ TARGETS = [
### WIZnet ###
WIZWIKI_W7500(),
WIZWIKI_W7500P(),
### Atmel ###
SAMR21G18A(),