INCLUDE_ATY.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. /**
  2. * @file INCLUDE_ATY.h
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2023 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief Headers include or defines for all embedded code
  20. * - MCU main changes at GPIO/TIMER/PWM
  21. *
  22. * @version
  23. * - 1_01_220605 > ATY
  24. * -# Preliminary version, first Release
  25. * @todo
  26. * - HW port file set independent
  27. * - Not support 64 platfrom, todo or never(and double)
  28. ********************************************************************************
  29. */
  30. /* Keyword ********************************************************************
  31. ANSI C:
  32. auto
  33. break
  34. case
  35. char
  36. const
  37. continue
  38. default
  39. do
  40. double
  41. else
  42. enum
  43. extern
  44. float
  45. for
  46. goto
  47. if
  48. int
  49. long
  50. register
  51. return
  52. short
  53. signed
  54. sizeof
  55. static
  56. struct
  57. switch
  58. typedef
  59. union
  60. unsigned
  61. void
  62. volatile
  63. while
  64. C99:
  65. inline
  66. restrict
  67. _Bool
  68. _Complex
  69. _Imaginary
  70. C11:
  71. _Alignas
  72. _Alignof
  73. _Atomic
  74. _Static_assert
  75. _Noreturn
  76. _Thread_local
  77. _Generic
  78. C51:
  79. _at_
  80. _priority_
  81. _task_
  82. alien
  83. bdata
  84. bit
  85. code
  86. compact
  87. data
  88. idata
  89. interrupt
  90. large
  91. pdata
  92. reentrant
  93. sbit
  94. sfr
  95. sfr16
  96. small
  97. using
  98. xdata
  99. ********************************************************************************
  100. */
  101. #ifndef __INCLUDE_ATY_H
  102. #define __INCLUDE_ATY_H
  103. /******************************* Data Type ************************************/
  104. // #define __UNUSED(x) ((void)(x))
  105. #define __UNUSED(x) (x = x) // not suit for const, used for function formal parameter uaually
  106. #ifndef __stdint_h
  107. #define __stdint_h
  108. #ifndef bit
  109. #define bit uint8_t
  110. #endif /* bit */
  111. #ifndef _UINT8_T
  112. #define _UINT8_T
  113. typedef unsigned char uint8_t;
  114. #endif /* _UINT8_T */
  115. #ifndef _UINT16_T
  116. #define _UINT16_T
  117. typedef unsigned short int uint16_t;
  118. #endif /* _UINT16_T */
  119. #ifndef _UINT32_T
  120. #define _UINT32_T
  121. typedef unsigned long uint32_t;
  122. #endif /* _UINT32_T */
  123. #ifndef _UINT64_T
  124. #define _UINT64_T
  125. #if defined(SDCC) || defined(__SDCC) || defined(__CX51__) || defined(__C51__)
  126. typedef unsigned long int uint64_t; // uint64_t at 64 bit platform with ulong
  127. #else
  128. typedef unsigned long long int uint64_t;
  129. #endif /* uint64_t */
  130. #endif /* _UINT64_T */
  131. typedef signed char int8_t;
  132. typedef signed short int int16_t;
  133. typedef signed int int32_t;
  134. #if defined(SDCC) || defined(__SDCC) || defined(__CX51__) || defined(__C51__)
  135. typedef signed long int int64_t;
  136. #else
  137. typedef signed long long int int64_t;
  138. #endif /* int64_t */
  139. #endif /* __stdint_h */
  140. /******************************* Platform *************************************/
  141. #if defined(__SDCC_SYNTAX_FIX)
  142. #include <stdbool.h>
  143. #include <lint.h>
  144. # warning unrecognized compiler
  145. #define __BIT bool
  146. #define __DATA
  147. #define __IDATA
  148. #define __PDATA
  149. #define __XDATA
  150. #define __CODE
  151. #define __REENTRANT
  152. #define SBIT(name, addr, bit) volatile bool name
  153. #define SFR(name, addr) volatile unsigned char name
  154. #define SFRX(addr) (*(unsigned char volatile *)(addr))
  155. #define SFR16X(addr) (*(unsigned char volatile *)(addr))
  156. #define INTERRUPT(name, vector) void name (void)
  157. #define INTERRUPT_USING(name, vector, regnum) void name (void)
  158. #define __NOP_ATY
  159. #define __WEAK_ATY
  160. #elif defined(SDCC) || defined(__SDCC)
  161. #define __BIT __bit
  162. #define __DATA __data
  163. #define __IDATA __idata
  164. #define __PDATA __pdata
  165. #define __XDATA __xdata
  166. #define __CODE __code
  167. #define __REENTRANT __reentrant
  168. #define SBIT(name, addr, bit) __sbit __at(addr+bit) name
  169. #define SFR(name, addr) __sfr __at(addr) name
  170. #define SFRX(addr) (*(unsigned char volatile __xdata *)(addr))
  171. #define SFR16X(addr) (*(unsigned int volatile __xdata *)(addr))
  172. // #define INTERRUPT(name, vector) void name (void) __interrupt (vector)
  173. // #define INTERRUPT_USING(name, vector, regnum) void name (void) __interrupt (vector) __using (regnum)
  174. #define INTERRUPT(vector) __interrupt (vector)
  175. #define INTERRUPT_USING(vector, regnum) __interrupt (vector) __using (regnum)
  176. #define __NOP_ATY __asm NOP __endasm
  177. #define __WEAK_ATY
  178. #elif defined(__CX51__) || defined(__C51__)
  179. // #warning Use C51
  180. #define __BIT bit
  181. #define __DATA data
  182. #define __IDATA idata
  183. #define __PDATA pdata
  184. #define __XDATA xdata
  185. #define __CODE code
  186. #define __REENTRANT reentrant
  187. #define SBIT(name, addr, bit) sbit name = addr^bit
  188. #define SFR(name, addr) sfr name = addr
  189. #define SFRX(addr) (*(unsigned char volatile xdata *)(addr))
  190. #define SFR16X(addr) (*(unsigned int volatile xdata *)(addr))
  191. // #define INTERRUPT(name, vector) void name (void) interrupt vector
  192. // #define INTERRUPT_USING(name, vector, regnum) void name (void) interrupt vector using regnum
  193. #define INTERRUPT(vector) interrupt vector
  194. #define INTERRUPT_USING(vector, regnum) interrupt vector using regnum
  195. #include <intrins.h> // _nop_()
  196. extern void _nop_(void);
  197. #define __NOP_ATY _nop_()
  198. #define __WEAK_ATY
  199. #elif defined(__ICCARM__) || defined(__CC_ARM)
  200. // #include <stdint.h>
  201. #define __BIT bit
  202. #define __DATA
  203. #define __IDATA
  204. #define __PDATA
  205. #define __XDATA
  206. #define __CODE
  207. // #include <intrins.h> // _nop_()
  208. #define __NOP_ATY _nop_()
  209. #if defined(__ICCARM__)
  210. #define __WEAK_ATY __WEAK __ATTRIBUTES
  211. #elif defined(__CC_ARM)
  212. #define __WEAK_ATY __weak
  213. #endif
  214. #else
  215. #warning Unsupported compiler!
  216. #endif /* PLATFORM */
  217. /******************************* For user *************************************/
  218. #include "main.h"
  219. #if defined(__HC32_ATY) || \
  220. defined(__STM32_SPL_ATY) || \
  221. defined(__STM32_HAL_ATY) || \
  222. defined(__STM32_LL_ATY)
  223. // shield warnings
  224. #pragma diag_suppress 550 // variable "" was set but never used
  225. #pragma diag_suppress 177 // function "" was declared but never referenced
  226. #pragma diag_suppress 186 // pointless comparison of unsigned integer with zero
  227. #pragma diag_suppress 1035 // single-precision operand implicitly converted to double-precision
  228. // #pragma diag_suppress 223
  229. #endif
  230. #ifdef __STC51_ATY
  231. #define BIG_ENDIAN // chip in big endian mode, like 51
  232. #endif
  233. #if defined(__STC51_ATY)
  234. #define LOG_ATY(__STRING) UartSendStr(__STRING)
  235. #elif defined(__HC32_ATY) || \
  236. defined(__STM32_SPL_ATY) || \
  237. defined(__STM32_HAL_ATY) || \
  238. defined(__STM32_LL_ATY)
  239. #include "HW_UART_ATY.h"
  240. #include "stdarg.h"
  241. #define LOG_ATY(__STRING) printf(__STRING) // C99
  242. #define LOG_ATY__(__STRING, ...) printf(__STRING,##__VA_ARGS__) // C99
  243. #else
  244. #define LOG_ATY(__STRING)
  245. #endif
  246. // #if !defined(__PRINTF_ATY) && !defined(__stdio_h) && !defined(__STM32_HAL_ATY)
  247. // #include "stdarg.h"
  248. // __WEAK_ATY void printf(uint8_t*, ...);
  249. // #endif /* __PRINTF_ATY */
  250. /*
  251. // todo, not tested and need to be adjust
  252. // #include <stdio.h> // printf(only for debug)
  253. #if defined(__HC32_ATY) || \
  254. defined(__STM32_SPL_ATY) || \
  255. defined(__STM32_HAL_ATY) || \
  256. defined(__STM32_LL_ATY)
  257. #include "STM32_HAL_PRINTF_ATY.h"
  258. #include "stdarg.h"
  259. #define LOG_ATY(__STRING, ...) printf(__STRING,##__VA_ARGS__) // C99
  260. #else
  261. #include "HW_UART_ATY.h"
  262. #include "stdarg.h"
  263. #define LOG_ATY(...) UartSendStr(__VA_ARGS__)
  264. #endif
  265. */
  266. // Define device symbol to main header
  267. // #define __STC51_ATY
  268. // #define __STC8G_ATY
  269. // #define __STC8H_ATY
  270. // #define __HC32_ATY
  271. // #define __STM32_SPL_ATY
  272. // #define __STM32_LL_ATY
  273. // #define __STM32_HAL_ATY
  274. // #define __ESP8266_RTOS_ATY
  275. // #define __ESP32_IDF_ATY
  276. // #define __TIMER_CYCLE_ATY
  277. // #define TIMERC_N htim4
  278. // #define TIMERC_N 0
  279. // #define __I2C_HARDWARE_ATY
  280. // #define I2CH_N hi2c1
  281. // #define I2CH_N 0
  282. // #define I2CH_N I2C_NUM_0
  283. // #define __SPI_HARDWARE_ATY
  284. // #define SPIH_N hspi2
  285. // #define SPIH_N 0
  286. // #define __PWM_HARDWARE_ATY
  287. // #define PWMH_N htim1
  288. // #define PWMH_N TIM1
  289. // #define PWMH_N 1
  290. // #define DEBUG_PRINTF_RECEIVE
  291. // #define PRINTF_UART huart3
  292. // #define PRINTF_DMA hdma_usart3_rx
  293. // extern DMA_HandleTypeDef PRINTF_DMA;
  294. /******************************************************************************/
  295. #endif /* __INCLUDE_ATY_H */
  296. /******************************** End Of File *********************************/