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

📄 mcu.h

📁 ATmega128L+CC2420的单片机源程序
💻 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 + -