From 243fec4450d3a3246f3f0d92751a95daef7c1503 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Tue, 27 Sep 2011 22:31:45 +0200 Subject: [PATCH] Update of system-less architecture and board support code to actual uLAN.sf.net version. USB<->CAN converter code has been successfully build by arm-elf-gcc version 4.4.4 from rtime. Signed-off-by: Pavel Pisa --- embedded/arch/arm/generic/Makefile | 2 +- embedded/arch/arm/generic/defines/Makefile | 2 +- .../arch/arm/generic/defines/Makefile.omk | 4 +- .../arch/arm/generic/defines/bbconf_info.h | 44 ++++ embedded/arch/arm/generic/defines/cpu_def.h | 196 ++++++++++++++---- embedded/arch/arm/generic/defines/hal_intr.h | 2 +- embedded/arch/arm/generic/defines/inttypes.h | 92 ++++++++ embedded/arch/arm/generic/defines/irq_arch.h | 5 + embedded/arch/arm/generic/defines/types.h | 78 +------ embedded/arch/arm/generic/libs/Makefile | 2 +- embedded/arch/arm/generic/libs/Makefile.omk | 2 +- .../arch/arm/generic/libs/iap_kvpb/Makefile | 14 ++ .../arm/generic/libs/iap_kvpb/Makefile.omk | 7 + .../arch/arm/generic/libs/iap_kvpb/iap_kvpb.c | 50 +++++ .../arm/generic/libs/iap_kvpb/lpciap_kvpb.h | 12 ++ embedded/arch/arm/generic/libs/misc/Makefile | 2 +- .../arch/arm/generic/libs/misc/Makefile.omk | 2 +- .../arch/arm/generic/libs/misc/bbconf_info.c | 38 ++++ .../arch/arm/generic/libs/misc/system_stub.c | 2 +- embedded/arch/arm/mach-lpc21xx/Makefile | 2 +- .../arch/arm/mach-lpc21xx/defines/LPC214x.h | 30 +-- .../arch/arm/mach-lpc21xx/defines/LPC21xx.h | 8 +- .../arch/arm/mach-lpc21xx/defines/LPC22xx.h | 4 +- .../arch/arm/mach-lpc21xx/defines/Makefile | 2 +- .../arch/arm/mach-lpc21xx/defines/armVIC.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcADC.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcEMC.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcGPIO.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcI2C.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcPIN.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcRTC.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcSCB.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcSPI.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcTMR.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcUART.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcUSB.h | 8 +- .../arch/arm/mach-lpc21xx/defines/lpcVIC.h | 4 +- .../arch/arm/mach-lpc21xx/defines/lpcWD.h | 4 +- embedded/arch/arm/mach-lpc21xx/libs/Makefile | 2 +- .../arch/arm/mach-lpc21xx/libs/hal/Makefile | 2 +- .../arm/mach-lpc21xx/libs/hal/Makefile.omk | 2 +- embedded/arch/arm/mach-lpc21xx/libs/hal/hal.c | 17 ++ .../arch/arm/mach-lpc21xx/libs/hal/hal_ints.h | 1 + .../mach-lpc21xx/libs/hal/hal_machperiph.c | 21 +- .../mach-lpc21xx/libs/hal/hal_machperiph.h | 6 +- .../mach-lpc21xx/libs/hal/irq_fnc_compat.S | 49 +++++ embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S | 33 +++ .../arch/arm/mach-lpc21xx/libs/hal/startup.S | 37 +++- .../arch/arm/mach-lpc21xx/libs/iap/Makefile | 2 +- .../arm/mach-lpc21xx/libs/iap/Makefile.omk | 11 +- embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c | 24 +-- .../arch/arm/mach-lpc21xx/libs/iap/iap_asm.S | 16 +- embedded/arch/generic/Makefile | 2 +- embedded/arch/generic/defines/Makefile | 2 +- embedded/arch/generic/defines/Makefile.omk | 2 +- embedded/arch/generic/defines/ads1x46.h | 56 +++++ embedded/arch/generic/defines/irq_generic.h | 101 +++++++++ embedded/arch/generic/defines/keyval_id_his.h | 1 + embedded/arch/generic/defines/lt_timer.h | 5 +- embedded/board/Makefile | 2 +- embedded/board/arm/Makefile | 2 +- embedded/board/arm/ul_usb1/Makefile | 2 +- embedded/board/arm/ul_usb1/defines/Makefile | 2 +- .../defines/system_def-ha-2x-relay-actuator.h | 193 +++++++++++++++++ .../ul_usb1/defines/system_def-ha-switch.h | 8 +- .../defines/system_def-hisc-garage-gate.h | 8 +- .../board/arm/ul_usb1/defines/system_def.h | 6 + embedded/board/arm/ul_usb1/libs/Makefile | 2 +- .../board/arm/ul_usb1/libs/bspbase/Makefile | 2 +- .../arm/ul_usb1/libs/bspbase/Makefile.omk | 1 + .../arm/ul_usb1/libs/bspbase/bsp0hwinit.c | 119 +++++++++-- .../board/arm/ul_usb1/libs/bspbase/uart.c | 4 +- .../board/arm/ul_usb1/libs/ldscripts/Makefile | 2 +- .../arm/ul_usb1/libs/ldscripts/lpc2103.ld-cfg | 1 + .../ul_usb1/libs/ldscripts/lpc2103.ld-flash | 22 +- .../arm/ul_usb1/libs/ldscripts/lpc2105.ld-app | 33 +-- .../ul_usb1/libs/ldscripts/lpc2105.ld-boot | 35 ++-- .../arm/ul_usb1/libs/ldscripts/lpc2105.ld-cfg | 6 +- .../ul_usb1/libs/ldscripts/lpc2105.ld-flash | 97 +++++++++ .../arm/ul_usb1/libs/ldscripts/lpc2148.ld-app | 30 ++- .../ul_usb1/libs/ldscripts/lpc2148.ld-boot | 32 ++- .../arm/ul_usb1/libs/ldscripts/lpc2148.ld-cfg | 2 + embedded/libs4c/i2c/Makefile | 2 +- embedded/libs4c/i2c/i2c_c552.c | 54 ++++- embedded/libs4c/i2c/i2c_drv.h | 2 + embedded/libs4c/kbd/Makefile | 2 +- embedded/libs4c/keyval/Makefile | 2 +- embedded/libs4c/keyval/keyval_id.h | 5 + embedded/libs4c/keyval/keyvalpb.c | 9 +- embedded/libs4c/usb/Makefile | 2 +- embedded/libs4c/usb/base/Makefile | 2 +- embedded/libs4c/usb/base/Makefile.omk | 6 +- embedded/libs4c/usb/base/usb.c | 81 +++----- embedded/libs4c/usb/base/usb/usb.h | 53 ++--- embedded/libs4c/usb/base/usb/usb_spec.h | 2 +- embedded/libs4c/usb/base/usbstdresp.c | 48 +++++ embedded/libs4c/usb/lpcusb/Makefile | 2 +- embedded/libs4c/usb/lpcusb/Makefile.omk | 2 +- embedded/libs4c/usb/lpcusb/lpc.c | 4 + embedded/libs4c/usb/lpcusb/lpcusb.c | 43 ++++ embedded/libs4c/usb/more/Makefile | 2 +- embedded/libs4c/usb/more/Makefile.omk | 2 +- embedded/libs4c/usb/pdiusb/Makefile | 2 +- embedded/libs4c/usb/pdiusb/Makefile.omk | 2 +- 104 files changed, 1561 insertions(+), 433 deletions(-) create mode 100644 embedded/arch/arm/generic/defines/bbconf_info.h create mode 100644 embedded/arch/arm/generic/defines/inttypes.h create mode 100644 embedded/arch/arm/generic/defines/irq_arch.h create mode 100644 embedded/arch/arm/generic/libs/iap_kvpb/Makefile create mode 100644 embedded/arch/arm/generic/libs/iap_kvpb/Makefile.omk create mode 100644 embedded/arch/arm/generic/libs/iap_kvpb/iap_kvpb.c create mode 100644 embedded/arch/arm/generic/libs/iap_kvpb/lpciap_kvpb.h create mode 100644 embedded/arch/arm/generic/libs/misc/bbconf_info.c create mode 100644 embedded/arch/arm/mach-lpc21xx/libs/hal/irq_fnc_compat.S create mode 100644 embedded/arch/generic/defines/ads1x46.h create mode 100644 embedded/arch/generic/defines/irq_generic.h create mode 100644 embedded/board/arm/ul_usb1/defines/system_def-ha-2x-relay-actuator.h create mode 100644 embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-flash create mode 100644 embedded/libs4c/usb/base/usbstdresp.c diff --git a/embedded/arch/arm/generic/Makefile b/embedded/arch/arm/generic/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/generic/Makefile +++ b/embedded/arch/arm/generic/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/generic/defines/Makefile b/embedded/arch/arm/generic/defines/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/generic/defines/Makefile +++ b/embedded/arch/arm/generic/defines/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/generic/defines/Makefile.omk b/embedded/arch/arm/generic/defines/Makefile.omk index 702e343..134ab99 100644 --- a/embedded/arch/arm/generic/defines/Makefile.omk +++ b/embedded/arch/arm/generic/defines/Makefile.omk @@ -1,3 +1,5 @@ # -*- makefile -*- -include_HEADERS = $(notdir $(wildcard $(SOURCES_DIR)/*.h)) +#include_HEADERS = $(notdir $(wildcard $(SOURCES_DIR)/*.h)) + +include_HEADERS = cpu_def.h hal_intr.h types.h bbconf_info.h diff --git a/embedded/arch/arm/generic/defines/bbconf_info.h b/embedded/arch/arm/generic/defines/bbconf_info.h new file mode 100644 index 0000000..7962816 --- /dev/null +++ b/embedded/arch/arm/generic/defines/bbconf_info.h @@ -0,0 +1,44 @@ +#ifndef _BBCONF_INFO_H_ +#define _BBCONF_INFO_H_ + +#if 1 /* Provide FLASH start directly */ + +/*FIXME: should not be provided directly*/ +#ifndef BBCONF_FLASH_START +#define BBCONF_FLASH_START 0x00000000 +#endif + +#else /* FLASH start taken from ldscript */ + +#ifndef __ASSEMBLY__ +extern char __flash_base; +#define BBCONF_FLASH_START ((unsigned long)(&__flash_base)) +#else /*__ASSEMBLY__*/ +.global __flash_base +#define BBCONF_FLASH_START __flash_base +#endif /*__ASSEMBLY__*/ + +#endif /* decission about flash start */ + +#define BBCONF_MAGIC_VAL 0xd1ab46d6 + +#define BBCONF_MAGIC_ADDR (BBCONF_FLASH_START+0x40) +#define BBCONF_PTPTR_ADDR (BBCONF_FLASH_START+0x44) + +#define BBCONF_PTTAG_END 0x00 +#define BBCONF_PTTAG_BBVER 0x01 +#define BBCONF_PTTAG_KVPB_START 0x12 +#define BBCONF_PTTAG_KVPB_BYCFI 0x13 +#define BBCONF_PTTAG_KVPB_SIZE 0x14 +#define BBCONF_PTTAG_WITH_BATPACK 0x15 + +#define BBCONF_PT_MAX_CNT 0x80 + + +#ifndef __ASSEMBLY__ + +int bbconf_get_param(unsigned long tag, unsigned long *pval); + +#endif /*__ASSEMBLY__*/ + +#endif /*_BBCONF_INFO_H_*/ diff --git a/embedded/arch/arm/generic/defines/cpu_def.h b/embedded/arch/arm/generic/defines/cpu_def.h index 8c7b97d..c03ff6e 100644 --- a/embedded/arch/arm/generic/defines/cpu_def.h +++ b/embedded/arch/arm/generic/defines/cpu_def.h @@ -47,31 +47,12 @@ struct undef_hook { int register_undef_hook(struct undef_hook *hook); -#define NR_IRQS 256 +/* Low level CPU specific IRQ handling code */ -typedef struct irq_handler { - void (*handler)(int, void *, struct pt_regs *); - unsigned long flags; - void *dev_id; - const char *devname; - struct irq_handler *next; - short vectno; -} irq_handler_t; +#if !defined(__thumb__) +/* Regular 32-bit ARM architecture */ -#define IRQH_ON_LIST 0x100 /* handler is used */ - -extern irq_handler_t *irq_array[NR_IRQS]; -extern void *irq_vec[NR_IRQS]; - -int add_irq_handler(int vectno,irq_handler_t *handler); - -int del_irq_handler(int vectno,irq_handler_t *handler); - -int test_irq_handler(int vectno,const irq_handler_t *handler); - -void irq_redirect2vector(int vectno,struct pt_regs *regs); - -/* IRQ handling code */ +#define WITH_IRQ_HANDLER_ARGS #define sti() \ ({ \ @@ -129,7 +110,7 @@ void irq_redirect2vector(int vectno,struct pt_regs *regs); /* FIQ handling code */ -#define fiq_sti() \ +#define fiq_sti() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ @@ -141,7 +122,7 @@ void irq_redirect2vector(int vectno,struct pt_regs *regs); : "memory", "cc"); \ }) -#define fiq_cli() \ +#define fiq_cli() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ @@ -153,7 +134,7 @@ void irq_redirect2vector(int vectno,struct pt_regs *regs); : "memory", "cc"); \ }) -#define fiq_save_and_cli(flags) \ +#define fiq_save_and_cli(flags) \ ({ \ unsigned long temp; \ (void) (&temp == &flags); \ @@ -166,6 +147,89 @@ void irq_redirect2vector(int vectno,struct pt_regs *regs); : "memory", "cc"); \ }) +#elif defined(__thumb2__) || defined (__ARM_ARCH_6M__) +/* ARM Cortex-M3 architecture */ + +/* The interrupts are not delivered with argument, + it is retrieved independent way - irq_arch_get_irqidx */ +#undef WITH_IRQ_HANDLER_ARGS + +/* Offset between first interrupt source and exception table base */ +#define IRQ_IRQIDX_OFFSET 16 + +#define sti() \ + ({ \ + __asm__ __volatile__( \ + "cpsie i @ sti\n" \ + : : : "memory", "cc"); \ + }) + +#define cli() \ + ({ \ + __asm__ __volatile__( \ + "cpsid i @ cli\n" \ + : : : "memory", "cc"); \ + }) + +#define save_and_cli(flags) \ + ({ \ + unsigned long temp; \ + (void) (&temp == &flags); \ + __asm__ __volatile__( \ + "mrs %0, primask @ save_and_cli\n" \ +" cpsid i\n" \ + : "=r" (flags) \ + : \ + : "memory", "cc"); \ + }) + +#define save_flags(flags) \ + ({ \ + unsigned long temp; \ + (void) (&temp == &flags); \ + __asm__ __volatile__( \ + "mrs %0, primask @ save_flags\n" \ + : "=r" (flags) \ + : \ + : "memory", "cc"); \ + }) + +#define restore_flags(flags) \ + ({ \ + __asm__ __volatile__( \ + "msr primask, %0 @ restore_flags\n" \ + : \ + : "r" (flags) \ + : "memory", "cc"); \ + }) + +#define irq_arch_get_irqidx() \ + ({ \ + unsigned long ipsr; \ + __asm__ __volatile__( \ + "mrs %0, ipsr @ get irqidx\n" \ + : "=r" (ipsr) ); \ + ipsr; \ + }) + +#else /*defined(__thumb__)*/ + +#define WITH_IRQ_HANDLER_ARGS +/* Regular ARM architecture in THUMB mode */ + +void irq_fnc_sti(void); +#define sti irq_fnc_sti +void irq_fnc_cli(void); +#define cli irq_fnc_cli +unsigned long irq_fnc_save_and_cli(void); +#define save_and_cli(_flags) ((_flags)=irq_fnc_save_and_cli()) +unsigned long irq_fnc_save_flags(void); +#define save_flags(_flags) ((_flags)=irq_fnc_save_flags()) +void irq_fnc_restore_flags(unsigned long flags); +#define restore_flags irq_fnc_restore_flags + +#endif /*defined(__thumb__)*/ + void __cpu_coherent_range(unsigned long start, unsigned long end); static inline void flush_icache_range(unsigned long start, unsigned long end) @@ -231,9 +295,20 @@ static inline int test_and_set_bit(int nr, volatile unsigned long *addr) return r&m?1:0; } +#if defined(__thumb2__) || defined (__ARM_ARCH_6M__) + +/* DMB, DSB, ISB */ + +#define __memory_barrier() \ + __asm__ __volatile__("dmb": : : "memory") + +#else /* old plain ARM architecture */ + #define __memory_barrier() \ __asm__ __volatile__("": : : "memory") +#endif + /*masked fields macros*/ #define __val2mfld(mask,val) (((mask)&~((mask)<<1))*(val)&(mask)) @@ -247,16 +322,63 @@ static inline unsigned char inb(unsigned int port) { return *(volatile unsigned char *)(port); } -#endif /* _ARM_CPU_DEF_H */ - - - - - - - - - - +#define _WITHIN_CPU_DEF_H +#include +#undef _WITHIN_CPU_DEF_H + +extern void **irq_context_table; +extern irq_handler_t **irq_handler_table; +extern unsigned int irq_table_size; + +/* Arithmetic functions */ +#if 0 +/* ARM v5E architecture - DSP extension */ + +#define sat_add_slsl(__x,__y) \ + __asm__ (" qadd %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y) : "cc"); \ + +#define sat_sub_slsl(__x,__y) \ + __asm__ (" qsub %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y) : "cc"); \ + +#elif !defined(__thumb__) +/* Regular 32-bit ARM architecture */ + +#define sat_add_slsl(__x,__y) \ + __asm__ (" adds %0,%2\n" \ + " eorvs %0,%2,#0x80000000\n" \ + " sbcvs %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y) : "cc"); \ + +#define sat_sub_slsl(__x,__y) \ + __asm__ (" subs %0,%2\n" \ + " eorvs %0,%2,#0x80000000\n" \ + " sbcvs %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y) : "cc"); \ + +#elif defined(__thumb2__) || defined (__ARM_ARCH_6M__) + +#define sat_add_slsl(__x,__y) \ + __asm__ (" adds %0,%2\n" \ + " itt vs\n" \ + " eorsvs %0,%3,%2\n" \ + " sbcsvs %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y), "r" (0x80000000): "cc"); \ + +#define sat_sub_slsl(__x,__y) \ + __asm__ (" subs %0,%2\n" \ + " itt vs\n" \ + " eorsvs %0,%3,%2\n" \ + " sbcsvs %0,%0,%2\n" \ + : "=r"(__x) \ + : "0" ((long)__x), "r" ((long)__y), "r" (0x80000000) : "cc"); \ +#endif +#endif /* _ARM_CPU_DEF_H */ diff --git a/embedded/arch/arm/generic/defines/hal_intr.h b/embedded/arch/arm/generic/defines/hal_intr.h index 68df921..0bc3f40 100644 --- a/embedded/arch/arm/generic/defines/hal_intr.h +++ b/embedded/arch/arm/generic/defines/hal_intr.h @@ -51,7 +51,7 @@ extern uint32_t hal_default_isr(int vector, uint32_t data); #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ { \ - if( hal_interrupt_handlers[_vector_] == (uint32_t)_isr_ ) \ + if( (hal_interrupt_handlers[_vector_] == (uint32_t)_isr_) || !(_isr_) ) \ { \ hal_interrupt_handlers[_vector_] = (uint32_t)hal_default_isr; \ hal_interrupt_data[_vector_] = 0; \ diff --git a/embedded/arch/arm/generic/defines/inttypes.h b/embedded/arch/arm/generic/defines/inttypes.h new file mode 100644 index 0000000..db695e4 --- /dev/null +++ b/embedded/arch/arm/generic/defines/inttypes.h @@ -0,0 +1,92 @@ +#ifndef __ASM_ARM_TYPES_H +#define __ASM_ARM_TYPES_H + +#ifndef __ASSEMBLY__ + +typedef unsigned short umode_t; + +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +typedef __signed__ long long __s64; +typedef unsigned long long __u64; +#endif + +#endif /* __ASSEMBLY__ */ + +#ifndef __BIT_TYPES_DEFINED__ +#define __BIT_TYPES_DEFINED__ + +typedef __u8 uint8_t; +typedef __s8 int8_t; +typedef __u16 uint16_t; +typedef __s16 int16_t; +typedef __u32 uint32_t; +typedef __s32 int32_t; + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +typedef __s64 int64_t; +typedef __u64 uint64_t; +#endif + +#endif /* !(__BIT_TYPES_DEFINED__) */ + +/* + * These aren't exported outside the kernel to avoid name space clashes + */ +#ifdef __KERNEL__ + +#define BITS_PER_LONG 32 + +#ifndef __ASSEMBLY__ + +typedef __s8 s8; +typedef __u8 u8; + +typedef __s16 s16; +typedef __u16 u16; + +typedef __s32 s32; +typedef __u32 u32; + +typedef __s64 s64; +typedef __s64 u64; + +/* Dma addresses are 32-bits wide. */ + +typedef u32 dma_addr_t; +typedef u32 dma64_addr_t; + +#endif /* __ASSEMBLY__ */ + +#endif /* __KERNEL__ */ + +/* Types for `void *' pointers. */ +#if __WORDSIZE == 64 +# ifndef __intptr_t_defined +typedef long int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned long int uintptr_t; +#else +# ifndef __intptr_t_defined +typedef int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned int uintptr_t; +#endif + +#endif + diff --git a/embedded/arch/arm/generic/defines/irq_arch.h b/embedded/arch/arm/generic/defines/irq_arch.h new file mode 100644 index 0000000..d621210 --- /dev/null +++ b/embedded/arch/arm/generic/defines/irq_arch.h @@ -0,0 +1,5 @@ +#ifndef _IRQ_ARCH_H +#define _IRQ_ARCH_H + + +#endif /*_IRQ_ARCH_H*/ \ No newline at end of file diff --git a/embedded/arch/arm/generic/defines/types.h b/embedded/arch/arm/generic/defines/types.h index e5d5a57..8049f02 100644 --- a/embedded/arch/arm/generic/defines/types.h +++ b/embedded/arch/arm/generic/defines/types.h @@ -1,77 +1 @@ -#ifndef __ASM_ARM_TYPES_H -#define __ASM_ARM_TYPES_H - -#ifndef __ASSEMBLY__ - -typedef unsigned short umode_t; - -/* - * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the - * header files exported to user space - */ - -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64; -typedef unsigned long long __u64; -#endif - -#endif /* __ASSEMBLY__ */ - -#ifndef __BIT_TYPES_DEFINED__ -#define __BIT_TYPES_DEFINED__ - -typedef __u8 uint8_t; -typedef __s8 int8_t; -typedef __u16 uint16_t; -typedef __s16 int16_t; -typedef __u32 uint32_t; -typedef __s32 int32_t; - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __s64 int64_t; -typedef __u64 uint64_t; -#endif - -#endif /* !(__BIT_TYPES_DEFINED__) */ - -/* - * These aren't exported outside the kernel to avoid name space clashes - */ -#ifdef __KERNEL__ - -#define BITS_PER_LONG 32 - -#ifndef __ASSEMBLY__ - -typedef __s8 s8; -typedef __u8 u8; - -typedef __s16 s16; -typedef __u16 u16; - -typedef __s32 s32; -typedef __u32 u32; - -typedef __s64 s64; -typedef __s64 u64; - -/* Dma addresses are 32-bits wide. */ - -typedef u32 dma_addr_t; -typedef u32 dma64_addr_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* __KERNEL__ */ - -#endif - +#include diff --git a/embedded/arch/arm/generic/libs/Makefile b/embedded/arch/arm/generic/libs/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/generic/libs/Makefile +++ b/embedded/arch/arm/generic/libs/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/generic/libs/Makefile.omk b/embedded/arch/arm/generic/libs/Makefile.omk index d833bce..0001b3e 100644 --- a/embedded/arch/arm/generic/libs/Makefile.omk +++ b/embedded/arch/arm/generic/libs/Makefile.omk @@ -1,3 +1,3 @@ # -*- makefile -*- -SUBDIRS = misc +SUBDIRS = misc iap_kvpb diff --git a/embedded/arch/arm/generic/libs/iap_kvpb/Makefile b/embedded/arch/arm/generic/libs/iap_kvpb/Makefile new file mode 100644 index 0000000..76b56fd --- /dev/null +++ b/embedded/arch/arm/generic/libs/iap_kvpb/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/embedded/arch/arm/generic/libs/iap_kvpb/Makefile.omk b/embedded/arch/arm/generic/libs/iap_kvpb/Makefile.omk new file mode 100644 index 0000000..fb9c753 --- /dev/null +++ b/embedded/arch/arm/generic/libs/iap_kvpb/Makefile.omk @@ -0,0 +1,7 @@ +# -*- makefile -*- + +ifeq ($(CONFIG_KEYVAL),y) +include_HEADERS = lpciap_kvpb.h +lib_LIBRARIES = lpciap_kvpb +lpciap_kvpb_SOURCES = iap_kvpb.c +endif diff --git a/embedded/arch/arm/generic/libs/iap_kvpb/iap_kvpb.c b/embedded/arch/arm/generic/libs/iap_kvpb/iap_kvpb.c new file mode 100644 index 0000000..268ec9e --- /dev/null +++ b/embedded/arch/arm/generic/libs/iap_kvpb/iap_kvpb.c @@ -0,0 +1,50 @@ +#include +#include +#include + +unsigned long lpciap_buff[ISP_RAM2FLASH_BLOCK_SIZE/4]; +char *lpciap_addr_base=NULL; + +#define ISP_RAM2FLASH_BLOCK_SIZE_MASK (ISP_RAM2FLASH_BLOCK_SIZE-1) + +int lpcisp_kvpb_erase(struct kvpb_block *store, void *base,int size) +{ + return lpcisp_erase(base, size); +} + +int lpcisp_kvpb_flush(struct kvpb_block *store) +{ + if (lpciap_addr_base==NULL) return -1; + lpcisp_write(lpciap_addr_base,lpciap_buff,ISP_RAM2FLASH_BLOCK_SIZE); + lpciap_addr_base=NULL; + return 0; +} + +int lpcisp_kvpb_copy(struct kvpb_block *store,void *des, const void *src, int len) +{ + char *addr_base,*addr_src=(char*)src; + int cp_len; + + while(len) { + addr_base=(char*)((unsigned long)des&~ISP_RAM2FLASH_BLOCK_SIZE_MASK); + cp_len=ISP_RAM2FLASH_BLOCK_SIZE-((unsigned long)des&ISP_RAM2FLASH_BLOCK_SIZE_MASK); + if (len + +extern unsigned long lpciap_buff[ISP_RAM2FLASH_BLOCK_SIZE/4]; + +int lpcisp_kvpb_erase(struct kvpb_block *store, void *base,int size); +int lpcisp_kvpb_flush(struct kvpb_block *store); +int lpcisp_kvpb_copy(struct kvpb_block *store,void *des, const void *src, int len); + +#endif /* _LPCIAP_KVPB_ */ diff --git a/embedded/arch/arm/generic/libs/misc/Makefile b/embedded/arch/arm/generic/libs/misc/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/generic/libs/misc/Makefile +++ b/embedded/arch/arm/generic/libs/misc/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/generic/libs/misc/Makefile.omk b/embedded/arch/arm/generic/libs/misc/Makefile.omk index b94858c..1201b22 100644 --- a/embedded/arch/arm/generic/libs/misc/Makefile.omk +++ b/embedded/arch/arm/generic/libs/misc/Makefile.omk @@ -4,6 +4,6 @@ include_HEADERS = system_stub.h lib_LIBRARIES = arch -arch_SOURCES = system_stub.c +arch_SOURCES = bbconf_info.c lib_obj_SOURCES = system_stub.c diff --git a/embedded/arch/arm/generic/libs/misc/bbconf_info.c b/embedded/arch/arm/generic/libs/misc/bbconf_info.c new file mode 100644 index 0000000..a0db0eb --- /dev/null +++ b/embedded/arch/arm/generic/libs/misc/bbconf_info.c @@ -0,0 +1,38 @@ +/******************************************************************* + Components for embedded applications builded for + laboratory and medical instruments firmware + + bbconf_info.c - boot block config parameters retrieval + + Copyright (C) 2001 by Pavel Pisa pisa@cmp.felk.cvut.cz + (C) 2002 by PiKRON Ltd. http://www.pikron.com + + *******************************************************************/ + +#include +#include + +int bbconf_get_param(unsigned long tag, unsigned long *pval) +{ + unsigned long *magic = (unsigned long *)BBCONF_MAGIC_ADDR; + unsigned long *pt_ptr = (unsigned long *)BBCONF_PTPTR_ADDR; + unsigned long *pt; + int cnt; + + if(*magic != BBCONF_MAGIC_VAL) + return -2; + + if(!(*pt_ptr) || !(*pt_ptr+1)) + return -2; + + pt = (unsigned long *)*pt_ptr; + + for(cnt = 0; (cnt < BBCONF_PT_MAX_CNT) && + (pt[0] != BBCONF_PTTAG_END); cnt++, pt += 2) { + if(pt[0] == tag) { + *pval=pt[1]; + return 1; + } + } + return -1; +} diff --git a/embedded/arch/arm/generic/libs/misc/system_stub.c b/embedded/arch/arm/generic/libs/misc/system_stub.c index 3ec804c..81faf43 100644 --- a/embedded/arch/arm/generic/libs/misc/system_stub.c +++ b/embedded/arch/arm/generic/libs/misc/system_stub.c @@ -308,7 +308,7 @@ int _swistat(int fd, struct stat *st) clock_t _clock(void); clock_t _clock(void) { - clock_t timeval; + clock_t timeval=0; return timeval; } diff --git a/embedded/arch/arm/mach-lpc21xx/Makefile b/embedded/arch/arm/mach-lpc21xx/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/mach-lpc21xx/Makefile +++ b/embedded/arch/arm/mach-lpc21xx/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/mach-lpc21xx/defines/LPC214x.h b/embedded/arch/arm/mach-lpc21xx/defines/LPC214x.h index d6a95d4..d1b428a 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/LPC214x.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/LPC214x.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: LPC214x.h,v $ - * $Revision: 1.4 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC214x ARM Processors * Copyright 2006 Pavel Pisa @@ -147,19 +147,19 @@ #define ADC1 ((adc214xRegs_t *)0xE0060000) -#define AD1CR ADC0->cr // Control Register -#define AD1GDR ADC0->gdr // Global Data Register -#define AD1GSR ADC0->gsr // Global Start Register -#define AD1INTEN ADC0->inten // Interrupt Enable Register -#define AD1DR0 ADC0->dr0 // Channel 0 Data Register -#define AD1DR1 ADC0->dr1 // Channel 1 Data Register -#define AD1DR2 ADC0->dr2 // Channel 2 Data Register -#define AD1DR3 ADC0->dr3 // Channel 3 Data Register -#define AD1DR4 ADC0->dr4 // Channel 4 Data Register -#define AD1DR5 ADC0->dr5 // Channel 5 Data Register -#define AD1DR6 ADC0->dr6 // Channel 6 Data Register -#define AD1DR7 ADC0->dr7 // Channel 7 Data Register -#define AD1STAT ADC0->stat // Status Register +#define AD1CR ADC1->cr // Control Register +#define AD1GDR ADC1->gdr // Global Data Register +#define AD1GSR ADC1->gsr // Global Start Register +#define AD1INTEN ADC1->inten // Interrupt Enable Register +#define AD1DR0 ADC1->dr0 // Channel 0 Data Register +#define AD1DR1 ADC1->dr1 // Channel 1 Data Register +#define AD1DR2 ADC1->dr2 // Channel 2 Data Register +#define AD1DR3 ADC1->dr3 // Channel 3 Data Register +#define AD1DR4 ADC1->dr4 // Channel 4 Data Register +#define AD1DR5 ADC1->dr5 // Channel 5 Data Register +#define AD1DR6 ADC1->dr6 // Channel 6 Data Register +#define AD1DR7 ADC1->dr7 // Channel 7 Data Register +#define AD1STAT ADC1->stat // Status Register #endif /*INC_LPC21xx_H*/ diff --git a/embedded/arch/arm/mach-lpc21xx/defines/LPC21xx.h b/embedded/arch/arm/mach-lpc21xx/defines/LPC21xx.h index c9d06c8..2f9ce77 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/LPC21xx.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/LPC21xx.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: LPC21xx.h,v $ - * $Revision: 1.3 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC21xx ARM Processors * Copyright 2004 R O SoftWare @@ -155,7 +155,8 @@ /////////////////////////////////////////////////////////////////////////////// // I2C Interface -#define I2C ((i2cRegs_t *)0xE001C000) +#define I2C0_BASE_ADDR 0xE001C000 +#define I2C ((i2cRegs_t *)I2C0_BASE_ADDR) // I2C Registers #define I2CONSET I2C->conset /* Control Set Register */ @@ -168,6 +169,7 @@ /////////////////////////////////////////////////////////////////////////////// // Serial Peripheral Interface 0 (SPI0) +#define SPI0_BASE_ADDR 0xE0020000 #define SPI0 ((spiRegs_t *)0xE0020000) // SPI0 Registers diff --git a/embedded/arch/arm/mach-lpc21xx/defines/LPC22xx.h b/embedded/arch/arm/mach-lpc21xx/defines/LPC22xx.h index c2d30e0..933d761 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/LPC22xx.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/LPC22xx.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: LPC22xx.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC22xx ARM Processors * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/Makefile b/embedded/arch/arm/mach-lpc21xx/defines/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/Makefile +++ b/embedded/arch/arm/mach-lpc21xx/defines/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/mach-lpc21xx/defines/armVIC.h b/embedded/arch/arm/mach-lpc21xx/defines/armVIC.h index 560a6b4..7d6dede 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/armVIC.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/armVIC.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: armVIC.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * This module provides the interface definitions for setting up and * controlling the various interrupt modes present on the ARM processor. diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcADC.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcADC.h index 11bc2a3..08eb8aa 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcADC.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcADC.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcADC.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcEMC.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcEMC.h index 2349617..7aec858 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcEMC.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcEMC.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcEMC.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcGPIO.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcGPIO.h index f4c78c9..dd38484 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcGPIO.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcGPIO.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcGPIO.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcI2C.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcI2C.h index e874abc..22e34af 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcI2C.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcI2C.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcI2C.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcPIN.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcPIN.h index df52b37..41b399e 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcPIN.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcPIN.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcPIN.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcRTC.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcRTC.h index f9d9c0b..c558d1d 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcRTC.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcRTC.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcRTC.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcSCB.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcSCB.h index 5612a94..a8bb0f7 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcSCB.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcSCB.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcSCB.h,v $ - * $Revision: 1.2 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcSPI.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcSPI.h index 9e6bd2b..eff1f5f 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcSPI.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcSPI.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcSPI.h,v $ - * $Revision: 1.2 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcTMR.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcTMR.h index cbc7bed..79a5c79 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcTMR.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcTMR.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcTMR.h,v $ - * $Revision: 1.2 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcUART.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcUART.h index 74e257a..194fc5b 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcUART.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcUART.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcUART.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcUSB.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcUSB.h index 3f924b5..aefea98 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcUSB.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcUSB.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcUSB.h,v $ - * $Revision: 1.3 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC214x USB enabled ARM Processors * Copyright 2006 Pavel Pisa @@ -12,6 +12,9 @@ * *****************************************************************************/ +#ifndef _lpcUSB_H +#define _lpcUSB_H + /* USBIntSt - USB Interrupt Status (R/W) */ #define USB_INT_REQ_LP (1<<0) /*Low priority interrupt line status (RO) */ #define USB_INT_REQ_HP (1<<1) /*High priority interrupt line status. (RO) */ @@ -227,3 +230,4 @@ typedef struct REG32 MODULE_ID; /* Module ID (RO) 00FC */ } usbRegs_t; +#endif /*_lpcUSB_H*/ diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcVIC.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcVIC.h index 28d12a6..5eed8ad 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcVIC.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcVIC.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcVIC.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/defines/lpcWD.h b/embedded/arch/arm/mach-lpc21xx/defines/lpcWD.h index 65f1d73..379fa44 100644 --- a/embedded/arch/arm/mach-lpc21xx/defines/lpcWD.h +++ b/embedded/arch/arm/mach-lpc21xx/defines/lpcWD.h @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: lpcWD.h,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * Header file for Philips LPC ARM Processors. * Copyright 2004 R O SoftWare diff --git a/embedded/arch/arm/mach-lpc21xx/libs/Makefile b/embedded/arch/arm/mach-lpc21xx/libs/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/Makefile +++ b/embedded/arch/arm/mach-lpc21xx/libs/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile b/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile.omk b/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile.omk index a7917db..359dd3a 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile.omk +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile.omk @@ -6,7 +6,7 @@ lib_LIBRARIES = mach_hal include_HEADERS = hal_ints.h hal_machperiph.h -mach_hal_SOURCES = hal.c hal_machperiph.c +mach_hal_SOURCES = hal.c hal_machperiph.c irq_fnc_compat.S diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal.c b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal.c index a983e95..4fd41ca 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal.c +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -174,7 +175,9 @@ uint32_t hal_default_isr(int vector, uint32_t data) uint32_t hal_interrupt_handlers[HAL_ISR_COUNT]={[0 ... HAL_ISR_COUNT-1]=(uint32_t)hal_default_isr}; uint32_t hal_interrupt_data[HAL_ISR_COUNT]; +#if !defined(__thumb__) void irq_handler_resolver(void) __attribute__ ((interrupt)); +#endif void irq_handler_resolver(void) { int v; @@ -187,3 +190,17 @@ void irq_handler_resolver(void) ((hal_isr)f)(v,d); hal_interrupt_acknowledge(v); } + +int request_irq(unsigned int irqnum, irq_handler_t handler, unsigned long flags, + const char *name, void *context) +{ + HAL_INTERRUPT_ATTACH(irqnum, handler, context); + HAL_INTERRUPT_UNMASK(irqnum); + return irqnum; +} + +void free_irq(unsigned int irqnum,void *ctx) +{ + HAL_INTERRUPT_MASK(irqnum); + HAL_INTERRUPT_DETACH(irqnum, NULL); +} diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_ints.h b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_ints.h index d218725..ce6e1f5 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_ints.h +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_ints.h @@ -23,6 +23,7 @@ #define HAL_INTERRUPT_EINT3 17 #define HAL_INTERRUPT_AD 18 #define HAL_INTERRUPT_I2C1 19 +#define HAL_INTERRUPT_AD1 21 #define HAL_ISR_MIN 0 #define HAL_ISR_MAX (31) diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.c b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.c index 599fdc3..6316bb9 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.c +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.c @@ -2,7 +2,9 @@ #include #include -void lpc_pll_on() +unsigned int system_frequency = FOSC; /*!< System Clock Frequency (Core Clock) */ + +void system_clock_init(void) { // set PLL multiplier & divisor. // values computed from config.h @@ -21,14 +23,17 @@ void lpc_pll_on() PLLCON = PLLCON_PLLE | PLLCON_PLLC; PLLFEED = 0xAA; // Make it happen. These two updates PLLFEED = 0x55; // MUST occur in sequence. -} -void lpc_pll_off() -{ - // disable PLL - PLLCON = 0; - PLLFEED = 0xAA; // Make it happen. These two updates - PLLFEED = 0x55; // MUST occur in sequence. + system_frequency=CCLK; + + // setup & enable the MAM + MAMCR = 0; + MAMTIM = MAMTIM_CYCLES; + MAMCR = MAMCR_FULL; + + // set the peripheral bus speed + // value computed from config.h + VPBDIV = VPBDIV_VALUE; // set the peripheral bus clock speed } void lpc_watchdog_feed() diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.h b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.h index 9f8c27f..9e790d8 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.h +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/hal_machperiph.h @@ -1,8 +1,10 @@ #ifndef _HAL_MACHPERIPH_H #define _HAL_MACHPERIPH_H -void lpc_pll_on(); -void lpc_pll_off(); +extern unsigned int system_frequency; /*!< System Clock Frequency (Core Clock) */ + +void system_clock_init(void); + void lpc_watchdog_init(int on,int timeout_ms); void lpc_watchdog_feed(); diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/irq_fnc_compat.S b/embedded/arch/arm/mach-lpc21xx/libs/hal/irq_fnc_compat.S new file mode 100644 index 0000000..0f8e2e8 --- /dev/null +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/irq_fnc_compat.S @@ -0,0 +1,49 @@ +.macro code32_fnc_header fncname + .global \fncname +#if defined(__thumb__) && !defined(__THUMB_INTERWORK__) + .code 16 + .align 0 + .thumb_func + .type \fncname, %function +\fncname: + bx pc + nop + .code 32 + .type _code_32_\fncname, %function +_code_32_\fncname: +#else + .code 32 + .align 0 + .type \fncname, %function +\fncname: +#endif + +.endm + + .text + + code32_fnc_header irq_fnc_sti + mrs r0, cpsr + bic r0, r0, #128 + msr cpsr_c, r0 + bx lr + + code32_fnc_header irq_fnc_cli + mrs r0, cpsr + orr r0, r0, #128 + msr cpsr_c, r0 + bx lr + + code32_fnc_header irq_fnc_save_and_cli + mrs r0, cpsr + orr r1, r0, #128 + msr cpsr_c, r1 + bx lr + + code32_fnc_header irq_fnc_save_flags + mrs r0, cpsr + bx lr + + code32_fnc_header irq_fnc_restore_flags + msr cpsr_c, r0 + bx lr diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S b/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S index ae9032a..84ded71 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S @@ -1,6 +1,12 @@ /* Setup vector table. Note that undf, pabt, dabt, fiq just execute a null loop. */ +#include + +.global __bbconf_magic_addr +.global __bbconf_ptptr_addr +.global __bbconf_pt_addr + .section .ivt,"ax" .code 32 .align 0 @@ -13,7 +19,11 @@ hal_vectors: LDR PC, Reset_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP /* Reserved Vector */ +#if !defined(__thumb__) LDR PC, IRQ_Addr +#else + B IRQ_Trampoline +#endif LDR PC, FIQ_Addr Reset_Addr: .word reset_handler @@ -25,10 +35,33 @@ DAbt_Addr: .word DAbt_Handler IRQ_Addr: .word irq_handler_resolver FIQ_Addr: .word FIQ_Handler +__bbconf_magic_addr: + .word BBCONF_MAGIC_VAL +__bbconf_ptptr_addr: + .word __bbconf_pt_addr + Undef_Handler: B Undef_Handler SWI_Handler: B SWI_Handler PAbt_Handler: B PAbt_Handler DAbt_Handler: B DAbt_Handler FIQ_Handler: B FIQ_Handler +#if defined(__thumb__) +IRQ_Trampoline: + sub lr, lr, #4 + push {r0, r1, r2, r3, r4, ip, lr} + ldr r1, IRQ_Addr + adr lr, IRQ_Trampoline_ret + tst r1,#1 + adrne lr, IRQ_Trampoline_ret_thumb+1 + bx r1 +IRQ_Trampoline_ret_thumb: + .code 16 + bx pc + nop + .code 32 +IRQ_Trampoline_ret: + ldm sp!, {r0, r1, r2, r3, r4, ip, pc}^ +#endif + .end diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/startup.S b/embedded/arch/arm/mach-lpc21xx/libs/hal/startup.S index 3201fbc..5e0f84f 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/startup.S +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/startup.S @@ -27,7 +27,7 @@ # Starupt Code must be linked first at Address at which it expects to run. .text -# .arm + .code 32 .global _stack // top of stack .global _startup @@ -109,18 +109,45 @@ LoopZI: CMP R1, R2 # Enter the C _setup_board code - ADR LR, __main_start LDR R0, =_setup_board CMP R0, #0 BEQ __main_start + ADR LR, __main_start +#if defined(__thumb__) + TST R0,#1 + ADRNE LR, __main_start_from_thumb + BX R0 + .code 16 +__main_start_from_thumb: + BX PC + NOP + .code 32 +#else BX R0 +#endif +__main_start: -__main_start: + LDR R0, =main ADR LR, __main_exit - LDR R0, =main +#if defined(__thumb__) + TST R0,#1 + ADRNE LR, __main_exit_from_thumb + BX R0 + .code 16 +__main_exit_from_thumb: + BX PC + NOP + .code 32 +#else + BX R0 +#endif +__main_exit: + LDR R0, =_mem_app_start + CMP R0, #0 + BEQ __main_loop BX R0 -__main_exit: B __main_exit +__main_loop: B __main_loop .size _start, . - _start .endfunc diff --git a/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile b/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile index b22a357..76b56fd 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile +++ b/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile.omk b/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile.omk index b0c47ee..6a5a1f5 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile.omk +++ b/embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile.omk @@ -1,14 +1,5 @@ # -*- makefile -*- +include_HEADERS = lpciap.h lib_LIBRARIES = lpciap lpciap_SOURCES = iap.c iap_asm.S - -include_HEADERS = lpciap.h - -ifeq ($(CONFIG_KEYVAL),y) -lib_LIBRARIES += lpciap_kvpb -lpciap_kvpb_SOURCES = iap_kvpb.c - -include_HEADERS += lpciap_kvpb.h - -endif diff --git a/embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c b/embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c index cc39097..23f7bc0 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c +++ b/embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c @@ -2,8 +2,6 @@ #include #include -#define IAP_PLL_FULL_SPEED 1 - #define CMD_SUCCESS 0 #define BUSY 11 @@ -12,8 +10,8 @@ #define IAP_CMD_ERASE 52 #define IAP_CMD_READ_PARTID 54 -uint32_t command[5]; -uint32_t result[2]; +unsigned int command[5]; +unsigned int result[2]; extern void iap_asm_entry (unsigned int *,unsigned int *); #define iap_entry iap_asm_entry @@ -46,7 +44,7 @@ int lpcisp_prepare_sectors(unsigned char start, unsigned char end) command[0] = IAP_CMD_PREPARE; command[1] = start; command[2] = end; - command[3] = FOSC/1000; + command[3] = system_frequency/1000; iap_entry(command, result); @@ -58,7 +56,7 @@ int lpcisp_erase_sectors(unsigned char start, unsigned char end) command[0] = IAP_CMD_ERASE; command[1] = start; command[2] = end; - command[3] = FOSC/1000; + command[3] = system_frequency/1000; iap_entry(command, result); @@ -76,18 +74,12 @@ int lpcisp_erase(void *addr, int len) if (end -#include -#include #include +#include +#include + //timers #ifndef LT_TIMER_VAR_LOC diff --git a/embedded/board/Makefile b/embedded/board/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/Makefile +++ b/embedded/board/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/Makefile b/embedded/board/arm/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/Makefile +++ b/embedded/board/arm/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/Makefile b/embedded/board/arm/ul_usb1/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/ul_usb1/Makefile +++ b/embedded/board/arm/ul_usb1/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/defines/Makefile b/embedded/board/arm/ul_usb1/defines/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/ul_usb1/defines/Makefile +++ b/embedded/board/arm/ul_usb1/defines/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/defines/system_def-ha-2x-relay-actuator.h b/embedded/board/arm/ul_usb1/defines/system_def-ha-2x-relay-actuator.h new file mode 100644 index 0000000..7e5b145 --- /dev/null +++ b/embedded/board/arm/ul_usb1/defines/system_def-ha-2x-relay-actuator.h @@ -0,0 +1,193 @@ +/******************************************************************* + Components for embedded applications builded for + laboratory and medical instruments firmware + + system_def.h - common cover for definition of hardware adresses, + registers, timing and other hardware dependant + parts of embedded hardware + + Copyright (C) 2001 by Pavel Pisa pisa@cmp.felk.cvut.cz + (C) 2002 by PiKRON Ltd. http://www.pikron.com + + *******************************************************************/ + +#ifndef _SYSTEM_DEF_H_ +#define _SYSTEM_DEF_H_ + +#include +#include +#include +#include + +#ifndef NULL +#define NULL 0 +#endif + +#define WITH_SFI_SEL + +#define VER_CODE(major,minor,patch) (major*0x10000+minor*0x100+patch) +/* Software version */ +#define SW_VER_ID "UL_HA_2X_RELAY_ACTUATOR" +#define SW_VER_MAJOR 0 +#define SW_VER_MINOR 2 +#define SW_VER_PATCH 0 +#define SW_VER_CODE VER_CODE(SW_VER_MAJOR,SW_VER_MINOR,SW_VER_PATCH) +/* Hardware version */ +#define HW_VER_ID "UL_HA_2X_RELAY_ACTUATOR" +#define HW_VER_MAJOR 1 +#define HW_VER_MINOR 0 +#define HW_VER_PATCH 0 +#define HW_VER_CODE VER_CODE(HW_VER_MAJOR,HW_VER_MINOR,HW_VER_PATCH) +/* Version of mechanical */ +#define MECH_VER_ID "UL_HA_2X_RELAY_ACTUATOR" +#define MECH_VER_MAJOR 0 +#define MECH_VER_MINOR 0 +#define MECH_VER_PATCH 0 +#define MECH_VER_CODE VER_CODE(MECH_VER_MAJOR,MECH_VER_MINOR,MECH_VER_PATCH) + + +// PLL setup values are computed within the LPC include file +// It relies upon the following defines +#define FOSC (14745600) // Master Oscillator Freq. +#define PLL_MUL (4) // PLL Multiplier +#define CCLK (FOSC * PLL_MUL) // CPU Clock Freq. + +// Pheripheral Bus Speed Divider +#define PBSD 1 // MUST BE 1, 2, or 4 +#define PCLK (CCLK / PBSD) // Pheripheal Bus Clock Freq. + +#define SYS_TIMER_HZ 1000 + +#ifndef BIT +#define BIT(n) (1 << (n)) +#endif + +// Port Bit Definitions & Macros: Description - initial conditions +#define RE2_BIT BIT(0) // used by UART0 +#define RE1_BIT BIT(1) // used by UART0 +#define LED5_BIT BIT(2) +#define LED4_BIT BIT(3) +#define LED3_BIT BIT(4) +#define LED2_BIT BIT(5) +#define LED1_BIT BIT(6) +#define P0_07_UNUSED_BIT BIT(7) +#define TXD1_BIT BIT(8) +#define RXD1_BIT BIT(9) // used by UART1 +#define RTS1_BIT BIT(10) // used by UART1 +#define CTS1_BIT BIT(11) // used by UART1 +#define DSR1_BIT BIT(12) // used by UART1 +#define P0_13_UNUSED_BIT BIT(13) +#define BOOT_BIT BIT(14) +#define IN1_BIT BIT(15) +#define IN2_BIT BIT(16) +#define P0_17_UNUSED_BIT BIT(17) +#define P0_18_UNUSED_BIT BIT(18) +#define AC_IN_BIT BIT(19) +#define P0_20_UNUSED_BIT BIT(20) +#define P0_21_UNUSED_BIT BIT(21) +#define P0_22_UNUSED_BIT BIT(22) +#define P0_23_UNUSED_BIT BIT(23) +#define P0_24_UNUSED_BIT BIT(24) +#define TEMP_BIT BIT(25) +#define P0_26_UNUSED_BIT BIT(26) +#define P0_27_UNUSED_BIT BIT(27) +#define P0_28_UNUSED_BIT BIT(28) +#define P0_29_UNUSED_BIT BIT(29) +#define P0_30_UNUSED_BIT BIT(30) +#define BUTTON_BIT BIT(31) + + +#define P0IO_INPUT_BITS (uint32_t) ( \ + BOOT_BIT | \ + IN1_BIT | \ + IN2_BIT | \ + TEMP_BIT | \ + BUTTON_BIT | \ + AC_IN_BIT | \ + 0 ) + +#define P0IO_ZERO_BITS (uint32_t) ( \ + RE2_BIT | \ + RE1_BIT | \ + LED1_BIT | \ + LED2_BIT | \ + LED3_BIT | \ + LED4_BIT | \ + LED5_BIT | \ + P0_07_UNUSED_BIT | \ + P0_13_UNUSED_BIT | \ + P0_17_UNUSED_BIT | \ + P0_18_UNUSED_BIT | \ + P0_20_UNUSED_BIT | \ + P0_21_UNUSED_BIT | \ + P0_22_UNUSED_BIT | \ + P0_23_UNUSED_BIT | \ + P0_24_UNUSED_BIT | \ + P0_26_UNUSED_BIT | \ + P0_27_UNUSED_BIT | \ + P0_28_UNUSED_BIT | \ + P0_29_UNUSED_BIT | \ + P0_30_UNUSED_BIT | \ + 0 ) + + + +#define P0IO_ONE_BITS (uint32_t) ( \ + BOOT_BIT | \ + 0 ) + +#define P0IO_OUTPUT_BITS (uint32_t) ( \ + P0IO_ZERO_BITS | \ + P0IO_ONE_BITS ) + + +/***************************************************************************/ +/* io functions */ +#define LED_GP LED1_BIT /* GENREAL PURPOSE LED */ +#define LED_ERR LED2_BIT + +/***************************************************************************/ +/* io functions */ +#define IN_PORT IO0 +#define OUT_PORT IO0 +#define LED_PORT IO0 + +#define CREATE_PORT_NAME_PIN(port) port##PIN +#define CREATE_PORT_NAME_CLR(port) port##CLR +#define CREATE_PORT_NAME_SET(port) port##SET + +#define GET_IN_PIN(port,in) ((CREATE_PORT_NAME_PIN(port) & in)?1:0) +#define SET_OUT_PIN(port,out) (CREATE_PORT_NAME_SET(port)=out) +#define CLR_OUT_PIN(port,out) (CREATE_PORT_NAME_CLR(port)=out) + +/***************************************************************************/ +/* watchdog */ +#define WATCHDOG_ENABLED +#define WATCHDOG_TIMEOUT_MS 1000 + +/***************************************************************************/ +/* uLan configuration */ +#ifdef UL_LOG_ENABLE + #undef UL_LOG_ENABLE +#endif + +#ifdef ULD_DEFAULT_BUFFER_SIZE + #undef ULD_DEFAULT_BUFFER_SIZE + #define ULD_DEFAULT_BUFFER_SIZE 0x0400 +#endif + +#define UL_DRV_SYSLESS_PORT 0xE0010000 +#define UL_DRV_SYSLESS_BAUD 19200 +#define UL_DRV_SYSLESS_IRQ HAL_INTERRUPT_UART1 +#define UL_DRV_SYSLESS_MY_ADR_DEFAULT 1 + + +#define watchdog_feed lpc_watchdog_feed +#define kvpb_erase lpcisp_kvpb_erase +#define kvpb_copy lpcisp_kvpb_copy +#define kvpb_flush lpcisp_kvpb_flush +#define KVPB_DEFAULT_FLAGS KVPB_DESC_DOUBLE|KVPB_DESC_CHUNKWO + +#define HAL_ARM_LPC2XXX_EXTINT_ERRATA + +#endif /* _SYSTEM_DEF_H_ */ diff --git a/embedded/board/arm/ul_usb1/defines/system_def-ha-switch.h b/embedded/board/arm/ul_usb1/defines/system_def-ha-switch.h index 80c3ba3..197c322 100644 --- a/embedded/board/arm/ul_usb1/defines/system_def-ha-switch.h +++ b/embedded/board/arm/ul_usb1/defines/system_def-ha-switch.h @@ -160,7 +160,7 @@ /***************************************************************************/ /* watchdog */ -//#define WATCHDOG_ENABLED +#define WATCHDOG_ENABLED #define WATCHDOG_TIMEOUT_MS 1000 /***************************************************************************/ @@ -188,4 +188,10 @@ #define HAL_ARM_LPC2XXX_EXTINT_ERRATA +/***************************************************************************/ +/* PBMaster configuration */ +#define PBM_8250_PORT 0xE0010000 +#define PBM_8250_BAUD 19200 +#define PBM_8250_IRQ HAL_INTERRUPT_UART1 + #endif /* _SYSTEM_DEF_H_ */ diff --git a/embedded/board/arm/ul_usb1/defines/system_def-hisc-garage-gate.h b/embedded/board/arm/ul_usb1/defines/system_def-hisc-garage-gate.h index 250d27b..506f7b7 100644 --- a/embedded/board/arm/ul_usb1/defines/system_def-hisc-garage-gate.h +++ b/embedded/board/arm/ul_usb1/defines/system_def-hisc-garage-gate.h @@ -111,14 +111,16 @@ #define P1_27_UNUSED_BIT BIT(27) // used by JTAG #define P1_28_UNUSED_BIT BIT(28) // used by JTAG #define P1_29_UNUSED_BIT BIT(29) // used by JTAG -#define P1_30_UNUSED_BIT BIT(30) // used by JTAG -#define P1_31_UNUSED_BIT BIT(31) // used by JTAG +#define P1_30_DOOR_CLOSE BIT(30) // used by JTAG +#define P1_31_DOOR_OPEN BIT(31) // used by JTAG #define P0IO_INPUT_BITS (uint32_t) ( \ BOOT_BIT | \ 0 ) #define P1IO_INPUT_BITS (uint32_t) ( \ + P1_30_DOOR_OPEN | \ + P1_31_DOOR_CLOSE | \ 0 ) #define P0IO_ZERO_BITS (uint32_t) ( \ @@ -160,8 +162,6 @@ P1_27_UNUSED_BIT | \ P1_28_UNUSED_BIT | \ P1_29_UNUSED_BIT | \ - P1_30_UNUSED_BIT | \ - P1_31_UNUSED_BIT | \ 0 ) diff --git a/embedded/board/arm/ul_usb1/defines/system_def.h b/embedded/board/arm/ul_usb1/defines/system_def.h index 4364199..6e77051 100644 --- a/embedded/board/arm/ul_usb1/defines/system_def.h +++ b/embedded/board/arm/ul_usb1/defines/system_def.h @@ -296,4 +296,10 @@ #define JTAGLEDRED (1<<13) // P0.13 Red LED (ERROR) #define JTAGLEDGREEN (1<<15) // P0.15 Green LED (OK) +/***************************************************************************/ +/* PBMaster configuration */ +#define PBM_8250_PORT 0xE0010000 +#define PBM_8250_BAUD 19200 +#define PBM_8250_IRQ HAL_INTERRUPT_UART1 + #endif /* _SYSTEM_DEF_H_ */ diff --git a/embedded/board/arm/ul_usb1/libs/Makefile b/embedded/board/arm/ul_usb1/libs/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/ul_usb1/libs/Makefile +++ b/embedded/board/arm/ul_usb1/libs/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/libs/bspbase/Makefile b/embedded/board/arm/ul_usb1/libs/bspbase/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/ul_usb1/libs/bspbase/Makefile +++ b/embedded/board/arm/ul_usb1/libs/bspbase/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/libs/bspbase/Makefile.omk b/embedded/board/arm/ul_usb1/libs/bspbase/Makefile.omk index 72f7977..ef31913 100644 --- a/embedded/board/arm/ul_usb1/libs/bspbase/Makefile.omk +++ b/embedded/board/arm/ul_usb1/libs/bspbase/Makefile.omk @@ -8,6 +8,7 @@ default_CONFIG += CONFIG_OC_UL_DRV_U450_VARPINS=x default_CONFIG += CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP=x default_CONFIG += CONFIG_OC_UL_DRV_U450_VARPINS_DIRNEG=x default_CONFIG += CONFIG_OC_I2C_DRV_SYSLESS=x +default_CONFIG += CONFIG_OC_PBM_DRV=x LOCAL_CONFIG_H = local_config.h diff --git a/embedded/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c b/embedded/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c index 468e172..90d0580 100644 --- a/embedded/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c +++ b/embedded/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c @@ -19,26 +19,27 @@ #ifdef CONFIG_OC_I2C_DRV_SYSLESS #include #endif /* CONFIG_OC_I2C_DRV_SYSLESS */ +#ifdef CONFIG_OC_PBM_DRV + #include + #include + #include +#endif /* CONFIG_OC_PBM_DRV */ #include #include /* timers */ volatile lt_ticks_t sys_timer_ticks; +#ifdef CONFIG_OC_I2C_DRV_SYSLESS +#define I2C_DRV_NA_MSTIMEOUT 10 +i2c_drv_t i2c_drv; +int i2c_drv_na_timer=0; +#endif /* CONFIG_OC_I2C_DRV_SYSLESS */ + static void sysInit(void) { - lpc_pll_off(); - lpc_pll_on(); - - // setup & enable the MAM - MAMCR = 0; - MAMTIM = MAMTIM_CYCLES; - MAMCR = MAMCR_FULL; - - // set the peripheral bus speed - // value computed from config.h - VPBDIV = VPBDIV_VALUE; // set the peripheral bus clock speed + system_clock_init(); // setup the parallel port pin IO0CLR = P0IO_ZERO_BITS; // clear the ZEROs output @@ -51,6 +52,8 @@ static void sysInit(void) IO1DIR = P1IO_OUTPUT_BITS; // set the output bit direction #endif + PINSEL1 = (PINSEL1 & 0x3FFFFFFF); + IO0CLR = LED1_BIT; // Indicate functional state on the LED1 } @@ -64,6 +67,24 @@ void timer0_isr(void) T0IR=TIR_MR0I; // Clear match0 interrupt #ifdef CONFIG_OC_UL_DRV_SYSLESS uld_jiffies++; + #endif + #ifdef CONFIG_OC_PBM_DRV + pbm_jiffies++; + #endif + #ifdef CONFIG_OC_I2C_DRV_SYSLESS + if (i2c_drv.flags&I2C_DRV_MS_INPR) { + if (i2c_drv.flags&I2C_DRV_NA) { + i2c_drv_na_timer++; + if (i2c_drv_na_timer>I2C_DRV_NA_MSTIMEOUT) { + if (i2c_drv.stroke_fnc) + i2c_drv.stroke_fnc(&i2c_drv); + i2c_drv_na_timer=0; + } + } else { + i2c_drv_na_timer=0; + } + i2c_drv.flags|=I2C_DRV_NA; + } #endif sys_timer_ticks++; } while (((int32_t)(T0MR0-T0TC))<0); @@ -157,7 +178,7 @@ int ul_iac_call_rdm(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_d if (mtype==0x00) { data->len=len; - data->buff=(unsigned char*)start; + data->buff=(char*)start; return UL_IAC_RC_FREEMSG; } return UL_IAC_RC_PROC; @@ -286,11 +307,11 @@ int uLanInit() if (udrv==NULL) return -1; - ul_drv_add_iac(udrv,UL_CMD_RDM,UL_IAC_OP_SND,ul_iac_call_rdm,NULL,0,0,NULL); - ul_drv_add_iac(udrv,UL_CMD_ERM,UL_IAC_OP_CALLBACK,ul_iac_call_erm,NULL,0,0,NULL); - ul_drv_add_iac(udrv,UL_CMD_WRM,UL_IAC_OP_REC,ul_iac_call_wrm,(char*)lpciap_buff,0,0,NULL); - ul_drv_add_iac(udrv,UL_CMD_DEB,UL_IAC_OP_CALLBACK,ul_iac_call_deb,NULL,0,0,NULL); - ul_drv_add_iac(udrv,UL_CMD_RES,UL_IAC_OP_CALLBACK,ul_iac_call_res,NULL,0,0,NULL); + ul_drv_add_iac(udrv,UL_CMD_RDM,UL_IAC_OP_SND,ul_iac_call_rdm,NULL,0,0,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_ERM,UL_IAC_OP_CALLBACK,ul_iac_call_erm,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_WRM,UL_IAC_OP_REC,ul_iac_call_wrm,(char*)lpciap_buff,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_DEB,UL_IAC_OP_CALLBACK,ul_iac_call_deb,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_RES,UL_IAC_OP_CALLBACK,ul_iac_call_res,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); return ul_drv_add_dev(udrv); } @@ -298,14 +319,18 @@ int uLanInit() #ifdef CONFIG_OC_I2C_DRV_SYSLESS -i2c_drv_t i2c_drv; - int i2cInit(void) { /* set io pins */ - PINSEL0 = (PINSEL0 & ~0x000000F0) | 0x00000050; /* I2C - SCL, SDA */ + #if (I2C_DRV_SYSLESS_IRQ==9) + PINSEL0 = (PINSEL0 & ~0x000000F0) | 0x00000050; /* I2C0 - SCL0, SDA0 */ + #elif (I2C_DRV_SYSLESS_IRQ==19) + PINSEL0 = (PINSEL0 & ~0x30C00000) | 0x30C00000; /* I2C1 - SCL1, SDA1 */ + #else + #error "wrong I2C pin maping!" + #endif if (i2c_drv_init(&i2c_drv, I2C_DRV_SYSLESS_PORT, @@ -318,6 +343,55 @@ i2cInit(void) #endif /*CONFIG_OC_I2C_DRV_SYSLESS*/ +#ifdef CONFIG_OC_PBM_DRV + +void pbm_drv_init() +{ + int rv = 0; + + /* set rs485 mode for UART1 */ + /* dsr(txd), cts(rxd), rts(rs485_dir), rxd, txd */ + PINSEL0 = (PINSEL0 & ~0xFFFF0000) | 0x01550000; + + PBMCHIP_INFO(PBMCHIP_DRV_DESCRIPTION ", " + PBMCHIP_DRV_VERSION ", " + PBMCHIP_DRV_COPYRIGHT "\n"); + + pbm_dev = pbm_alloc_dev(PBM_UART); + if (!pbm_dev) + PBM_PRINT("unable to allocate device\n"); + + PBM_LOCK_INIT(&pbm_dev->lock); + PBM_LOCK_INIT(&pbm_dev->irq_lock); + + pbm_dev->node_res = &pbm_8250_res; + pbm_8250_res.ioport = PBM_8250_PORT; + pbm_8250_res.irq = PBM_8250_IRQ; + PBMCHIP_INFO("port=0x%04x irq=%d\n", + pbm_8250_res.ioport, pbm_8250_res.irq); + + /* disable all interrupts */ + pbm_outb(pbm_dev, UART_IER, 0x00); + + /* get default parameters*/ + pbm_8250_get_params(pbm_dev, 0); + /* chip operations and registering to pbmcore */ + pbm_dev->chops = chops; + rv = pbm_register_chip(pbm_dev); + if (rv) + PBM_PRINT("unable to register chip\n"); + + rv = request_irq(pbm_8250_res.irq, pbm_8250_intr, 0, "pbm_8250", pbm_dev); + + pbm_8250_int_off_all(pbm_dev); + pbm_8250_int_on_all(pbm_dev); + + /* a hack to generate THRE interrupt on LPC2148 */ + pbm_outb(pbm_dev, UART_TX, 0x00); +} + +#endif /* CONFIG_OC_PBM_DRV */ + void _setup_board() { // initialize the system @@ -344,4 +418,9 @@ void _setup_board() #ifdef CONFIG_OC_I2C_DRV_SYSLESS i2cInit(); #endif /* CONFIG_OC_I2C_DRV_SYSLESS */ + + #ifdef CONFIG_OC_PBM_DRV + pbm_drv_init(); + #endif /* CONFIG_OC_PBM_DRV */ + } diff --git a/embedded/board/arm/ul_usb1/libs/bspbase/uart.c b/embedded/board/arm/ul_usb1/libs/bspbase/uart.c index 86982a7..b43d420 100644 --- a/embedded/board/arm/ul_usb1/libs/bspbase/uart.c +++ b/embedded/board/arm/ul_usb1/libs/bspbase/uart.c @@ -1,7 +1,7 @@ /****************************************************************************** * - * $RCSfile: uart.c,v $ - * $Revision: 1.1 $ + * $RCSfile$ + * $Revision$ * * This module provides interface routines to the LPC ARM UARTs. * Copyright 2004, R O SoftWare diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/Makefile b/embedded/board/arm/ul_usb1/libs/ldscripts/Makefile index b22a357..76b56fd 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/Makefile +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-cfg b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-cfg index a29dfc8..8352fba 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-cfg +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-cfg @@ -1,3 +1,4 @@ +PROVIDE( __bbconf_pt_addr = 0 ); /* Memory Definitions */ MEMORY diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-flash b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-flash index e1a20c6..6e09d5d 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-flash +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2103.ld-flash @@ -10,6 +10,7 @@ INCLUDE "lpc2103.ld-cfg" STARTUP(startup.o) PROVIDE (_setup_board = 0); +PROVIDE (_mem_app_start = 0); /* Section Definitions */ SECTIONS @@ -20,12 +21,13 @@ SECTIONS { . = ALIGN(4); *(.ivt) - *(.text) /* remaining code */ - *(.rodata) /* read-only data (constants) */ + *(.text .stub .text.* .gnu.linkonce.t.*) /* code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ *(.rodata*) *(.glue_7) *(.glue_7t) - _etext = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + _etext = . ; } > FLASH /* .data section which is used for initialized data */ @@ -35,8 +37,9 @@ SECTIONS { . = ALIGN(4); _data = .; - *(.data) - _edata = ALIGN( 4 ) ; + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; } > RAM /* .bss section which is used for uninitialized data */ @@ -45,11 +48,12 @@ SECTIONS . = ALIGN(4); __bss_start = . ; __bss_start__ = . ; - *(.bss) + *(.bss .bss.*) *(COMMON) - __bss_end__ = ALIGN( 4 ) ; - end = ALIGN( 4 ) ; - _end = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; } > RAM .stack : diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-app b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-app index 4998f11..a7368c8 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-app +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-app @@ -10,6 +10,7 @@ INCLUDE "lpc2105.ld-cfg" STARTUP(startup.o) PROVIDE (_setup_board = 0); +PROVIDE (_mem_app_start = 0); /* Section Definitions */ SECTIONS @@ -19,12 +20,16 @@ SECTIONS .text : { . = ALIGN(4); - *(.text) /* remaining code */ - *(.rodata) /* read-only data (constants) */ + *(.text) /* main code */ + *(.stub .text.* .gnu.linkonce.t.*) /* remaining code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ *(.rodata*) - *(.glue_7) *(.glue_7t) - _etext = ALIGN( 4 ) ; + *(.glue_7) + *(.vfp11_veneer) + *(.v4_bx) + . = ALIGN( 4 ) ; + _etext = . ; } > FLASHAPP .keyval : @@ -34,15 +39,18 @@ SECTIONS }> KEYVAL /* .data section which is used for initialized data */ -/* .data : AT (_etext) */ +/* .data : AT (_etext) +*/ .data : AT ( ADDR( .text ) + SIZEOF( .text ) ) { . = ALIGN(4); _data = .; - *(.ivt) - *(.data) - _edata = ALIGN( 4 ) ; + KEEP( *(.ivt) ) + KEEP( *(.ivt.stub) ) + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; } > RAM /* .bss section which is used for uninitialized data */ @@ -51,11 +59,12 @@ SECTIONS . = ALIGN(4); __bss_start = . ; __bss_start__ = . ; - *(.bss) + *(.bss .bss.*) *(COMMON) - __bss_end__ = ALIGN( 4 ) ; - end = ALIGN( 4 ) ; - _end = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; } > RAM .stack : diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-boot b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-boot index 5ddb822..907b910 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-boot +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-boot @@ -16,16 +16,24 @@ SECTIONS { /* first section is .text which is used for code */ + .ivt : + { + . = ALIGN(4); + KEEP( *(.ivt) ) + } > FLASHBOOT + .text : { . = ALIGN(4); - *(.ivt) - *(.text) /* remaining code */ - *(.rodata) /* read-only data (constants) */ + *(.text .stub .text.* .gnu.linkonce.t.*) /* code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ *(.rodata*) - *(.glue_7) *(.glue_7t) - _etext = ALIGN( 4 ) ; + *(.glue_7) + *(.vfp11_veneer) + *(.v4_bx) + . = ALIGN( 4 ) ; + _etext = . ; } > FLASHBOOT .app : @@ -40,14 +48,16 @@ SECTIONS }> KEYVAL /* .data section which is used for initialized data */ -/* .data : AT (_etext) */ +/* .data : AT (_etext) +*/ .data : AT ( ADDR( .text ) + SIZEOF( .text ) ) { . = ALIGN(4); _data = .; - *(.data) - _edata = ALIGN( 4 ) ; + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; } > RAM /* .bss section which is used for uninitialized data */ @@ -56,11 +66,12 @@ SECTIONS . = ALIGN(4); __bss_start = . ; __bss_start__ = . ; - *(.bss) + *(.bss .bss.*) *(COMMON) - __bss_end__ = ALIGN( 4 ) ; - end = ALIGN( 4 ) ; - _end = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; } > RAM .stack : diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-cfg b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-cfg index d5a9ba9..932a4e5 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-cfg +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-cfg @@ -1,12 +1,14 @@ KEYVAL_PAGE_LEN = 0x00002000; +PROVIDE( __bbconf_pt_addr = 0 ); + /* Memory Definitions */ MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rw) : ORIGIN = 0x40000000, LENGTH = 0x00003FE0 - STACK (rw) : ORIGIN = 0x40000000 + 0x00003FE0 - 4, LENGTH = 4 + RAM (rw) : ORIGIN = 0x40000000, LENGTH = 0x00007FE0 + STACK (rw) : ORIGIN = 0x40000000 + 0x00007FE0 - 4, LENGTH = 4 FLASHVEC (rx) : ORIGIN = 0x00000000, LENGTH = 0x00000020 FLASHBOOT (rx) : ORIGIN = 0x0000000, LENGTH = 0x0000A000 diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-flash b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-flash new file mode 100644 index 0000000..f522d4c --- /dev/null +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2105.ld-flash @@ -0,0 +1,97 @@ +/***********************************************************************/ +/* */ +/* ROM.ld: Linker Script File */ +/* */ +/***********************************************************************/ +ENTRY(_startup) + +INCLUDE "lpc2105.ld-cfg" + +STARTUP(startup.o) + +PROVIDE (_setup_board = 0); +PROVIDE (_mem_app_start = 0); + +/* Section Definitions */ +SECTIONS +{ + + /* first section is .text which is used for code */ + .text : + { + . = ALIGN(4); + *(.ivt) + *(.text .stub .text.* .gnu.linkonce.t.*) /* code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + . = ALIGN( 4 ) ; + _etext = . ; + } > FLASH + + /* .data section which is used for initialized data */ +/* .data : AT (_etext) */ + .data : + AT ( ADDR( .text ) + SIZEOF( .text ) ) + { + . = ALIGN(4); + _data = .; + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; + } > RAM + + /* .bss section which is used for uninitialized data */ + .bss (NOLOAD) : + { + . = ALIGN(4); + __bss_start = . ; + __bss_start__ = . ; + *(.bss .bss.*) + *(COMMON) + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; + } > RAM + + .stack : + { + _stack = .; + } > STACK + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-app b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-app index 767081f..2abb9f6 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-app +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-app @@ -10,6 +10,7 @@ INCLUDE "lpc2148.ld-cfg" STARTUP(startup.o) PROVIDE (_setup_board = 0); +PROVIDE (_mem_app_start = 0); /* Section Definitions */ SECTIONS @@ -19,12 +20,16 @@ SECTIONS .text : { . = ALIGN(4); - *(.text) /* remaining code */ - *(.rodata) /* read-only data (constants) */ + *(.text) /* main code */ + *(.stub .text.* .gnu.linkonce.t.*) /* remaining code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ *(.rodata*) - *(.glue_7) *(.glue_7t) - _etext = ALIGN( 4 ) ; + *(.glue_7) + *(.vfp11_veneer) + *(.v4_bx) + . = ALIGN( 4 ) ; + _etext = . ; } > FLASHAPP .keyval : @@ -40,9 +45,11 @@ SECTIONS { . = ALIGN(4); _data = .; - *(.ivt) - *(.data) - _edata = ALIGN( 4 ) ; + KEEP( *(.ivt) ) + KEEP( *(.ivt.stub) ) + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; } > RAM /* .bss section which is used for uninitialized data */ @@ -51,11 +58,12 @@ SECTIONS . = ALIGN(4); __bss_start = . ; __bss_start__ = . ; - *(.bss) + *(.bss .bss.*) *(COMMON) - __bss_end__ = ALIGN( 4 ) ; - end = ALIGN( 4 ) ; - _end = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; } > RAM .stack : diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-boot b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-boot index de00d81..4e57c84 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-boot +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-boot @@ -16,16 +16,24 @@ SECTIONS { /* first section is .text which is used for code */ + .ivt : + { + . = ALIGN(4); + KEEP( *(.ivt) ) + } > FLASHBOOT + .text : { . = ALIGN(4); - *(.ivt) - *(.text) /* remaining code */ - *(.rodata) /* read-only data (constants) */ + *(.text .stub .text.* .gnu.linkonce.t.*) /* code */ + *(.rodata .rodata.* .gnu.linkonce.r.*) /* read-only data */ *(.rodata*) - *(.glue_7) *(.glue_7t) - _etext = ALIGN( 4 ) ; + *(.glue_7) + *(.vfp11_veneer) + *(.v4_bx) + . = ALIGN( 4 ) ; + _etext = . ; } > FLASHBOOT .app : @@ -46,8 +54,9 @@ SECTIONS { . = ALIGN(4); _data = .; - *(.data) - _edata = ALIGN( 4 ) ; + *(.data .data.* .gnu.linkonce.d.*) + . = ALIGN( 4 ) ; + _edata = . ; } > RAM /* .bss section which is used for uninitialized data */ @@ -56,11 +65,12 @@ SECTIONS . = ALIGN(4); __bss_start = . ; __bss_start__ = . ; - *(.bss) + *(.bss .bss.*) *(COMMON) - __bss_end__ = ALIGN( 4 ) ; - end = ALIGN( 4 ) ; - _end = ALIGN( 4 ) ; + . = ALIGN( 4 ) ; + __bss_end__ = . ; + end = . ; + _end = . ; } > RAM .stack : diff --git a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-cfg b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-cfg index 7534208..b20b964 100644 --- a/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-cfg +++ b/embedded/board/arm/ul_usb1/libs/ldscripts/lpc2148.ld-cfg @@ -1,6 +1,8 @@ KEYVAL_PAGE_LEN = 0x00001000; +PROVIDE( __bbconf_pt_addr = 0 ); + /* Memory Definitions */ MEMORY { diff --git a/embedded/libs4c/i2c/Makefile b/embedded/libs4c/i2c/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/i2c/Makefile +++ b/embedded/libs4c/i2c/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/i2c/i2c_c552.c b/embedded/libs4c/i2c/i2c_c552.c index 7cede72..f38b931 100644 --- a/embedded/libs4c/i2c/i2c_c552.c +++ b/embedded/libs4c/i2c/i2c_c552.c @@ -23,15 +23,31 @@ #include -#include +#include +#include /* for PCLK on LPC17xx */ #include "i2c_drv_config.h" #include "i2c_drv.h" int c552_poll(i2c_drv_t *drv); -void c552_irq_handler(int intno, void *dev_id); +IRQ_HANDLER_FNC(c552_irq_handler); static int c552_ctrl_fnc(struct i2c_drv *drv, int ctrl, void *p); +int c552_stroke(i2c_drv_t *drv); // I2C Registers + +#ifdef __LPC17xx_H__ + +#define C552_CONSET(port) (((I2C_TypeDef *)(port))->I2CONSET) /* Control Set Register */ +#define C552_STAT(port) (((I2C_TypeDef *)(port))->I2STAT) /* Status Register */ +#define C552_DAT(port) (((I2C_TypeDef *)(port))->I2DAT) /* Data Register */ +#define C552_ADR(port) (((I2C_TypeDef *)(port))->I2ADR0) /* Slave Address Register */ +#define C552_SCLH(port) (((I2C_TypeDef *)(port))->I2SCLH) /* SCL Duty Cycle Register (high half word) */ +#define C552_SCLL(port) (((I2C_TypeDef *)(port))->I2SCLL) /* SCL Duty Cycle Register (low half word) */ +#define C552_CONCLR(port) (((I2C_TypeDef *)(port))->I2CONCLR) /* Control Clear Register */ +#define C552_MMCTRL(port) (((I2C_TypeDef *)(port))->MMCTRL) /* Monitor Mode Control */ + +#else /*__LPC17xx_H__*/ + #define C552_CONSET(port) (((i2cRegs_t *)(port))->conset) /* Control Set Register */ #define C552_STAT(port) (((i2cRegs_t *)(port))->stat) /* Status Register */ #define C552_DAT(port) (((i2cRegs_t *)(port))->dat) /* Data Register */ @@ -40,6 +56,8 @@ static int c552_ctrl_fnc(struct i2c_drv *drv, int ctrl, void *p); #define C552_SCLL(port) (((i2cRegs_t *)(port))->scll) /* SCL Duty Cycle Register (low half word) */ #define C552_CONCLR(port) (((i2cRegs_t *)(port))->conclr) /* Control Clear Register */ +#endif /*__LPC17xx_H__*/ + #define C552CON_AA (1 << 2) #define C552CON_SI (1 << 3) #define C552CON_STO (1 << 4) @@ -54,19 +72,23 @@ static int c552_ctrl_fnc(struct i2c_drv *drv, int ctrl, void *p); /***************************************************************************/ int c552_init_start(struct i2c_drv *drv, int port, int irq, int bitrate, int sladr) { + unsigned long clock_base; + + clock_base=PCLK/2; + C552_ADR(port)=sladr; - C552_SCLH(port)=((PCLK/2)/bitrate); //minimal value - C552_SCLL(port)=((PCLK/2)/bitrate); + C552_SCLH(port)=clock_base/bitrate; //minimal value + C552_SCLL(port)=clock_base/bitrate; drv->irq=irq; drv->port=port; drv->sfnc_act=NULL; drv->ctrl_fnc=c552_ctrl_fnc; drv->poll_fnc=c552_poll; + drv->stroke_fnc=c552_stroke; drv->flags=I2C_DRV_ON; /* todo - use atomic operation */ C552_CONCLR(port)=0x6C; /* clearing all flags */ C552_CONSET(port)=C552CON_EN; - HAL_INTERRUPT_ATTACH(irq,c552_irq_handler,drv); - HAL_INTERRUPT_UNMASK(irq); + request_irq(irq, c552_irq_handler, 0, "i2c", drv); return 0; } @@ -153,17 +175,31 @@ int c552_poll(i2c_drv_t *drv) return 0; } +int c552_stroke(i2c_drv_t *drv) +{ + int port; + volatile int d; + port=drv->port; + + C552_CONSET(port)=C552CON_STO; + C552_CONSET(port)=C552CON_STA; + for(d=0;d<10;d++); + C552_CONSET(port)=C552CON_STA; + return 0; +} + + int i2c_irq_seq_num=0; /***************************************************************************/ -void c552_irq_handler(int intno, void *dev_id) +IRQ_HANDLER_FNC(c552_irq_handler) { i2c_drv_t *drv; i2c_msg_head_t *msg; int port; int stat; - drv=(i2c_drv_t*)dev_id; + drv=(i2c_drv_t*)irq_handler_get_context(); if(drv->magic!=I2C_DRV_MAGIC) { #ifdef FOR_LINUX_KERNEL @@ -272,7 +308,7 @@ void c552_irq_handler(int intno, void *dev_id) /* received DATA sent ACK */ msg->rx_buf[msg->rx_len]= C552_DAT(port); msg->rx_len++; - if (msg->rx_rq==msg->rx_len) + if (msg->rx_len+1>=msg->rx_rq) C552_CONCLR(port)=C552CON_AAC; break; case 0x58: diff --git a/embedded/libs4c/i2c/i2c_drv.h b/embedded/libs4c/i2c/i2c_drv.h index 50725d1..f1cca85 100644 --- a/embedded/libs4c/i2c/i2c_drv.h +++ b/embedded/libs4c/i2c/i2c_drv.h @@ -73,6 +73,7 @@ typedef struct i2c_msg_head { typedef int (i2c_sfnc_t)(struct i2c_drv *drv, int code); typedef int (i2c_ctrl_fnc_t)(struct i2c_drv *drv, int ctrl, void *p); +typedef int (i2c_stroke_fnc_t)(struct i2c_drv *drv); #define I2C_DRV_ON 1 /* flag indicating that driver is ready to operate */ #define I2C_DRV_MS_INPR 2 /* master request in in progress */ @@ -96,6 +97,7 @@ typedef struct i2c_drv { void *failed; i2c_ctrl_fnc_t *ctrl_fnc; int (*poll_fnc)(struct i2c_drv *drv); + i2c_stroke_fnc_t *stroke_fnc; uint8_t sl_last_cmd; /* last received slave command */ } i2c_drv_t; diff --git a/embedded/libs4c/kbd/Makefile b/embedded/libs4c/kbd/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/kbd/Makefile +++ b/embedded/libs4c/kbd/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/keyval/Makefile b/embedded/libs4c/keyval/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/keyval/Makefile +++ b/embedded/libs4c/keyval/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/keyval/keyval_id.h b/embedded/libs4c/keyval/keyval_id.h index 60641d2..68b3d5a 100644 --- a/embedded/libs4c/keyval/keyval_id.h +++ b/embedded/libs4c/keyval/keyval_id.h @@ -6,6 +6,11 @@ #define KVPB_KEYID_ULAN_ADDR 0x10 #define KVPB_KEYID_ULAN_SN 0x11 +#define KVPB_KEYID_ULAN_PICO 0x15 +#define KVPB_KEYID_ULAN_POCO 0x16 +#define KVPB_KEYID_ULAN_PIOM 0x17 +#define KVPB_KEYID_ULAN_PEV2C 0x18 + #define KVPB_KEYID_HIS_ACCESS_CODE 0x20 #endif /* _KEYVAL_ID_H_ */ diff --git a/embedded/libs4c/keyval/keyvalpb.c b/embedded/libs4c/keyval/keyvalpb.c index e1f48b3..394a559 100644 --- a/embedded/libs4c/keyval/keyvalpb.c +++ b/embedded/libs4c/keyval/keyvalpb.c @@ -319,8 +319,12 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid) KVPB_DPTRTYPE kvpb_key_t *des,*src; p=kvpb_region_base(kvpb_block,0); - src=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1); des=(KVPB_DPTRTYPE kvpb_key_t*)p; + if(kvpb_block->flags&KVPB_DESC_DOUBLE) + src=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1); + else + src=(KVPB_DPTRTYPE kvpb_key_t*)p; + if((!mode && (kvpb_block->flags & KVPB_DESC_USE2ND))||(mode==2)) { if(!(kvpb_block->flags&KVPB_DESC_DOUBLE)) return -1; @@ -338,7 +342,8 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid) while(src) { int s=kvpb_chunk_align(kvpb_block,src->size+sizeof(kvpb_key_t)); if((*kvpb_keyid_valid(kvpb_block,src)!=KVPB_KEYID_INVALID) && (src->keyid!=keyid)) { - kvpb_block_copy(kvpb_block,des,src,s); + if(src!=des) + kvpb_block_copy(kvpb_block,des,src,s); if (kvpb_block->flags&KVPB_DESC_CHUNKWO) s+=kvpb_chunk_size(kvpb_block); des=(KVPB_DPTRTYPE kvpb_key_t*)((uint8_t*)des+s); } diff --git a/embedded/libs4c/usb/Makefile b/embedded/libs4c/usb/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/usb/Makefile +++ b/embedded/libs4c/usb/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/usb/base/Makefile b/embedded/libs4c/usb/base/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/usb/base/Makefile +++ b/embedded/libs4c/usb/base/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/usb/base/Makefile.omk b/embedded/libs4c/usb/base/Makefile.omk index b9d0731..ea54312 100644 --- a/embedded/libs4c/usb/base/Makefile.omk +++ b/embedded/libs4c/usb/base/Makefile.omk @@ -1,8 +1,8 @@ # -*- makefile -*- -default_CONFIG = CONFIG_USB_BASE=n +default_CONFIG = CONFIG_USB_BASE=x -ifeq ($(CONFIG_USB_BASE),y) +ifeq ($(CONFIG_USB_BASE),y) lib_LIBRARIES = usbbase #shared_LIBRARIES = @@ -11,7 +11,7 @@ lib_LIBRARIES = usbbase nobase_include_HEADERS = usb/usb.h usb/usb_spec.h usb/usb_srq.h usb/usbdebug.h usb/usb_devdes.h -usbbase_SOURCES = usb.c usbdebug.c +usbbase_SOURCES = usb.c usbdebug.c usbstdresp.c #lib_LOADLIBES = #bin_PROGRAMS = diff --git a/embedded/libs4c/usb/base/usb.c b/embedded/libs4c/usb/base/usb.c index 2061c8c..a45e8a1 100644 --- a/embedded/libs4c/usb/base/usb.c +++ b/embedded/libs4c/usb/base/usb.c @@ -17,12 +17,10 @@ #include #include -#include /* temporary include - standard control request responses */ - /* ep0 buffer */ - xdata unsigned char ep0_buffer[ MAX_CONTROL_XFER_DATA_SIZE]; + __xdata unsigned char ep0_buffer[ MAX_CONTROL_XFER_DATA_SIZE]; + - /* usb initialize */ int usb_init( usb_device_t *udev) { int ret = 0; @@ -45,7 +43,7 @@ return ret; } - + // connecting to USB by SoftConnect int usb_connect( usb_device_t *udev) { int ret = 0; @@ -63,7 +61,7 @@ return ret; } - + int usb_disconnect( usb_device_t *udev) { int ret = 0; usb_debug_print( DEBUG_LEVEL_LOW,("USB:OFF\n")); @@ -80,7 +78,7 @@ return ret; } - + void usb_stall( usb_ep_t *ep) { usb_debug_print( DEBUG_LEVEL_HIGH, ("USB:STALL %1d\n", ep->epnum)); if ( usb_udev_is_fnc(ep->udev,stall)) { @@ -88,7 +86,7 @@ } } - + int usb_check_events( usb_device_t *udev) { int ret = 0; @@ -122,7 +120,7 @@ ep0->ptr = pData; ep0->actual = 0; if ( ep0->size > len) ep0->size = len; - + /* Schedule TX processing for later execution */ ep0->flags = (ep0->flags & ~USB_STATE_MASK) | USB_STATE_TRANSMIT; udev->flags |= USB_FLAG_EVENT_TX0; @@ -136,14 +134,14 @@ usb_udev_ack_setup(ep->udev); } - + /************************************************************* *** Control endpoint0 responses *************************************************************/ int usb_control_response( usb_device_t *udev) { int ret = 0; usb_ep_t *ep0 = &(udev->ep0); - + /* response to interrupt BusReset */ if ( udev->flags & USB_FLAG_BUS_RESET) { udev->flags &= ~(USB_FLAG_BUS_RESET | USB_FLAG_SUSPEND); // usb_flags.bus_reset = 0; usb_flags.configured = 0; @@ -157,10 +155,10 @@ ret = 1; } - + /* response to interrupt SetupPacket execute response to standard device request or vendor request */ if ( udev->flags & USB_FLAG_SETUP) { - unsigned char type, req; + unsigned char type; USB_DEVICE_REQUEST *preq = &(udev->request); ep0->ptr = NULL; @@ -173,8 +171,8 @@ ep0->next_pkt_fnc = NULL; ep0->complete_fnc = NULL; #endif /*USB_WITH_CB_FNC*/ - - if ( usb_udev_read_endpoint(ep0, preq, sizeof( USB_DEVICE_REQUEST)) + + if ( usb_udev_read_endpoint(ep0, preq, sizeof( USB_DEVICE_REQUEST)) != sizeof( USB_DEVICE_REQUEST)) { usb_udev_stall( ep0); return -1; @@ -185,81 +183,52 @@ preq->wLength = bswap_16( preq->wLength); #endif usb_debug_print( DEBUG_LEVEL_MEDIUM,( "SePa:x%02X,x%02X,x%04X,x%04X,x%04X\n", preq->bmRequestType, preq->bRequest, preq->wValue, preq->wIndex, preq->wLength)); - + // acknowledge setup here if(usb_udev_is_fnc( udev, ack_control_setup)) { usb_udev_ack_control_setup(udev); } - + ep0->size = preq->wLength; if ((( preq->bmRequestType & USB_DATA_DIR_MASK) == USB_DATA_DIR_FROM_HOST) && preq->wLength) { ep0->ptr = ep0_buffer; ep0->flags = (ep0->flags & ~USB_STATE_MASK) | USB_STATE_RECEIVE; } - + type = preq->bmRequestType & USB_REQUEST_TYPE_MASK; - req = preq->bRequest & USB_REQUEST_MASK; if ( type == USB_STANDARD_REQUEST) { int ret = -1; - usb_debug_print( DEBUG_LEVEL_HIGH, ( "StdReq-%d\n", req)); -/* - if ( (udev->stdreq[ req]) != NULL) { - ret = udev->stdreq[ req]( udev); - } - if( ret < 0) - udev->ack_setup( udev); -*/ - switch( req) { - case USB_REQUEST_GET_STATUS: ret=usb_stdreq_get_status( udev); break; - case USB_REQUEST_CLEAR_FEATURE: ret=usb_stdreq_clear_feature( udev); break; - case USB_REQUEST_SET_FEATURE: ret=usb_stdreq_set_feature( udev); break; - case USB_REQUEST_SET_ADDRESS: ret=usb_stdreq_set_address( udev); break; - - case USB_REQUEST_GET_DESCRIPTOR: ret=usb_stdreq_get_descriptor( udev); break; -// case USB_REQUEST_SET_DESCRIPTOR: break; - case USB_REQUEST_GET_CONFIGURATION: ret=usb_stdreq_get_configuration( udev); break; - case USB_REQUEST_SET_CONFIGURATION: ret=usb_stdreq_set_configuration( udev); break; - case USB_REQUEST_GET_INTERFACE: ret=usb_stdreq_get_interface( udev); break; - case USB_REQUEST_SET_INTERFACE: ret=usb_stdreq_set_interface( udev); break; -// case USB_REQUEST_SYNC_FRAME: break; -// default: ret=-1; break; - } + #ifdef USB_WITH_CB_FNC + if ( udev->standard_fnc != NULL) + ret = udev->standard_fnc( udev); + else + #endif /*USB_WITH_CB_FNC*/ + ret = usb_standard_control_response( udev); if (ret<0) usb_udev_stall( ep0); } else { if ( type == USB_VENDOR_REQUEST) { -//putchar('#'); #ifdef USB_WITH_CB_FNC int ret = -1; -// if(USBVendorRequestCBFnc != NULL) -// ret = USBVendorRequestCBFnc(&usb_ep0, &dreq); if ( udev->vendor_fnc != NULL) ret = udev->vendor_fnc( udev); if ( ret < 0) usb_udev_stall( ep0); -// #else /*USB_WITH_CB_FNC*/ -// if ( USBVendorRequest(&dreq) == -1) -// udev->ack_setup( udev); #endif /*USB_WITH_CB_FNC*/ } else if ( type == USB_CLASS_REQUEST) { #ifdef USB_WITH_CB_FNC int ret = -1; -// if(USBClassRequestCBFnc != NULL) -// ret = USBClassRequestCBFnc(&usb_ep0, &dreq); if( udev->class_fnc != NULL) ret = udev->class_fnc( udev); if( ret < 0) usb_udev_stall( ep0); -// #else /*USB_WITH_CB_FNC*/ -// if ( USBClassRequest(&dreq) == -1) -// udev->ack_setup( udev); #endif /*USB_WITH_CB_FNC*/ } else usb_udev_stall( ep0); } ret = 1; } - + /* response to interrupt Ep0RxInt - receive data */ if ( udev->flags & USB_FLAG_EVENT_RX0) { int i; @@ -293,14 +262,14 @@ } /* response to interrupt Ep0TxInt */ - if ( udev->flags & USB_FLAG_EVENT_TX0) { + if ( udev->flags & USB_FLAG_EVENT_TX0) { short i = ep0->size - ep0->actual; udev->flags &= ~USB_FLAG_EVENT_TX0; //usb_debug_print( DEBUG_LEVEL_LOW, ("0S-%d(%d){%d}\n", ep0->state, ep0->size, ep0->max_packet_size)); usb_debug_print( DEBUG_LEVEL_MEDIUM, ( "EP0Tx:i=%d\n", i)); if (( ep0->flags & USB_STATE_MASK) == USB_STATE_TRANSMIT) { - + if(i > ep0->max_packet_size) i = ep0->max_packet_size; if ( i > 0 ) { diff --git a/embedded/libs4c/usb/base/usb/usb.h b/embedded/libs4c/usb/base/usb/usb.h index 4807b59..a81c8c2 100644 --- a/embedded/libs4c/usb/base/usb/usb.h +++ b/embedded/libs4c/usb/base/usb/usb.h @@ -10,12 +10,12 @@ #include "usb_spec.h" #include "usb_devdes.h" - + #if defined(SDCC) || defined(__KEIL__) || defined(__C51__) /*8051 special handling*/ - #define REENTRANT_SIGN reentrant + #define REENTRANT_SIGN __reentrant #else - #define xdata /*nothing*/ + #define __xdata /*nothing*/ #define REENTRANT_SIGN /*nothing*/ #endif @@ -32,9 +32,9 @@ #define MAX_CONTROL_XFER_DATA_SIZE 8 struct usb_ep_t; - + typedef void endfnc_t( struct usb_ep_t *ep) REENTRANT_SIGN; - + #define USB_NEXT_PKT_SEND 0 #define USB_NEXT_PKT_REC 1 @@ -58,23 +58,7 @@ #endif /*USB_WITH_CB_FNC*/ } usb_ep_t; - -/* Vendor & Class functions */ -/* - #ifdef USB_WITH_CB_FNC - typedef int usb_vendor_extension_fnc_t(usb_ep_t *ep, USB_DEVICE_REQUEST *dreq); - extern xdata usb_vendor_extension_fnc_t USBVendorRequestCBFnc; - - typedef int usb_class_extension_fnc_t(usb_ep_t *ep, USB_DEVICE_REQUEST *dreq); - extern xdata usb_class_extension_fnc_t USBClassRequestCBFnc; - #else //USB_WITH_CB_FNC - char USBVendorRequest( USB_DEVICE_REQUEST *dr); - char USBClassRequest( USB_DEVICE_REQUEST *dr); - #endif //USB_WITH_CB_FNC -*/ - - -/* USB device */ +/* USB device */ typedef struct usb_device_t { unsigned char id; /* device ID ??? */ unsigned char flags; /* usb device flags + endpoint0 events */ @@ -83,9 +67,11 @@ // unsigned char interface; /* current interface */ // unsigned char altinterface; /* current alternative interface */ - //int (stdreq[13])( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to array of standard request processing functions */ int (*vendor_fnc)( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to vendor request processing function */ int (*class_fnc)( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to class request processing function */ + int (*standard_fnc)( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to standard request processing function */ + + //int (stdreq[13])( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to array of standard request processing functions - not used in actual implementation */ const USB_DEVICE_DESCRIPTORS_TABLE *devdes_table; @@ -103,10 +89,10 @@ int (*read_endpoint)( usb_ep_t *ep, void *ptr, int size) REENTRANT_SIGN; int (*write_endpoint)( usb_ep_t *ep, const void *ptr, int size) REENTRANT_SIGN; #endif /*USB_WITH_UDEV_FNC*/ - + // USB_DEVICE_REQUEST *request; /* current usb request - only if there is a valid usb request in processing */ USB_DEVICE_REQUEST request; /* usb device request */ - + unsigned char cntep; /* number of device endpoints in ep array without EP0 */ usb_ep_t ep0; /* endpoint 0 */ usb_ep_t *ep; /* others endpoints in array */ @@ -126,10 +112,10 @@ #define USB_FLAG_SUSPEND 0x04 #define USB_FLAG_SETUP 0x08 // setup_packet #define USB_FLAG_REMOTE_WAKE 0x10 - + #define USB_FLAG_EVENT_RX0 0x40 #define USB_FLAG_EVENT_TX0 0x80 - + /* device functions - inline ??? */ @@ -147,22 +133,23 @@ /* check usb events(interrupts) */ int usb_check_events( usb_device_t *udev); /* response to standard constrol requests */ - int usb_control_response( usb_device_t *udev); + int usb_control_response( usb_device_t *udev); /* send control data */ void usb_send_control_data( usb_device_t *udev, unsigned char *pData, unsigned short len); void usb_set_control_endfnc( usb_device_t *udev, endfnc_t *efnc);// REENTRANT_SIGN; void usb_ack_setup( usb_ep_t *ep); - + /* Standard requests functions */ // typedef int (*usb_stdreq_fnc_t)( usb_device_t *udev) REENTRANT_SIGN; // extern xdata usb_stdreq_fnc_t usb_standard_requests[13]; - + +int usb_standard_control_response(usb_device_t *udev) REENTRANT_SIGN; #ifdef USB_WITH_UDEV_FNC #define usb_udev_is_fnc(_M_udev, _M_fnc) (_M_udev->_M_fnc) - + #define usb_udev_init(_M_udev) (_M_udev->init(_M_udev)) #define usb_udev_set_addr(_M_udev, _M_addr) (_M_udev->set_addr(_M_udev, _M_addr)) #define usb_udev_set_configuration(_M_udev, _M_iCfg) (_M_udev->set_configuration(_M_udev, _M_iCfg)) @@ -184,8 +171,8 @@ #else /*USB_WITH_UDEV_FNC*/ #define USB_PDI_DIRECT_FNC - #include "pdi.h" + #include "usb/pdi.h" #endif /*USB_WITH_UDEV_FNC*/ - + #endif diff --git a/embedded/libs4c/usb/base/usb/usb_spec.h b/embedded/libs4c/usb/base/usb/usb_spec.h index 7d6f87b..a5f0b80 100644 --- a/embedded/libs4c/usb/base/usb/usb_spec.h +++ b/embedded/libs4c/usb/base/usb/usb_spec.h @@ -199,7 +199,7 @@ struct _tag_usb_string_descriptor { uint8_t bLength; uint8_t bDescriptorType; - uint8_t *bString; + uint8_t bString[]; } PACKED; typedef struct _tag_usb_string_descriptor USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR; diff --git a/embedded/libs4c/usb/base/usbstdresp.c b/embedded/libs4c/usb/base/usbstdresp.c new file mode 100644 index 0000000..a4f4004 --- /dev/null +++ b/embedded/libs4c/usb/base/usbstdresp.c @@ -0,0 +1,48 @@ +/**************************************************************/ +/*** Module : USB module - header file ***/ +/*** Author : Roman Bartosinski (C) 28.04.2002 ***/ +/*** Modify : 08.08.2002 ***/ +/*** Rewrite: 05.10.2009 ***/ +/**************************************************************/ + +#include + +#include +#include + +#include /* standard control request responses */ + +/************************************************************* + *** Common standard control endpoint0 responses + *************************************************************/ + int usb_standard_control_response(usb_device_t *udev) REENTRANT_SIGN + { + unsigned char req; + int ret = -1; + USB_DEVICE_REQUEST *preq = &(udev->request); + + req = preq->bRequest & USB_REQUEST_MASK; + usb_debug_print( DEBUG_LEVEL_HIGH, ( "StdReq-%d\n", req)); +/* + if ( (udev->stdreq[ req]) != NULL) { + ret = udev->stdreq[ req]( udev); + } + if( ret < 0) + udev->ack_setup( udev); +*/ + switch( req) { + case USB_REQUEST_GET_STATUS: ret=usb_stdreq_get_status( udev); break; + case USB_REQUEST_CLEAR_FEATURE: ret=usb_stdreq_clear_feature( udev); break; + case USB_REQUEST_SET_FEATURE: ret=usb_stdreq_set_feature( udev); break; + case USB_REQUEST_SET_ADDRESS: ret=usb_stdreq_set_address( udev); break; + case USB_REQUEST_GET_DESCRIPTOR: ret=usb_stdreq_get_descriptor( udev); break; +// case USB_REQUEST_SET_DESCRIPTOR: break; + case USB_REQUEST_GET_CONFIGURATION: ret=usb_stdreq_get_configuration( udev); break; + case USB_REQUEST_SET_CONFIGURATION: ret=usb_stdreq_set_configuration( udev); break; + case USB_REQUEST_GET_INTERFACE: ret=usb_stdreq_get_interface( udev); break; + case USB_REQUEST_SET_INTERFACE: ret=usb_stdreq_set_interface( udev); break; +// case USB_REQUEST_SYNC_FRAME: break; +// default: ret=-1; break; + } + return ret; + } diff --git a/embedded/libs4c/usb/lpcusb/Makefile b/embedded/libs4c/usb/lpcusb/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/usb/lpcusb/Makefile +++ b/embedded/libs4c/usb/lpcusb/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/usb/lpcusb/Makefile.omk b/embedded/libs4c/usb/lpcusb/Makefile.omk index 00a4c72..86fc55a 100644 --- a/embedded/libs4c/usb/lpcusb/Makefile.omk +++ b/embedded/libs4c/usb/lpcusb/Makefile.omk @@ -1,6 +1,6 @@ # -*- makefile -*- -default_CONFIG = CONFIG_USB_LPCUSB=n +default_CONFIG = CONFIG_USB_LPCUSB=x ifeq ($(CONFIG_USB_LPCUSB),y) lib_LIBRARIES = lpcusb diff --git a/embedded/libs4c/usb/lpcusb/lpc.c b/embedded/libs4c/usb/lpcusb/lpc.c index 159c899..bace715 100644 --- a/embedded/libs4c/usb/lpcusb/lpc.c +++ b/embedded/libs4c/usb/lpcusb/lpc.c @@ -8,6 +8,10 @@ #include #include +#ifdef MACH_LPC17XX +#include +#endif + /* set device address */ int usb_lpc_set_addr( usb_device_t *udev, unsigned char addr) { lpc_usb_set_addr(addr); diff --git a/embedded/libs4c/usb/lpcusb/lpcusb.c b/embedded/libs4c/usb/lpcusb/lpcusb.c index 09b1eac..4041371 100644 --- a/embedded/libs4c/usb/lpcusb/lpcusb.c +++ b/embedded/libs4c/usb/lpcusb/lpcusb.c @@ -8,6 +8,23 @@ #include #include +#ifdef MACH_LPC17XX + #include + #include + #ifndef PINSEL1 + #define PINSEL1 (PINCON->PINSEL1) + #define PINSEL3 (PINCON->PINSEL3) + #define PINSEL4 (PINCON->PINSEL4) + #endif + #ifndef PCONP + #define PCONP (SC->PCONP) + #endif +#endif + +#ifndef USB_VBUS_PIN_USED +#define USB_VBUS_PIN_USED 1 +#endif + unsigned int lpc_ep2addr(unsigned int ep_num) { unsigned int val; @@ -103,6 +120,7 @@ void lpc_usb_reset(void) void lpc_usb_hw_init (void) { +#if defined(INC_LPC214x_H) || defined(MACH_LPC21XX) PINSEL1 &= ~0xC000C000; // PINSEL1 |= 0x40004000; /* Select USB Link, VBUS */ PINSEL1 |= 0x80000000; /* Select USB Link, VBUS */ @@ -122,6 +140,31 @@ void lpc_usb_hw_init (void) PLLFEED48 = 0x55; /* Feed Sequence 2 */ USBDevIntEn = USBDevInt_DEV_STAT; /* Enable Device Status Interrupt */ +#endif /* MACH_LPC21XX */ + +#if defined(MACH_LPC23XX) || defined(MACH_LPC17XX) + /** + ** ** ATTENTION ** + ** USB clock (48MHz) should be set up externally before calling this fn + ** by setting USBCLKCFG (eg. USBCLKCFG = 5 for f_cco=288MHz). + ** If some of the pins shared with USB device are to be used for + ** different purpose, following PINSELs must be changed after retutn + ** from this fn. + **/ + + /* set up USB pins */ + PINSEL1 = (PINSEL1 & ~(0x3<<26)) | (0x1<<26); /* USB_D+,- @ P0.29,30 */ + PINSEL4 = (PINSEL4 & ~(0x3<<18)) | (0x1<<18); /* USB_CONNECT @ P2.9 */ +#if USB_VBUS_PIN_USED + PINSEL3 = (PINSEL3 & ~(0x3<<28)) | (0x2<<28); /* Vbus @ P1.30 */ +#endif + /* switch USB power on */ + PCONP |= 1<<31; + /* switch USB internal clock switch on */ + USBClkCtrl = 0x12; + while ((USBClkSt & 0x12) != 0x12); + +#endif /* MACH_LPC23XX */ /* Partial Manual Reset since Automatic Bus Reset is not working */ lpc_usb_reset(); diff --git a/embedded/libs4c/usb/more/Makefile b/embedded/libs4c/usb/more/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/usb/more/Makefile +++ b/embedded/libs4c/usb/more/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/usb/more/Makefile.omk b/embedded/libs4c/usb/more/Makefile.omk index e90fb15..f2a1ec5 100644 --- a/embedded/libs4c/usb/more/Makefile.omk +++ b/embedded/libs4c/usb/more/Makefile.omk @@ -1,6 +1,6 @@ # -*- makefile -*- -default_CONFIG = CONFIG_USB_MORE=n +default_CONFIG = CONFIG_USB_MORE=x ifeq ($(CONFIG_USB_MORE),y) lib_LIBRARIES = usbmore diff --git a/embedded/libs4c/usb/pdiusb/Makefile b/embedded/libs4c/usb/pdiusb/Makefile index b22a357..76b56fd 100644 --- a/embedded/libs4c/usb/pdiusb/Makefile +++ b/embedded/libs4c/usb/pdiusb/Makefile @@ -7,7 +7,7 @@ endif ifeq ($(MAKERULES_DIR),) all : default .DEFAULT:: - @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" + @echo -e "\nThe Makefile.rules has not been found in this or parent directory\n" else include $(MAKERULES_DIR)/Makefile.rules endif diff --git a/embedded/libs4c/usb/pdiusb/Makefile.omk b/embedded/libs4c/usb/pdiusb/Makefile.omk index 40b9dfd..3802ebd 100644 --- a/embedded/libs4c/usb/pdiusb/Makefile.omk +++ b/embedded/libs4c/usb/pdiusb/Makefile.omk @@ -1,6 +1,6 @@ # -*- makefile -*- -default_CONFIG = CONFIG_USB_PDIUSB=n +default_CONFIG = CONFIG_USB_PDIUSB=x ifeq ($(CONFIG_USB_PDIUSB),y) lib_LIBRARIES = usbpdi -- 2.39.2