📄 cpu.h
字号:
#ifndef _CPU_H
#define _CPU_H
//////////////////////////
////////////////////////////////////////////////
//1.各种avr c平台标准头件
#ifndef __ICCAVR__ //gcc
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <util/crc16.h>
#include <math.h>
#include <avr/interrupt.h>
#include <avr/version.h>
#include <avr/wdt.h>
#define code PROGMEM
#else //iar
#include <ioavr.h>
#include <ina90.h>
#include <comp_a90.h>
#include <math.h>
#include <intrinsics.h>
#define ADCSRA ADCSR //在mega8时,iar只认后者,而gcc均可
#define F_CPU 7372800UL
// n ms /10
#define _delay_ms(n) {\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
__delay_cycles(n*10);\
}
#define _delay_us(n) __delay_cycles(n)
/////////////////////watchdog
#define wdt_reset() __watchdog_reset()
#define cli() disable_interrupt()
#define sei() enable_interrupt()
#define WDTO_500MS //nonsense in iar
#define wdt_enable(circle) do { \
__watchdog_reset();\
WDTCR |= (1 << WDCE) | (1 << WDE);\
WDTCR |= (1 << WDP2) | (1 << WDP1);\
}while(0);//set 1s
////////////////////flash operation
#define pgm_read_byte(ptr) (*((uint8 __flash *)ptr))
#define pgm_read_byte_far(ptr) (*((uint8 __hugeflash *)ptr))
#define pgm_read_word(ptr) (*((uint16 __flash *)ptr))
#define pgm_read_word_far(ptr) (*((uint16 __hugeflash *)ptr))
#define PROGMEM __flash
#ifndef PGM_P
#define PGM_P const char __flash *
#endif
////////////////////CRC
unsigned int _crc16_update(unsigned int crc, unsigned char a);
////////////////////EEPROM
#define eeprom_read_byte(A) (((uint8 __eeprom *)(A))[0])
#define eeprom_read_word(A) (((uint16 __eeprom *)(A))[0])
#define eeprom_write_byte(ADDR,VAL) ((uint8 __eeprom *)(ADDR))[0]=VAL
#define eeprom_write_word(ADDR,VAL) ((uint16 __eeprom *)(ADDR))[0]=VAL
#endif
////////////////////////////////////////////////
//2.定义可移植数据类型
//----------------------------8 bit
typedef unsigned char u08 ;
typedef unsigned char uint8;
typedef unsigned char u8 ;
typedef unsigned char U8 ;
typedef unsigned char UINT8;
typedef unsigned char uchar;
//----------------------------16 bit
typedef unsigned int u16 ;
typedef unsigned int U16 ;
typedef unsigned int uint16;
typedef unsigned int UINT16;
typedef int int16 ;
typedef int INT16 ;
//----------------------------32 bit
typedef unsigned int long u32 ;
typedef unsigned int long uint32;
typedef unsigned int long U32 ;
typedef unsigned int long UINT32;
typedef signed int long INT32;
typedef signed int long int32;
#ifndef BOOL
#define BOOL u08
#endif
#ifndef bool
#define bool u08
#endif
//true
#if !defined( ON) || !defined(on)
#define ON 1
#define on 1
#endif
#if !defined( OK) || !defined(ok)
#define OK 1
#define ok 1
#endif
#if !defined( TRUE) || !defined(true)
#define TRUE 1
#define true 1
#endif
#if !defined (YES ) || !defined (yes)
#define YES 1
#define yes 1
#endif
//not true
#if !defined( OFF) || !defined(off)
#define OFF 0
#define off 0
#endif
#if !defined(FALSE) || !defined( false)
#define FALSE 0
#define false 0
#endif
#if !defined( NO ) || !defined (no)
#define NO 0
#define no 0
#endif
#if !defined( NOK) || !defined(nok)
#define NOK 0
#define nok 0
#endif
////////////////////////////////////////////////////////
//3. avr 系列单片机位操作宏
typedef struct
{
unsigned char bit0:1 ;
unsigned char bit1:1 ;
unsigned char bit2:1 ;
unsigned char bit3:1 ;
unsigned char bit4:1 ;
unsigned char bit5:1 ;
unsigned char bit6:1 ;
unsigned char bit7:1 ;
}bit_field;
#define GET_BIT(adr) (*(( volatile bit_field * )(&adr)))
//////////////////////////////////////////
#define AUTOINIT 1
#if AUTOINIT==1
#define PORT(m,n) GET_BIT(DDR ##m).bit##n=1;\
GET_BIT(PORT##m).bit##n
#else
#define PORT(m,n) GET_BIT(PORT##m).bit##n
#endif
////////////////////////////////////////
#if AUTOINIT==1 //1:staticlly set the IO direction
//0:io direction can dynamically changge
#define PIN(m,n) ( \
GET_BIT(DDR ##m).bit##n=0,\
GET_BIT(PORT##m).bit##n=1,\
GET_BIT(PIN ##m).bit##n \
)
#else
#define PIN(m,n) GET_BIT(PIN##m).bit##n
#endif
#define DRA(n) GET_BIT(DDRA).bit##n
#define DRB(n) GET_BIT(DDRB).bit##n
#define DRC(n) GET_BIT(DDRC).bit##n
#define DRD(n) GET_BIT(DDRD).bit##n
#define DDR(m,n) GET_BIT(DDR##m).bit##n
#define _PIN(m,n) GET_BIT (PIN##m).bit##n
#define _PORT(m,n) GET_BIT(PORT##m).bit##n
#define _DDR(m,n) GET_BIT(DDR##m).bit##n
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -