main.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef _MAIN_H_
  2. #define _MAIN_H_
  3. #if defined(__GNUC__)
  4. # include <avr/io.h>
  5. # include <avr/sleep.h>
  6. # include <avr/interrupt.h>
  7. #elif defined(__ICCAVR__)
  8. # include <ioavr.h>
  9. # include <intrinsics.h>
  10. # include <stdint.h>
  11. #endif
  12. /**
  13. * Global defines
  14. */
  15. #ifndef F_CPU
  16. #define F_CPU 8000000
  17. #endif
  18. #define F_TWI 400000
  19. #define TIMER0_HZ 1000
  20. #define TIMER0_PRESCALER 64
  21. #define TIMER0_CNT (0x100 - (F_CPU / TIMER0_PRESCALER / TIMER0_HZ))
  22. /**
  23. * Bitwise macro
  24. */
  25. #define SetBit(x,y) do{ x |= (1 << (y));} while(0)
  26. #define ClrBit(x,y) do{ x &= ~(1 << (y));} while(0)
  27. #define InvBit(x,y) do{(x)^= (1 << (y));} while(0)
  28. #define IsBit(x,y) (x & (1 << (y)))
  29. #define ResBit(reg,bit) (reg &= ~_BV(bit))
  30. /*
  31. Автоматически включается avr/sfr_defs.h, кторый содержит:
  32. _BV(bit) === (1<<(bit))
  33. bit_is_set(sfr, bit)
  34. bit_is_clear(sfr, bit)
  35. loop_until_bit_is_set(sfr, bit)
  36. loop_until_bit_is_clear(sfr, bit)
  37. */
  38. /**
  39. * Global Type defines
  40. */
  41. typedef unsigned char u08;
  42. typedef unsigned short u16;
  43. typedef unsigned long u32;
  44. typedef unsigned long long u64;
  45. typedef signed char s08;
  46. typedef signed short s16;
  47. typedef signed long s32;
  48. typedef signed long long s64;
  49. /**
  50. * Interrupt macro
  51. */
  52. static volatile u08 saveRegister;
  53. #if defined(__GNUC__)
  54. #define ENABLE_INTERRUPT do{sei();}while(0)
  55. #define DISABLE_INTERRUPT do{saveRegister = SREG; cli();}while(0)
  56. #elif defined(__ICCAVR__)
  57. #define ENABLE_INTERRUPT do{__enable_interrupt();}while(0)
  58. #define DISABLE_INTERRUPT do{saveRegister = SREG; __disable_interrupt();}while(0)
  59. #endif
  60. #define RESTORE_INTERRUPT do{SREG = saveRegister;}while(0)
  61. //использовать RESTORE только после DISABLE
  62. /**
  63. * Logical values
  64. */
  65. #define TRUE 1
  66. #define FALSE 0
  67. #define HIGH 1
  68. #define LOW 0
  69. #define ON 1
  70. #define OFF 0
  71. //#define NULL 0
  72. /**
  73. * Maximum values of types
  74. */
  75. #define MAX08U 255
  76. #define MAX16U 65535
  77. #define MAX32U 4294967295
  78. #define MIN08S -128
  79. #define MAX08S 127
  80. #define MIN16S -32768
  81. #define MAX16S 32767
  82. #define MIN32S -2147483648
  83. #define MAX32S 2147483647
  84. /*--------------------------------------------------------------------------*/
  85. #endif /* _MAIN_H_ */