?? scif_isr.c
字號:
//
// Copyright(C) Renesas Technology Corp. 2002-2004. All rights reserved.
//
// NK Kernel for ITS-DS7 Ver.1.0.0
//
// FILE : scif_isr.c
// CREATED : 2002.04.25
// MODIFIED : 2004.09.01
// AUTHOR : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY :
// 2003.06.20
// - Created release code.
// (based on RENESAS ITS-DS4 Source Kit Ver.1.2.0 for WCE4.2)
// 2004.09.01
// - Created release code for WCE5.0.
#include <windows.h>
#include <shx.h>
#include <platform.h>
#include <sh7770.h>
#include <oalintr.h>
#include <drv_glob.h>
#include <serhw.h>
#include <../drivers/serial/inc/scif.h>
#ifndef _DMA_H
#define _DMA_H
#define Read(reg) (*(volatile unsigned long * const)(reg))
#define Write(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
#define ReadByte(reg) (*(volatile unsigned char * const)(reg))
#define WriteByte(reg, val) (*(volatile unsigned char * const)(reg)) = (val)
#define ReadWord(reg) (*(volatile unsigned short * const)(reg))
#define WriteWord(reg, val) (*(volatile unsigned short * const)(reg)) = (val)
int scif_isr0(void);
int scif_isr1(void);
int scif_isr2(void);
int ir_isr0(void);
int ir_isr1(void);
int ir_isr2(void);
#pragma optimize("", off)
int scif_isr0(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'S';
string[1] = 'C';
string[2] = 'I';
string[3] = 'F';
string[4] = '0';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
// WriteWord(SCIF0_REGBASE+SCIF_SCSCR_OFFSET,
// ReadWord(SCIF0_REGBASE+SCIF_SCSCR_OFFSET) & ~(SCIF_SCR_REIE | SCIF_SCR_TOIE));
//
WriteWord(SCIF0_REGBASE+SCIF_SCSCR_OFFSET,
ReadWord(SCIF0_REGBASE+SCIF_SCSCR_OFFSET) & ~(SCIF_SCR_REIE | SCIF_SCR_TOIE | SCIF_SCR_RIE));
return SYSINTR_SCIF0;
}
int scif_isr1(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'S';
string[1] = 'C';
string[2] = 'I';
string[3] = 'T';
string[4] = 'X';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
Write(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET,
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET) & ~(0x00000001 << CH_TX_SCIF0));
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET); // Coherency measures
WRITE_REGISTER_UCHAR(DRV_GLOBAL_BASE + DMA_INTERRUPT_FLG_OFFSET + CH_TX_SCIF0, (UCHAR)1);
return SYSINTR_SCIF0;
}
int scif_isr2(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'S';
string[1] = 'C';
string[2] = 'I';
string[3] = 'R';
string[4] = 'X';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
Write(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET,
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET) & ~(0x00000001 << CH_RX_SCIF0));
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET); // Coherency measures
WRITE_REGISTER_UCHAR(DRV_GLOBAL_BASE + DMA_INTERRUPT_FLG_OFFSET + CH_RX_SCIF0, (UCHAR)1);
return SYSINTR_SCIF0;
}
int ir_isr0(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'I';
string[1] = 'R';
string[2] = 'D';
string[3] = 'A';
string[4] = '0';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
WriteWord(SCIF3_REGBASE+SCIF_SCSCR_OFFSET,
ReadWord(SCIF3_REGBASE+SCIF_SCSCR_OFFSET) & ~(SCIF_SCR_REIE | SCIF_SCR_TOIE|SCIF_SCR_RIE));
// WriteWord(SH7770_INTC2_REGBASE+INTC2MSKRG_OFFSET,
// ReadWord(SH7770_INTC2_REGBASE+INTC2MSKRG_OFFSET) & ~(INTC2MSKRG_SCIF));
return SYSINTR_IR;
}
int ir_isr1(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'I';
string[1] = 'R';
string[2] = 'T';
string[3] = 'X';
string[4] = 'X';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
Write(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET,
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET) & ~(0x00000001 << CH_TX_SCIF3));
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET); // Coherency measures
WRITE_REGISTER_UCHAR(DRV_GLOBAL_BASE + DMA_INTERRUPT_FLG_OFFSET + CH_TX_SCIF3, (UCHAR)1);
return SYSINTR_IR;
}
int ir_isr2(void)
{
#ifdef DEBUG
char string[8];
static int ii = 0;
string[0] = 'I';
string[1] = 'R';
string[2] = 'R';
string[3] = 'X';
string[4] = 'X';
string[5] = '0' + (UCHAR)(ii %100) / 10;
string[6] = '0' + (UCHAR)(ii % 10);
string[7] = '\0';
PrintLED(string);
if( ++ii > 100 ) ii = 0;
#endif
Write(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET,
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET) & ~(0x00000001 << CH_RX_SCIF3));
Read(SH7770_DMAC_REGBASE+DMAC_DINTMR_OFFSET); // Coherency measures
WRITE_REGISTER_UCHAR(DRV_GLOBAL_BASE + DMA_INTERRUPT_FLG_OFFSET + CH_RX_SCIF3, (UCHAR)1);
return SYSINTR_IR;
}
#pragma optimize("", on)
#endif // _DMA_H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -