📄 cpu.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 + -