📄 mcu.h
字号:
#ifndef MCU_H_
#define MCU_H_
/*******************************************************************************************************
*******************************************************************************************************
************************** Global macros **************************
*******************************************************************************************************
*******************************************************************************************************/
#define ENABLE_GLOBAL_INT() #asm("sei")
#define DISABLE_GLOBAL_INT() #asm("cli")
/*******************************************************************************************************
*******************************************************************************************************
************************** 定义 Mega128L 寄存器位 ************************
*******************************************************************************************************
*******************************************************************************************************/
//------------------------------------------------------------------------------------------------------
//SPI--->SPCR
#define SPR0 0 //SPI时钟速率选择0
#define MSTR 4 //主从机选择(1:主机;0:从机)
#define SPE 6 //SPI使能
//SPI--->SPSR
#define SPIF 7 //SPI中断标志
//------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** ATmega128L I/O PORTS **************************
*******************************************************************************************************
*******************************************************************************************************/
//------------------------------------------------------------------------------------------------------
// Port B
#define CSN 0 // PB.0 - Output: SPI Chip Select (CS_N)
#define SCK 1 // PB.1 - Output: SPI Serial Clock (SCLK)
#define MOSI 2 // PB.2 - Output: SPI Master out - slave in (MOSI)
#define MISO 3 // PB.3 - Input: SPI Master in - slave out (MISO)
#define RLED 4 // PB.4 - Output: Red LED
#define VREG_EN 5 // PB.5 - Output: VREG_EN to CC2420
#define RESET_N 6 // PB.6 - Output: RESET_N to CC2420
#define GLED 7 // PB.7 - Output: Green LED
// Port D
#define FIFOP 0 // PD.0 - Input: FIFOP from CC2420
#define FIFO 1 // PD.1 - Input: FIFO from CC2420
//#define UART1_RXD 2 // PD.2 - Input: UART1 RXD
//#define UART1_TXD 3 // PD.3 - Output: UART1 TXD
#define SFD 4 // PD.4 - Input: SFD from CC2420
#define KEY1 5 // PD.5 - Input: KEY1
#define CCA 6 // PD.6 - Input: CCA from CC2420
//#define UART1_CTS 7 // PD.7 - Input: UART HW handshaking: CTS
#define WLED 7 // PD.7 - Output: Wreen LED
// Port E
#define RLED2 2 // PE.2 - Output: Red LED2
#define RLED3 3 // PE.3 - Output: Red LED3
#define KEY2 4 // PE.4 - Input: KEY1
#define KEY3 5 // PE.5 - Input: KEY1
// Enables/disables the SPI interface
#define SPI_DISABLE() ( PORTB |= BM(CSN) ) // 禁止 CSn
#define SPI_ENABLE() ( PORTB &= ~BM(CSN) ) // 使能 CSn (active low)
//------------------------------------------------------------------------------------------------------
/******************************************************************************************************
*******************************************************************************************************
************************** CC2420 PIN ACCESS **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// Pin status
#define FIFO_IS_1 (!!(PIND & BM(FIFO)))
#define CCA_IS_1 (!!(PIND & BM(CCA)))
#define RESET_IS_1 (!!(PINB & BM(RESET_N)))
#define VREG_IS_1 (!!(PINB & BM(VREG_EN)))
#define FIFOP_IS_1 (!!(PIND & BM(FIFOP)))
#define SFD_IS_1 (!!(PIND & BM(SFD)))
// CC2420 voltage regulator enable pin
#define SET_VREG_ACTIVE() ( PORTB |= BM(VREG_EN) ) //使能VREG (active high)
#define SET_VREG_INACTIVE() ( PORTB &= ~BM(VREG_EN) ) //禁止VREG
// The CC2420 reset pin
#define SET_RESET_ACTIVE() ( PORTB &= ~BM(RESET_N) ) //使能RESET (active low)
#define SET_RESET_INACTIVE() ( PORTB |= BM(RESET_N) ) //禁止RESET
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** SERIAL PORTS **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
#define RX_BUFFER_SIZE0 1 // USART0 Receiver buffer
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** EXTERNAL INTERRUPTS **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// Rising edge trigger for external interrupt 0 (FIFOP)
#define FIFOP_INT_INIT() do {EICRA |= 0x03; CLEAR_FIFOP_INT(); } while (0) // INT0的上升沿产生异步中断请求
// FIFOP on external interrupt 0
#define ENABLE_FIFOP_INT() do {EIMSK |= BM(FIFOP); } while(0) // 允许FIFOP对ATMega128的中断
#define DISABLE_FIFOP_INT() do {EIMSK &= ~BM(FIFOP); } while (0) // 禁止FIFOP对ATMega128的中断
#define CLEAR_FIFOP_INT() do {EIFR = BM(FIFOP); } while(0)
// SFD interrupt on timer 1 capture pin
#define ENABLE_SFD_CAPTURE_INT() do { TIMSK |= BM(TICIE1); } while (0)
#define DISABLE_SFD_CAPTURE_INT() do { TIMSK &= ~BM(TICIE1); } while (0)
#define CLEAR_SFD_CAPTURE_INT() do { TIFR = BM(ICF1); } while (0)
//-------------------------------------------------------------------------------------------------------
/******************************************************************************************************
*******************************************************************************************************
************************** LED **************************
*******************************************************************************************************
*******************************************************************************************************/
//------------------------------------------------------------------------------------------------------
// LED
#define RLED_EN() PORTB |= (1<<RLED)
#define RLED_DISABLE() PORTB &= ~(1<<RLED)
#define RLED_TOGGLE() PORTB ^= (1<<RLED)
#define GLED_EN() PORTB |= (1<<GLED)
#define GLED_DISABLE() PORTB &= ~(1<<GLED)
#define GLED_TOGGLE() PORTB ^= (1<<GLED)
#define WLED_EN() PORTD |= (1<<WLED)
#define WLED_DISABLE() PORTD &= ~(1<<WLED)
#define WLED_TOGGLE() PORTD ^= (1<<WLED)
#define RLED2_EN() PORTE |= (1<<RLED2)
#define RLED2_DISABLE() PORTE &= ~(1<<RLED2)
#define RLED2_TOGGLE() PORTE ^= (1<<RLED2)
#define RLED3_EN() PORTE |= (1<<RLED3)
#define RLED3_DISABLE() PORTE &= ~(1<<RLED3)
#define RLED3_TOGGLE() PORTE ^= (1<<RLED3)
//------------------------------------------------------------------------------------------------------
/******************************************************************************************************
*******************************************************************************************************
************************** KEY **************************
*******************************************************************************************************
*******************************************************************************************************/
//------------------------------------------------------------------------------------------------------
// KEY
#define KEY1_DOWN ((PIND & (1<<KEY1))==0)
#define KEY2_DOWN ((PINE & (1<<KEY2))==0)
#define KEY3_DOWN ((PINE & (1<<KEY3))==0)
//------------------------------------------------------------------------------------------------------
/******************************************************************************************************
************************** 函数声明 **************************
*******************************************************************************************************/
//------------------------------------------------------------------------------------------------------
void PORT_Init(void);
void SPI_Init(void);
void USART0_Init(void);
void USART0_Send_Char(unsigned char data);
void USART0_Send_Str(unsigned char *ptr);
unsigned char USART0_Receive_Char(void);
void USART0_Flush(void);
void USART0_Clear_rx_buffer0(void);
void Sleep(void);
//------------------------------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -