URL
https://opencores.org/ocsvn/de1_olpcl2294_system/de1_olpcl2294_system/trunk
Subversion Repositories de1_olpcl2294_system
Compare Revisions
- This comparison shows the changes necessary to convert path
/de1_olpcl2294_system/trunk/sw/ecos/debug
- from Rev 10 to Rev 8
- ↔ Reverse comparison
Rev 10 → Rev 8
/main.c
2,14 → 2,81
// |
// |
|
#include <stdio.h> |
#include <math.h> |
#include <stdlib.h> |
|
#include <cyg/kernel/kapi.h> |
|
#include "LPC22xx.h" |
#include "lib_dbg_sh.h" |
#include "oc_gpio.h" |
|
extern void dbg_sh(void); |
|
static cyg_interrupt int1; |
static cyg_handle_t int1_handle; |
|
|
int main(void) |
// |
// Interrupt service routine for interrupt 1. |
// |
cyg_uint32 interrupt_1_isr( |
cyg_vector_t vector, |
cyg_addrword_t data) |
{ |
// Block this interrupt from occurring until |
// the DSR completes. |
cyg_interrupt_mask( vector ); |
|
// disable and clear gpio b intr |
OC_GPIO_B_RGPIO_INTE &= 0x7fffffff; |
OC_GPIO_B_RGPIO_INTS &= 0x7fffffff; |
|
|
// Tell the processor that we have received |
// the interrupt. |
cyg_interrupt_acknowledge( vector ); |
|
// Tell the kernel that chained interrupt processing |
// is done and the DSR needs to be executed next. |
return( CYG_ISR_HANDLED | CYG_ISR_CALL_DSR ); |
} |
|
// |
// Deferred service routine for interrupt 1. |
// |
void interrupt_1_dsr( |
cyg_vector_t vector, |
cyg_ucount32 count, |
cyg_addrword_t data) |
{ |
|
hex_led_command( DE1_HEX_LED_INCREMENT, 0); |
|
OC_GPIO_B_RGPIO_INTE |= 0x80000000; |
|
// Allow this interrupt to occur again. |
cyg_interrupt_unmask( vector ); |
} |
|
|
/* now declare (and allocate space for) some kernel objects, |
like the two threads we will use */ |
cyg_thread thread_s[2]; /* space for two thread objects */ |
|
char stack[2][4096]; /* space for two 4K stacks */ |
|
/* now the handles for the threads */ |
cyg_handle_t dbg_shell_thread, simple_threadB; |
|
/* and now variables for the procedure which is the thread */ |
cyg_thread_entry_t dbg_shell; |
cyg_thread_entry_t simple_program; |
|
/* we install our own startup routine which sets up threads */ |
void cyg_user_start(void) |
{ |
// enable cs3 |
PINSEL2 = 0x0f814924; |
|
16,8 → 83,82
// configure BCFG3 |
*((unsigned int *)0xFFE0000C) = 0x20007de7; |
|
// reset FPGA |
*((unsigned int *)0x83300000) = 0x00000001; |
cyg_thread_delay(10); |
|
// configure gpio |
fled_init(0x00000003); |
hex_led_init(0x00); |
|
cyg_thread_create(4, dbg_shell, (cyg_addrword_t) 0, |
"DBG Shell", (void *) stack[0], 4096, |
&dbg_shell_thread, &thread_s[0]); |
|
cyg_thread_create(4, simple_program, (cyg_addrword_t) 1, |
"Thread B", (void *) stack[1], 4096, |
&simple_threadB, &thread_s[1]); |
|
cyg_thread_resume(dbg_shell_thread); |
cyg_thread_resume(simple_threadB); |
|
|
cyg_vector_t int1_vector = CYGNUM_HAL_INTERRUPT_EINT3; |
// cyg_priority_t int1_priority = CYGNUM_HAL_PRI_HIGH; |
cyg_priority_t int1_priority = 0; |
|
// |
// Create interrupt 1. |
// |
cyg_interrupt_create( |
int1_vector, |
int1_priority, |
0, |
&interrupt_1_isr, |
&interrupt_1_dsr, |
&int1_handle, |
&int1); |
|
// Attach the interrupt created to the vector. |
cyg_interrupt_attach( int1_handle ); |
|
// configure gpio b |
OC_GPIO_B_RGPIO_INTS &= 0x7fffffff; |
OC_GPIO_B_RGPIO_INTE = 0x80000000; |
OC_GPIO_B_RGPIO_CTRL = 0x00000001; |
|
// configure eint3 |
*((unsigned int *)0xE002C004) |= 0x20000000; |
|
|
// Unmask the interrupt we just configured. |
cyg_interrupt_unmask( int1_vector ); |
|
} |
|
/* this is a simple program which runs in a thread */ |
void dbg_shell(cyg_addrword_t data) |
{ |
int message = (int) data; |
|
printf("Beginning execution; thread data is %d\n", message); |
|
dbg_sh(); |
|
return( -1 ); |
} |
|
/* this is a simple program which runs in a thread */ |
void simple_program(cyg_addrword_t data) |
{ |
|
for (;;) { |
|
OC_GPIO_B_RGPIO_OUT ^= 0x00000001; |
// hex_led_command( DE1_HEX_LED_INCREMENT, 0); |
|
cyg_thread_delay(100); |
} |
|
} |
|
|
/Makefile
1,45 → 1,25
# Mostly written by Jonathan Larmour, Red Hat, Inc. |
# Reference to ecos.mak added by John Dallaway, eCosCentric Limited, 2003-01-20 |
# This file is in the public domain and may be used for any purpose |
|
# Usage: make INSTALL_DIR=/path/to/ecos/install |
|
# INSTALL_DIR=$$(INSTALL_DIR) # override on make command line |
# INSTALL_DIR = ../LPC2294_ram/install |
INSTALL_DIR = ../LPC2294_ram_no_net/install |
# INSTALL_DIR = ../ROM_slow/install |
# INSTALL_DIR = ../LPC2294_ram/LPC2294_ram_install |
INSTALL_DIR = ../LPC2294_ram/install |
|
OBJECT_FILES = main.o oc_gpio.o |
HEADER_FILES = lpc22xx.h lib_dbg_sh.h oc_gpio.h |
|
# main |
MAIN_PATH = . |
|
MAIN_OBJECT_FILES = $(MAIN_PATH)/main.o |
|
MAIN_HEADER_FILES = $(MAIN_PATH)/lpc22xx.h \ |
$(MAIN_PATH)/shell_cmds.h \ |
|
# debug shell |
DBG_SH_PATH = ../shell |
|
DBG_SH_OBJECT_FILES = $(DBG_SH_PATH)/parse.o \ |
$(DBG_SH_PATH)/mem_func.o \ |
$(DBG_SH_PATH)/memtest.o \ |
$(DBG_SH_PATH)/dbg_sh.o |
|
DBG_SH_HEADER_FILES = $(DBG_SH_PATH)/dbg_sh.h \ |
$(DBG_SH_PATH)/parse.h \ |
$(DBG_SH_PATH)/memtest.h |
|
|
OBJECT_FILES = $(DBG_SH_OBJECT_FILES) $(MAIN_OBJECT_FILES) |
HEADER_FILES = $(DBG_SH_HEADER_FILES) $(MAIN_HEADER_FILES) |
|
|
include $(INSTALL_DIR)/include/pkgconf/ecos.mak |
|
XCC = $(ECOS_COMMAND_PREFIX)gcc |
XAR = $(ECOS_COMMAND_PREFIX)ar |
XCXX = $(XCC) |
XLD = $(XCC) |
|
CFLAGS = -I$(INSTALL_DIR)/include -I $(MAIN_PATH)/ |
CFLAGS = -I$(INSTALL_DIR)/include |
CXXFLAGS = $(CFLAGS) |
LDFLAGS = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld |
|
65,5 → 45,5
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $< |
|
debug: $(OBJECT_FILES) $(HEADER_FILES) |
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $(OBJECT_FILES) |
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $(OBJECT_FILES) -static -L../shell -ldbg_sh |
|