mirror of
https://github.com/kelvinlawson/atomthreads.git
synced 2026-03-11 14:53:15 +01:00
Cortex M port added
qemu_lm3s platform added
This commit is contained in:
12
platforms/qemu_integratorcp/README
Normal file
12
platforms/qemu_integratorcp/README
Normal file
@@ -0,0 +1,12 @@
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Library: Atomthreads QEMU ARM Integrator/CP (ARM926EJ-S) Platform.
|
||||
Author: Natie van Rooyen <natie@navaro.nl>
|
||||
License: BSD Revised
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
QEMU ARM Integrator/CP (ARM926EJ-S) Platform
|
||||
|
||||
The "qemu_integratorcp" platform contains sources for building a sample
|
||||
Atomthreads application for the ARM Integrator/CP (ARM926EJ-S) platform.
|
||||
@@ -29,14 +29,14 @@
|
||||
#ifndef __MODULES_H__
|
||||
#define __MODULES_H__
|
||||
|
||||
/*
|
||||
* Module definitions to use with the ARM Integrator/CP (ARM926EJ-S)
|
||||
*/
|
||||
|
||||
#include "atomport.h"
|
||||
|
||||
extern void dbg_format_msg (char *format, ...) ;
|
||||
|
||||
#define DBG_MESSAGE(fmt_str) { dbg_format_msg fmt_str ; }
|
||||
|
||||
|
||||
typedef volatile unsigned int REG_DWORD ;// Hardware register definition
|
||||
typedef volatile unsigned int REG_DWORD ;
|
||||
typedef volatile unsigned short REG_WORD ;
|
||||
typedef volatile unsigned char REG_BYTE ;
|
||||
|
||||
@@ -110,7 +110,7 @@ typedef struct ICP_PIC_S {
|
||||
|
||||
|
||||
|
||||
|
||||
/* module definitions */
|
||||
#define BOARD_BASE_ADDRESS_TIMER_0 0x13000000
|
||||
#define BOARD_BASE_ADDRESS_PIC 0x14000000
|
||||
|
||||
@@ -118,7 +118,11 @@ extern ICP_TIMER_T* const board_timer_0 ;
|
||||
extern ICP_PIC_T* const board_pic ;
|
||||
|
||||
|
||||
|
||||
/* Function prototypes */
|
||||
extern int low_level_init (void) ;
|
||||
extern void dbg_format_msg (char *format, ...) ;
|
||||
|
||||
#define DBG_MESSAGE(fmt_str) { dbg_format_msg fmt_str ; }
|
||||
|
||||
|
||||
#endif /* __MODULES_H__ */
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
.section .vectors, "x"
|
||||
|
||||
.global __interrupt_vector_table
|
||||
.global __irq_stack_top__
|
||||
.global __fiq_stack_top__
|
||||
.global __svc_stack_top__
|
||||
.extern __irq_stack_top__
|
||||
.extern __fiq_stack_top__
|
||||
.extern __svc_stack_top__
|
||||
|
||||
.global bsp_ints_enable
|
||||
.global bsp_ints_disable
|
||||
|
||||
@@ -5,7 +5,7 @@ ifeq ($(ATOMTHREADS),)
|
||||
ATOMTHREADS = $(shell pwd)/../../
|
||||
endif
|
||||
ifeq ($(TEST_NAME),)
|
||||
TEST_NAME = mutex1
|
||||
TEST_NAME = kern1
|
||||
endif
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ SRCS := $(SRCS) \
|
||||
main.c \
|
||||
$(ATOMTHREADS)/tests/$(TEST_NAME).c \
|
||||
|
||||
# startup_c.c \
|
||||
|
||||
ASMS := $(ASMS) \
|
||||
startup.S \
|
||||
|
||||
33
platforms/qemu_lm3s/README
Normal file
33
platforms/qemu_lm3s/README
Normal file
@@ -0,0 +1,33 @@
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Library: Atomthreads QEMU Stellaris LM3S6965 Platform.
|
||||
Author: Natie van Rooyen <natie@navaro.nl>
|
||||
License: BSD Revised
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
QEMU Stellaris LM3S6965 Platform
|
||||
|
||||
The "qemu_lm3s" platform contains sources for building a sample Atomthreads
|
||||
application for the Stellaris LM3S6965 platform.
|
||||
|
||||
|
||||
ISSUES:
|
||||
|
||||
There seems to be several problems for the QEMU Cortex M3 processor. The
|
||||
platform and port contains specific hacks to make it work on the QEMU 1.2.0
|
||||
release it was tested on. Also see the latest patches for QEMU.
|
||||
|
||||
Fixes implemented for the QEMU 1.2.0 release:
|
||||
|
||||
1. Install the patch http://patchwork.ozlabs.org/patch/180315/
|
||||
2. Use the PLATFORM_QEMU_LM3S_HACK define in the Makefile:
|
||||
|
||||
- Disabling interrupts on the processor does not work (verified).
|
||||
- Disabling interrupts of the Cortex M Sys Tick Interrupt does not
|
||||
work (verified).
|
||||
- NVIC Interrupt priorities not implemented correctly (not verified).
|
||||
|
||||
Because of the problems with the Sys Tick Interrupt the The Stellaris
|
||||
General-Purpose Timer Module (GPTM) was used to generate the system timer
|
||||
tick.
|
||||
@@ -43,7 +43,6 @@ static unsigned char idle_stack[IDLE_STACK_BYTE_SIZE] ;
|
||||
ATOM_TCB test_tcb ;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \b test_thread
|
||||
*
|
||||
@@ -78,7 +77,7 @@ main (void)
|
||||
int i = 0 ;
|
||||
|
||||
uint32_t failures ;
|
||||
printf ("atomthreads starting %s... \r\n", ATOMTHREADS_TEST) ;
|
||||
printf ("Atomthreads starting %s... \r\n", ATOMTHREADS_TEST) ;
|
||||
|
||||
atomOSInit(&idle_stack[IDLE_STACK_BYTE_SIZE - sizeof(unsigned int)], IDLE_STACK_BYTE_SIZE - sizeof(unsigned int)) ;
|
||||
atomThreadCreate ((ATOM_TCB *)&test_tcb, TEST_THREAD_PRIO, test_thread, 0, &test_stack[(TEST_STACK_BYTE_SIZE) - sizeof(unsigned int)], TEST_STACK_BYTE_SIZE - sizeof(unsigned int));
|
||||
|
||||
@@ -101,18 +101,15 @@ void
|
||||
__context_tick_handler (void)
|
||||
{
|
||||
|
||||
if (1) {
|
||||
atomIntEnter();
|
||||
atomIntEnter();
|
||||
|
||||
/* Call the OS system tick handler */
|
||||
atomTimerTick();
|
||||
/* Call the OS system tick handler */
|
||||
atomTimerTick();
|
||||
|
||||
board_gptm0->ICR |= GPTM_TIMER_INT_TATOIM ;
|
||||
board_gptm0->ICR |= GPTM_TIMER_INT_TATOIM ;
|
||||
|
||||
/* Call the interrupt exit routine */
|
||||
atomIntExit(TRUE);
|
||||
|
||||
}
|
||||
/* Call the interrupt exit routine */
|
||||
atomIntExit(TRUE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ typedef struct GPTM_TIMER_S {
|
||||
#define GPTM_TIMER_CTL_TBEVENT_MASK ((unsigned int)0x03 << 10) // GPTM TimerB Event Mode
|
||||
#define GPTM_TIMER_CTL_TBEVENT_PE ((unsigned int)0x00 << 10) // Positive edge
|
||||
#define GPTM_TIMER_CTL_TBEVENT_NE ((unsigned int)0x01 << 10) // Negative edge
|
||||
#define GPTM_TIMER_CTL_TBEVENT_NE ((unsigned int)0x03 << 10) // Both edges
|
||||
#define GPTM_TIMER_CTL_TBEVENT ((unsigned int)0x03 << 10) // Both edges
|
||||
#define GPTM_TIMER_CTL_TBSTALL ((unsigned int)0x01 << 9) // GPTM Timer B Stall Enable. 0 Timer B continues counting while the processor is halted by the debugger
|
||||
#define GPTM_TIMER_CTL_TBEN ((unsigned int)0x01 << 8) // GPTM TimerB Enable
|
||||
// --------
|
||||
@@ -96,7 +96,7 @@ typedef struct GPTM_TIMER_S {
|
||||
#define GPTM_TIMER_CTL_TAEVENT_MASK ((unsigned int)0x03 << 2) // GPTM TimerA Event Mode
|
||||
#define GPTM_TIMER_CTL_TAEVENT_PE ((unsigned int)0x00 << 2) // Positive edge
|
||||
#define GPTM_TIMER_CTL_TAEVENT_NE ((unsigned int)0x01 << 2) // Negative edge
|
||||
#define GPTM_TIMER_CTL_TAEVENT_NE ((unsigned int)0x03 << 2) // Both edges
|
||||
#define GPTM_TIMER_CTL_TAEVENT ((unsigned int)0x03 << 2) // Both edges
|
||||
#define GPTM_TIMER_CTL_TASTALL ((unsigned int)0x01 << 1) // GPTM Timer A Stall Enable. 0 Timer B continues counting while the processor is halted by the debugger
|
||||
#define GPTM_TIMER_CTL_TAEN ((unsigned int)0x01 << 0) // GPTM TimerA Enable
|
||||
// -------- GPTM_TIMER_IMR : (IMR Offset: 0x18) This register allows software to enable/disable GPTM controller-level interrupts. --------
|
||||
@@ -191,7 +191,7 @@ typedef struct SCB_S {
|
||||
} SCB_T, *PSCB_T ;
|
||||
|
||||
|
||||
|
||||
/* module definitions */
|
||||
#define BOARD_BASE_ADDRESS_SYSTICK 0xE000E000
|
||||
#define BOARD_BASE_ADDRESS_NVIC 0xE000E100
|
||||
#define BOARD_BASE_ADDRESS_SCB 0xE000ED00
|
||||
@@ -203,11 +203,11 @@ extern SCB_T* const board_scb ;
|
||||
extern GPTM_TIMER_T* const board_gptm0 ;
|
||||
|
||||
|
||||
|
||||
/* Function prototypes */
|
||||
extern int low_level_init (void) ;
|
||||
extern void dbg_format_msg (char *format, ...) ;
|
||||
extern void dbg_hard_fault_handler_c (unsigned int * hardfault_args) ;
|
||||
|
||||
#define DBG_MESSAGE(fmt_str) { dbg_format_msg fmt_str ; }
|
||||
#define DBG_MESSAGE(fmt_str) { dbg_format_msg fmt_str ; }
|
||||
|
||||
#endif /* __MODULES_H__ */
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
|
||||
|
||||
.global __interrupt_vector_table
|
||||
.global tick_Handler
|
||||
.global pendSV_Handler
|
||||
.global dbg_hard_fault_handler_c
|
||||
.extern archTickHandler
|
||||
.extern archPendSVHandler
|
||||
.extern dbg_hard_fault_handler_c
|
||||
|
||||
/**
|
||||
* \b __interrupt_vector_table
|
||||
@@ -58,7 +58,7 @@ __interrupt_vector_table:
|
||||
.long sys_Handler
|
||||
.long sys_Handler
|
||||
.long 0
|
||||
.long pendSV_Handler
|
||||
.long archPendSVHandler
|
||||
.long sys_Handler
|
||||
|
||||
/* External interrupts */
|
||||
@@ -81,7 +81,7 @@ __interrupt_vector_table:
|
||||
.long default_Handler // ADC Sequence 2
|
||||
.long default_Handler // ADC Sequence 3
|
||||
.long default_Handler // Watchdog timer
|
||||
.long tick_Handler // Timer 0 subtimer A
|
||||
.long archTickHandler // Timer 0 subtimer A
|
||||
.long default_Handler // Timer 0 subtimer B
|
||||
.long default_Handler // Timer 1 subtimer A
|
||||
.long default_Handler // Timer 1 subtimer B
|
||||
@@ -144,9 +144,9 @@ fault_Handler:
|
||||
.thumb
|
||||
|
||||
.global reset_Handler
|
||||
.global initialise_monitor_handles
|
||||
.global low_level_init
|
||||
.global main
|
||||
.extern initialise_monitor_handles
|
||||
.extern low_level_init
|
||||
.extern main
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,26 +1,4 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* hello_codered.ld - Code Red linker configuration file for hello.
|
||||
*
|
||||
* Copyright (c) 2006-2012 Texas Instruments Incorporated. All rights reserved.
|
||||
* Software License Agreement
|
||||
*
|
||||
* Texas Instruments (TI) is supplying this software for use solely and
|
||||
* exclusively on TI's microcontroller products. The software is owned by
|
||||
* TI and/or its suppliers, and is protected under applicable copyright
|
||||
* laws. You may not combine this software with "viral" open-source
|
||||
* software in order to form a larger program.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
|
||||
* NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
|
||||
* NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
|
||||
* CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
|
||||
* DAMAGES, FOR ANY REASON WHATSOEVER.
|
||||
*
|
||||
* This is part of revision 9107 of the EK-LM3S6965 Firmware Package.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
MEMORY
|
||||
{
|
||||
@@ -33,7 +11,7 @@ SECTIONS
|
||||
_vRamTop = 0x20000000 + 0x00010000;
|
||||
.text :
|
||||
{
|
||||
*(.vectors)
|
||||
KEEP(*(.vectors))
|
||||
*(.startup)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
@@ -86,12 +64,6 @@ SECTIONS
|
||||
_pvHeapStart = .;
|
||||
} > SRAM
|
||||
|
||||
/*
|
||||
* Note: (ref: M0000066)
|
||||
* Moving the stack down by 16 is to work around a GDB bug.
|
||||
* This space can be reclaimed for Production Builds.
|
||||
*/
|
||||
|
||||
_vStackTop = _vRamTop - 16;
|
||||
.stack _vStackTop :
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user