nuttx/arch/tricore/include/tc3xx/irq.h
chao an 996b9377a7 arch/tricore: add Infineon AURIX TriCore support
Add support for tricore TC397

1. Porting based on AURIX TC397 KIT_A2G_TC397_5V_TFT evaluation board

   https://www.infineon.com/cms/en/product/evaluation-boards/kit_a2g_tc397_5v_tft/

2. In order to avoid license and coding style issues, The chip-level code
   still uses the implementation of AURIX Development Studio SDK.
   The SDK package will be downloaded as a third-party package during compilation:

   https://github.com/anchao/tc397_sdk

3. Single core only, SMP implementation will be provided in the future.
4. Implemented the basic System Timer, ASCLIN UART driver.
5. Only the Tasking tool chain is supported (ctc/ltc, license maybe required)
6. 'ostest' can be completed on the TC397 development board.

How to run?

1. Setup the tasking toolchain and license

$ export TSK_LICENSE_KEY_SW160800=d22f-7473-ff5d-1b70
$ export TSK_LICENSE_SERVER=192.168.36.12:9090

2. Build nuttx ELF

$ ./tools/configure.sh tc397/nsh
$ make -j
...
artc I800: creating archive libc_fpu.a
LD: nuttx

3. Switch to windows PC, setup AURIX-studio to Debugger Launcher

4. Replace runing ELF to nuttx, and re-download ELF

Signed-off-by: chao an <anchao@lixiang.com>
2024-02-21 21:39:19 -08:00

141 lines
4.5 KiB
C

/****************************************************************************
* arch/tricore/include/tc3xx/irq.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/* This file should never be included directly but, rather,
* only indirectly through nuttx/irq.h
*/
#ifndef __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H
#define __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Pre-processor Prototypes
****************************************************************************/
/* Upper CSA */
#define REG_UPCXI 0
#define REG_PSW 1
#define REG_A10 2
#define REG_UA11 3
#define REG_D8 4
#define REG_D9 5
#define REG_D10 6
#define REG_D11 7
#define REG_A12 8
#define REG_A13 9
#define REG_A14 10
#define REG_A15 11
#define REG_D12 12
#define REG_D13 13
#define REG_D14 14
#define REG_D15 15
/* Lower CSA */
#define REG_LPCXI 0
#define REG_LA11 1
#define REG_A2 2
#define REG_A3 3
#define REG_D0 4
#define REG_D1 5
#define REG_D2 6
#define REG_D3 7
#define REG_A4 8
#define REG_A5 9
#define REG_A6 10
#define REG_A7 11
#define REG_D4 12
#define REG_D5 13
#define REG_D6 14
#define REG_D7 15
#define REG_RA REG_UA11
#define REG_SP REG_A10
#define REG_UPC REG_UA11
#define REG_LPC REG_LA11
#define TC_CONTEXT_REGS (16)
#define XCPTCONTEXT_REGS (TC_CONTEXT_REGS)
#define XCPTCONTEXT_SIZE (sizeof(void *) * TC_CONTEXT_REGS)
#define NR_IRQS (255)
/* PSW: Program Status Word Register */
#define PSW_CDE (1 << 7) /* Bits 7: Call Depth Count Enable */
#define PSW_IS (1 << 9) /* Bits 9: Interrupt Stack Control */
#define PSW_IO (10) /* Bits 10-11: Access Privilege Level Control (I/O Privilege) */
# define PSW_IO_USER0 (0 << PSW_IO)
# define PSW_IO_USER1 (1 << PSW_IO)
# define PSW_IO_SUPERVISOR (2 << PSW_IO)
/* PCXI: Previous Context Information and Pointer Register */
#define PCXI_UL (1 << 20) /* Bits 20: Upper or Lower Context Tag */
#define PCXI_PIE (1 << 21) /* Bits 21: Previous Interrupt Enable */
/* FCX: Free CSA List Head Pointer Register */
#define FCX_FCXO (0) /* Bits 0-15: FCX Offset Address */
#define FCX_FCXS (16) /* Bits 16-19: FCX Segment Address */
#define FCX_FCXO_MASK (0xffff << FCX_FCXO)
#define FCX_FCXS_MASK (0xf << FCX_FCXS)
#define FCX_FREE (FCX_FCXS_MASK | FCX_FCXO_MASK) /* Free CSA manipulation */
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
struct xcptcontext
{
/* The following function pointer is non-zero if there are pending signals
* to be processed.
*/
void *sigdeliver; /* Actual type is sig_deliver_t */
/* These are saved copies of the context used during
* signal processing.
*/
uintptr_t *saved_regs;
/* Register save area with XCPTCONTEXT_SIZE, only valid when:
* 1.The task isn't running or
* 2.The task is interrupted
* otherwise task is running, and regs contain the stale value.
*/
uintptr_t *regs;
};
#endif /* __ASSEMBLY__ */
#endif /* __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H */