scif_isr.c

来自「WinCE5.0BSP for Renesas SH7770」· C语言 代码 · 共 208 行

C
208
字号
//
//  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 + =
减小字号Ctrl + -
显示快捷键?