⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.h

📁 基于瑞萨 M16C 的最新版本 IIC 通信
💻 H
字号:
#include "compiler.h"
#include "inthandler.h"
// ---------------------------------------------------------------------------
// Compiler
// ---------------------------------------------------------------------------
#define GCC
// ---------------------------------------------------------------------------
// DMA use (coment this line if DMA1 is not used for transmission)
// ---------------------------------------------------------------------------
//#define DMA1_USED
// ---------------------------------------------------------------------------
// UART selection (please uncoment one of here bellow only)
// ---------------------------------------------------------------------------
//#define UART0
//#define UART1     // NOT TESTED ON THIS UART YET !!!!!!
#define UART2
// ---------------------------------------------------------------------------
// CPU selection (please uncoment one of here bellow only)
// ---------------------------------------------------------------------------
//#define M16C26
//#define M16C26A
//#define M16C28
#define M16C62P
//#define M16C6N4

//#define EVA_3DK62P
#ifdef  DMA1_USED
  	#ifdef  UART0
    	#define DMA1_ACK_TRIG_SOURCE   	0x0B;   // Trig by UART0 ACK
  	#endif
	#ifdef  UART1
	  #define DMA1_ACK_TRIG_SOURCE   	0x0F;   // Trig by UART1 ACK
	#endif
	#ifdef  UART2
    	#define DMA1_ACK_TRIG_SOURCE   	0x0D;   // Trig by UART2 ACK
    #endif
#endif

#if   _COMPILER == _IAR_ICCM16C_V2
  #include "intrinsics.h"
  __data13 __no_init volatile unsigned long SAR1 @ 0x030;   /* DMA1 source pointer  */
  __data13 __no_init volatile unsigned long DAR1 @ 0x034;   /* DMA1 destination pointer (low) */
  #ifdef    M16C26
    #include "iom16c26.h"
  #endif
  #ifdef    M16C26A
    #include "iom16c26a.h"
  #endif
  #ifdef    M16C28
    #include "iom16c28.h"
  #endif
  #ifdef    M16C62P
    #include "iom16c62p.h"
  #endif
  #ifdef    M16C6N4
    #include "iom16c6n4.h"
  #endif

// ---------------------------------------------------------------------------
// SFR Registers definition for UART0 used as I2C configuration.
// This option is valid for M16C/62P and M16C/6N4 only
// ---------------------------------------------------------------------------
  #ifdef    UART0
    #define   UiMR        U0MR
    #define   UiBRG       U0BRG
    #define   UiC0        U0C0
    #define   UiSMR       U0SMR
    #define   UiSMR2      U0SMR2
    #define   UiSMR3      U0SMR3
    #define   UiSMR4      U0SMR4
    #define   UiC1        U0C1
    #define   STA_STP_IC  U0BCNIC
    #define   ACK_IC      S0RIC
    #define   NACK_IC     S0TIC
    #define   UiTB        U0TB
    #define   UiRB        U0RB
    #define   BusBusyFlag U0SMR_bit.BBS
    #define   UiBUS       U0BUS
    #define   UARTi_RX    UART0_RX
    #define   UARTi_TX    UART0_TX
  #endif
// ---------------------------------------------------------------------------
// SFR Registers definition for UART1 used as I2C configuration.
// This option is valid for M16C/62P and M16C/6N4 only
// ---------------------------------------------------------------------------
  #ifdef    UART1
    #define   UiMR        U1MR
    #define   UiBRG       U1BRG
    #define   UiC0        U1C0
    #define   UiSMR       U1SMR
    #define   UiSMR2      U1SMR2
    #define   UiSMR3      U1SMR3
    #define   UiSMR4      U1SMR4
    #define   UiC1        U1C1
    #define   STA_STP_IC  U1BCNIC
    #define   ACK_IC      S1RIC
    #define   NACK_IC     S1TIC
    #define   UiTB        U1TB
    #define   UiRB        U1RB
    #define   BusBusyFlag U1SMR_bit.BBS
    #define   UiBUS       U1BUS
    #define   UARTi_RX    UART1_RX
    #define   UARTi_TX    UART1_TX
  #endif
// ---------------------------------------------------------------------------
// SFR Registers definition for UART2 used as I2C configuration.
// This option is valid for all M16C members
// ---------------------------------------------------------------------------
  #ifdef    UART2
    #define   UiMR      U2MR
    #define   UiBRG     U2BRG
    #define   UiC0      U2C0
    #define   UiSMR     U2SMR
    #define   UiSMR2    U2SMR2
    #define   UiSMR3    U2SMR3
    #define   UiSMR4    U2SMR4
    #define   UiC1      U2C1
    #define   UARTi_RX  UART2_RX
    #define   UARTi_TX  UART2_TX
    #ifdef    M16C6N4
      #define STA_STP_IC U2BCNIC
    #else
      #define STA_STP_IC BCNIC
    #endif
    #define   ACK_IC    S2RIC
    #define   NACK_IC   S2TIC
    #define   UiTB      U2TB
    #define   UiRB      U2RB
    #define   BusBusyFlag U2SMR_bit.BBS
    #ifdef    M16C62P
      #define UiBUS     U2BUS
    #else
      #ifdef  M16C6N4
        #define   UiBUS     U2BUS
      #else
        #define   UiBUS     BUS
      #endif
    #endif
  #endif
#endif

#ifdef NC30
  #ifdef    M16C26
    #include "sfr26.h"
  #endif
  #ifdef    M16C26A
    #include "sfr26a.h"
  #endif
  #ifdef    M16C28
    #include "sfr28.h"
  #endif
  #ifdef    M16C62P
    #include "sfr62p.h"
  #endif
  #ifdef    M16C6N4
    #include "sfr6n4.H"
  #endif

  #define DMA1IC  dm1ic
  #define DM1SL   dm1sl
  #define PD8		pd8
  #define P8		p8
  #define P7		p7
  #define PRCR		prcr
  #define CM1		cm1
  #define CM0		cm0
  #define PLC0		plc0
  #define IFSR2A	ifsr2a
  #define PD7		pd7
  #define DAR1		dar1
  #define TCR1		tcr1
  #define SAR1		sar1
  #define DM1CON	dm1con
// ---------------------------------------------------------------------------
// SFR Registers definition for UART0 used as I2C configuration.
// This option is valid for M16C/62P and M16C/6N4 only
// ---------------------------------------------------------------------------
  #ifdef    UART0
    #define   UiMR        u0mr
    #define   UiBRG       u0brg
    #define   UiC0        u0c0
    #define   UiSMR       u0smr
    #define   UiSMR2      u0smr2
    #define   UiSMR3      u0smr3
    #define   UiSMR4      u0smr4
    #define   UiC1        u0c1
    #define   STA_STP_IC  u0bcnic
    #define   ACK_IC      s0ric
    #define   NACK_IC     s0tic
    #define   UiTB        u0tb
    #define   UiRB        u0rb
    #define   BusBusyFlag bbs_u0smr
    #define   UiBUS       u0bus
    #define   UARTi_RX    uart0_rx
    #define   UARTi_TX    uart0_tx
  #endif
// ---------------------------------------------------------------------------
// SFR Registers definition for UART1 used as I2C configuration.
// This option is valid for M16C/62P and M16C/6N4 only
// ---------------------------------------------------------------------------
  #ifdef    UART1
    #define   UiMR        u1mr
    #define   UiBRG       u1brg
    #define   UiC0        u1c0
    #define   UiSMR       u1smr
    #define   UiSMR2      u1smr2
    #define   UiSMR3      u1smr3
    #define   UiSMR4      u1smr4
    #define   UiC1        u1c1
    #define   STA_STP_IC  u1bcnic
    #define   ACK_IC      s1ric
    #define   NACK_IC     s1tic
    #define   UiTB        u1tb
    #define   UiRB        u1rb
    #define   BusBusyFlag bbs_u1smr
    #define   UiBUS       u1bus
    #define   UARTi_RX    uart1_rx
    #define   UARTi_TX    uart1_tx
  #endif
// ---------------------------------------------------------------------------
// SFR Registers definition for UART2 used as I2C configuration.
// This option is valid for all M16C members
// ---------------------------------------------------------------------------
  #ifdef    UART2
    #define   UiMR      u2mr
    #define   UiBRG     u2brg
    #define   UiC0      u2c0
    #define   UiSMR     u2smr
    #define   UiSMR2    u2smr2
    #define   UiSMR3    u2smr3
    #define   UiSMR4    u2smr4
    #define   UiC1      u2c1
    #define   UARTi_RX  uart2_rx
    #define   UARTi_TX  uart2_tx
    #ifdef    M16C6N4
      #define STA_STP_IC u2bcnic
    #else
      #define STA_STP_IC bcnic
    #endif
    #define   ACK_IC    s2ric
    #define   NACK_IC   s2tic
    #define   UiTB      u2tb
    #define   UiRB      u2rb
	#ifdef	M16C26
		#define BusBusyFlag	bbs
	#else
    	#define   BusBusyFlag bbs_u2smr
	#endif
    #ifdef    M16C62P
      #define UiBUS     u2bus
    #else
      #ifdef  M16C6N4
        #define   UiBUS     u2bus
      #else
        #define   UiBUS     bus
      #endif
    #endif
  #endif
//#endif
// ---------------------------------------------------------------------------
// Interrupts in fixed interrupt table
#pragma INTERRUPT __undefined_instruction_handler
#pragma INTERRUPT __overflow_handler
#pragma INTERRUPT __break_instruction_handler
#pragma INTERRUPT __address_match_handler
#pragma INTERRUPT __single_step_handler
#pragma INTERRUPT __watchdog_timer_handler
#pragma INTERRUPT __DBC_handler
#pragma INTERRUPT __NMI_handler

// Interrupts in variable interrupt table
#pragma INTERRUPT BRK_interrupt
#pragma INTERRUPT DMA_interrupt
#pragma INTERRUPT I2C_NACK
#pragma INTERRUPT I2C_ACK
#pragma INTERRUPT I2C_StartStopDetection



// some general definitions
#define __disable_interrupt()		asm("FCLR I")
#define __enable_interrupt()		asm("FSET I")
#define __wait_for_interrupt()		asm("WAIT")
#define __interrupt
#define __regbank_interrupt
#endif

#ifdef GCC

	#ifdef    M16C26
		#include "iom16c26.h"
	#endif
	#ifdef    M16C26A
		#include "iom16c26a.h"
	#endif
	#ifdef    M16C28
		#include "iom16c28.h"
	#endif
	#ifdef    M16C62P
		#include "iom16c62p.h"
	#endif
	#ifdef    M16C6N4
		#include "iom16c6n4.h"
	#endif
	
	
	
	#define		DMA_interrupt			DMA1_ISR
	#define		I2C_ACK					UART2_recv_ISR
	#define		I2C_NACK				UART2_transmit_ISR
	#define		I2C_StartStopDetection	BUS_COLLISION_ISR
	
	
	
	// ---------------------------------------------------------------------------
	// SFR Registers definition for UART2 used as I2C configuration.
	// This option is valid for all M16C members
	// ---------------------------------------------------------------------------
	#ifdef    UART2
		#define   UiMR      U2MR.BYTE
		#define   UiBRG     U2BRG
		#define   UiC0      U2C0.BYTE
		#define   UiSMR     U2SMR.BYTE
		#define   UiSMR2    U2SMR2.BYTE
		#define   UiSMR3    U2SMR3.BYTE
		#define   UiSMR4    U2SMR4.BYTE
		#define   UiC1      U2C1.BYTE
		#define   UARTi_RX  UART2_RX
		#define   UARTi_TX  UART2_TX
		#ifdef    M16C6N4
			#define STA_STP_IC U2BCNIC
		#else
			#define STA_STP_IC BCNIC.BYTE
		#endif
		#define   ACK_IC    S2RIC.BYTE
		#define   NACK_IC   S2TIC.BYTE
		#define   UiTB      U2TB.WORD
		#define   UiRB      U2RB.WORD
		#define   BusBusyFlag U2SMR.BIT.BBS
		#ifdef    M16C62P
			#define UiBUS     U2BUS.BYTE
		#else
			#ifdef  M16C6N4
				#define   UiBUS     U2BUS
			#else
				#define   UiBUS     BUS
			#endif
		#endif
    #endif
	
	
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -