/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * 2003 by Advanced Data Controls, Corp * * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation * によって公表されている GNU General Public License の Version 2 に記 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, * 利用と呼ぶ)することを無償で許諾する. * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー * スコード中に含まれていること. * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 * の無保証規定を掲載すること. * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ * と. * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 * 作権表示,この利用条件および下記の無保証規定を掲載すること. * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに * 報告すること. * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. * * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. * * @(#) $Id: integrator.h,v 1.3 2003/12/19 11:24:18 honda Exp $ */ #ifndef _INTEGRATOR_H_ #define _INTEGRATOR_H_ #ifndef _MACRO_ONLY #include #include #endif /* _MACRO_ONLY */ #include "armv4.h" #include "sys_config.h" #include "cpu_config.h" /* * Interrupt controller */ #define IRQ_BASE_REG 0x14000000 #define IRQ0_STATUS (IRQ_BASE_REG) #define IRQ0_RAWSTAT (IRQ_BASE_REG + 0x04) #define IRQ0_ENABLESET (IRQ_BASE_REG + 0x08) #define IRQ0_ENABLECLR (IRQ_BASE_REG + 0x0c) #define IRQ_EXTINT_BIT 0x15 #define IRQ_PCILBINT_BIT 0x14 #define IRQ_ENUMINT_BIT 0x13 #define IRQ_DEGINT_BIT 0x12 #define IRQ_LINT_BIT 0x11 #define IRQ_PCIINT3_BIT 0x10 #define IRQ_PCIINT2_BIT 0x0f #define IRQ_PCIINT1_BIT 0x0e #define IRQ_PCIINT0_BIT 0x0d #define IRQ_EXPINT3_BIT 0x0c #define IRQ_EXPINT2_BIT 0x0b #define IRQ_EXPINT1_BIT 0x0a #define IRQ_EXPINT0_BIT 0x09 #define IRQ_RTCINT_BIT 0x08 #define IRQ_TM2_BIT 0x07 #define IRQ_TM1_BIT 0x06 #define IRQ_TM0_BIT 0x05 #define IRQ_MOUSEINT_BIT 0x04 #define IRQ_KBDINT_BIT 0x03 #define IRQ_UART1_BIT 0x02 #define IRQ_UART0_BIT 0x01 #define IRQ_SOFTINT_BIT 0x00 #define IRQ_EXTINT (1 << IRQ_EXTINT_BIT) #define IRQ_PCILBIN (1 << IRQ_PCILBIN_BIT) #define IRQ_ENUMINT (1 << IRQ_ENUMINT_BIT) #define IRQ_DEGINT (1 << IRQ_DEGINT_BIT) #define IRQ_LINT (1 << IRQ_LINT_BIT) #define IRQ_PCIINT3 (1 << IRQ_PCIINT3_BIT) #define IRQ_PCIINT2 (1 << IRQ_PCIINT2_BIT) #define IRQ_PCIINT1 (1 << IRQ_PCIINT1_BIT) #define IRQ_PCIINT0 (1 << IRQ_PCIINT0_BIT) #define IRQ_EXPINT3 (1 << IRQ_EXPINT3_BIT) #define IRQ_EXPINT2 (1 << IRQ_EXPINT2_BIT) #define IRQ_EXPINT1 (1 << IRQ_EXPINT1_BIT) #define IRQ_EXPINT0 (1 << IRQ_EXPINT0_BIT) #define IRQ_RTCINT (1 << IRQ_RTCINT_BIT) #define IRQ_TM2 (1 << IRQ_TM2_BIT) #define IRQ_TM1 (1 << IRQ_TM1_BIT) #define IRQ_TM0 (1 << IRQ_TM0_BIT) #define IRQ_MOUSEINT (1 << IRQ_MOUSEINT_BIT) #define IRQ_KBDINT (1 << IRQ_KBDINT_BIT) #define IRQ_UART1 (1 << IRQ_UART1_BIT) #define IRQ_UART0 (1 << IRQ_UART0_BIT) #define IRQ_SOFTINT (1 << IRQ_SOFTINT_BIT) /*Interrupt Mask *Timer2は最高優先度をもつ ?? * */ #define MASK_IRQ_TM2 0x3FFFFF #define MASK_IRQ_TM1 0x3FFF7F #define MASK_IRQ_TM0 0x3FFF3F #define MASK_IRQ_MOUSEINT 0x3FFF1F #define MASK_IRQ_KBDINT 0x3FFF0F #define MASK_IRQ_UART1 0x3FFF07 #define MASK_IRQ_UART0 0x3FFF03 #define MASK_IRQ_SOFTINT 0x3FFF01 #define MASK_IRQ_EXTINT 0x3FFF00 #define MASK_IRQ_PCILBINT 0x1FFF00 #define MASK_IRQ_ENUMINT 0x0FFF00 #define MASK_IRQ_DEGINT 0x07FF00 #define MASK_IRQ_LINT 0x03FF00 #define MASK_IRQ_PCIINT3 0x01FF00 #define MASK_IRQ_PCIINT2 0x00FF00 #define MASK_IRQ_PCIINT1 0x007F00 #define MASK_IRQ_PCIINT0 0x003F00 #define MASK_IRQ_EXPINT3 0x001F00 #define MASK_IRQ_EXPINT2 0x000F00 #define MASK_IRQ_EXPINT1 0x000700 #define MASK_IRQ_EXPINT0 0x000300 #define MASK_IRQ_RTCINT 0x000100 #define INT_DISABLE_ALL 0x3FFFFF #define TIMER_BASE_REG 0x13000000 #define IRQ0_BASE_REG 0x14000000 #define UART0_BASE_REG 0x16000000 #define UART1_BASE_REG 0x17000000 /*UART0 Base Reg*/ #define UART0_DR (UART0_BASE_REG) #define UART0_RSR (UART0_BASE_REG + 0x04) #define UART0_ECR (UART0_BASE_REG + 0x04) #define UART0_LCRH (UART0_BASE_REG + 0x08) #define UART0_LCRM (UART0_BASE_REG + 0x0C) #define UART0_LCRL (UART0_BASE_REG + 0x10) #define UART0_CR (UART0_BASE_REG + 0x14) #define UART0_FR (UART0_BASE_REG + 0x18) #define UART0_IIR (UART0_BASE_REG + 0x1C) #define UART0_ICR (UART0_BASE_REG + 0x1C) /* *UART1 Control Registers */ #define UART1_DR (UART1_BASE_REG) #define UART1_RSR (UART1_BASE_REG + 0x04) #define UART1_ECR (UART1_BASE_REG + 0x04) #define UART1_LCRH (UART1_BASE_REG + 0x08) #define UART1_LCRM (UART1_BASE_REG + 0x0C) #define UART1_LCRL (UART1_BASE_REG + 0x10) #define UART1_CR (UART1_BASE_REG + 0x14) #define UART1_FR (UART1_BASE_REG + 0x18) #define UART1_IIR (UART1_BASE_REG + 0x1C) #define UART1_ICR (UART1_BASE_REG + 0x1C) /*Receive Error Constants:UARTx_RSR*/ #define URSR_OVERRUN 0x8 #define URSR_BREAK 0x4 #define URSR_PARITY 0x2 #define URSR_FRAMING 0x1 /*---Line Control Constants: UARTx_LCRH---*/ /*[6:5] Word Length*/ #define ULCRH_WLEN_8BIT 0x60 #define ULCRH_WLEN_7BIT 0x40 #define ULCRH_WLEN_6BIT 0x20 #define ULCRH_WLEN_5BIT 0x00 /*[4] FIFO*/ #define ULCRH_FEN 0x10 /*[3] Stop Bit*/ #define ULCRH_STP2 0x08 /*[2] Even Parity Select*/ #define ULCRH_EPS 0x04 /*[1] Parity Enable*/ #define ULCRH_PEN 0x02 /*[0] Send Break*/ #define ULCRH_BRK 0x01 /*--------------------------------------*/ /*Line Control Constants: UARTx_LCRM*/ /*[7:0] Baud Rate*/ #define ULCRM_460800 0x00 #define ULCRL_460800 0x01 #define ULCRM_230400 0x00 #define ULCRL_230400 0x03 #define ULCRM_115200 0x00 #define ULCRL_115200 0x07 #define ULCRM_76800 0x00 #define ULCRL_76800 0x0B #define ULCRM_57600 0x00 #define ULCRL_57600 0x0F #define ULCRM_38400 0x0 #define ULCRL_38400 0x17 #define ULCRM_19200 0x00 #define ULCRL_19200 0x2F #define ULCRM_14400 0x00 #define ULCRL_14400 0x3F #define ULCRM_9600 0x0 #define ULCRL_9600 0x5F #define ULCRM_2400 0x00 #define ULCRL_2400 0x7F #define ULCRM_1200 0x00 #define ULCRL_1200 0xFF /*Control Register Constants: UARTx_CR*/ /*[7] Loop Back Enable*/ #define UCR_LBE 0x80 /*[6] Receive Timeout Interrupt Enable*/ #define UCR_RTIE 0x40 /*[5] Transmit Interrupt Enable*/ #define UCR_TIE 0x20 /*[4] Receive Interrupt Enable*/ #define UCR_RIE 0x10 /*[3] Modem Status Interrupt Enable*/ #define UCR_MSIE 0x08 /*[0] UART Enable*/ #define UCR_UARTEN 0x01 /*Flag Register Constants UARTx_FR*/ /*[7] Transmit FIFO Empty*/ #define UFR_TXFE 0x80 /*[6] Receive FIFO Full*/ #define UFR_RXFF 0x40 /*[5] Transmit FIFO Full*/ #define UFR_TXFF 0x20 /*[4] Receive FIFO Empty*/ #define UFR_RXFE 0x10 /*[3] UART Busy*/ #define UFR_BUSY 0x08 /*[2] Data Carrier Detect*/ #define UFR_DCD 0x04 /*[1] Data Set Ready*/ #define UFR_DSR 0x02 /*[0] Clear To Send*/ #define UFR_CTS 0x01 /*Interrupt Identifier Constants: UARTx_IIR*/ /*[3] Receive Timeout Interrupt Status*/ #define IIR_TRIS 0x08 /*[2] Transmit Interrupt Status*/ #define IIR_TIS 0x04 /*[1] Receive Interrupt Status*/ #define IIR_RIS 0x02 /*[0] Modem Interrupt Status*/ #define IIR_MIS 0x01 #ifndef _MACRO_ONLY /* * 内蔵UART用 簡易SIOドライバ */ /* * カーネル起動時用の初期化(sys_putcを使用するため) */ extern void uart_init(void); /* * シリアルI/Oポート初期化ブロック */ typedef struct sio_port_initialization_block { VP uart_data; VP uart_control; VP linectrl_lo; VP linectrl_mid; VP linectrl_hi; VP int_identifier; VP flag_register; VW irq_bit; } SIOPINIB; /* * シリアルI/Oポート管理ブロックの定義 */ typedef struct sio_port_control_block { const SIOPINIB *siopinib; /* シリアルI/Oポート初期化ブロック */ VP_INT exinf; /* 拡張情報 */ BOOL openflag; /* オープン済みフラグ */ BOOL sendflag; /* 送信割込みイネーブルフラグ */ BOOL getready; /* 文字を受信した状態 */ BOOL putready; /* 文字を送信できる状態 */ }SIOPCB; /* * コールバックルーチンの識別番号 */ #define SIO_ERDY_SND 1u /* 送信可能コールバック */ #define SIO_ERDY_RCV 2u /* 受信通知コールバック */ /* * オンチップのUARTからのポーリング出力 */ extern void uart_putc(char c); /* * SIOドライバの初期化ルーチン */ extern void uart_initialize(void); /* * オープンしているポートがあるか? */ extern BOOL uart_openflag(void); /* * シリアルI/Oポートのオープン */ extern SIOPCB *uart_opn_por(ID siopid, VP_INT exinf); /* * シリアルI/Oポートのクローズ */ extern void uart_cls_por(SIOPCB *siopcb); /* * シリアルI/Oポートへの文字送信 */ extern BOOL uart_snd_chr(SIOPCB *siopcb, char c); /* * シリアルI/Oポートからの文字受信 */ extern INT uart_rcv_chr(SIOPCB *siopcb); /* * シリアルI/Oポートからのコールバックの許可 */ extern void uart_ena_cbr(SIOPCB *siopcb, UINT cbrtn); /* * シリアルI/Oポートからのコールバックの禁止 */ extern void uart_dis_cbr(SIOPCB *siopcb, UINT cbrtn); /* * SIOの割込みサービスルーチン */ extern void uart_in_isr(void); extern void uart_out_isr(void); /* * シリアルI/Oポートからの送信可能コールバック */ extern void uart_ierdy_snd(VP_INT exinf); /* * シリアルI/Oポートからの受信通知コールバック */ extern void uart_ierdy_rcv(VP_INT exinf); #endif /* _MACRO_ONLY */ /* * TM controller */ #define TIMER_BASE_REG 0x13000000 /*timer 1*/ #define TM1_LOAD (TIMER_BASE_REG + 0x100) #define TM1_VAL (TIMER_BASE_REG + 0x104) #define TM1_CTRL (TIMER_BASE_REG + 0x108) #define TM1_CLR (TIMER_BASE_REG + 0x10c) /*timer 0*/ #define TM2_LOAD (TIMER_BASE_REG + 0x200) #define TM2_VAL (TIMER_BASE_REG + 0x204) #define TM2_CTRL (TIMER_BASE_REG + 0x208) #define TM2_CLR (TIMER_BASE_REG + 0x20C) /*Timer Constants*/ #define TCTRL_STOP 0x0 /*start bit (7th bit) enabled *periodic bit (6th bit) enabled */ #define TCTRL_START 0xC0 #define TCLR_CLEAR 0x01 #define TCTRL_D016 0x04 #define TCTRL_D256 0x08 /*disable timer1 interrupt*/ #define TCLR_DISABLE 0x20 /*-------------------------------------------------*/ /*キャッシュ設定:ARM920T*/ #define ICACHE_ENABLE_BIT 12 #define RESERVED_BIT 6 #define CACHE_ENABLE 0x1078 #endif /* _INTEGRATOR_H_ */