INCLUDE_ATY.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. /**
  2. * @file INCLUDE_ATY.h
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2025 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. // fromelf.exe --bin -o ./DIPM_ATY_ST_V3/DIPM_ATY_ST_V3.bin ./DIPM_ATY_ST_V3/DIPM_ATY_ST_V3.axf
  31. /* Keyword ********************************************************************
  32. ANSI C:
  33. auto
  34. break
  35. case
  36. char
  37. const
  38. continue
  39. default
  40. do
  41. double
  42. else
  43. enum
  44. extern
  45. float
  46. for
  47. goto
  48. if
  49. int
  50. long
  51. register
  52. return
  53. short
  54. signed
  55. sizeof
  56. static
  57. struct
  58. switch
  59. typedef
  60. union
  61. unsigned
  62. void
  63. volatile
  64. while
  65. C99:
  66. inline
  67. restrict
  68. _Bool
  69. _Complex
  70. _Imaginary
  71. C11:
  72. _Alignas
  73. _Alignof
  74. _Atomic
  75. _Static_assert
  76. _Noreturn
  77. _Thread_local
  78. _Generic
  79. C51:
  80. _at_
  81. _priority_
  82. _task_
  83. alien
  84. bdata
  85. bit
  86. code
  87. compact
  88. data
  89. idata
  90. interrupt
  91. large
  92. pdata
  93. reentrant
  94. sbit
  95. sfr
  96. sfr16
  97. small
  98. using
  99. xdata
  100. ********************************************************************************
  101. */
  102. #ifndef __INCLUDE_ATY_H
  103. #define __INCLUDE_ATY_H
  104. /******************************* Data Type ************************************/
  105. // #define __UNUSED(x) ((void)(x))
  106. #define __UNUSED(x) (x = x) // not suit for const, used for function formal parameter uaually
  107. #ifndef __stdint_h
  108. #define __stdint_h
  109. #ifndef bool
  110. #define bool uint8_t
  111. #endif /* bool */
  112. #ifndef true
  113. #define true 1
  114. #endif /* true */
  115. #ifndef false
  116. #define false 0
  117. #endif /* false */
  118. #ifndef bit
  119. #define bit uint8_t
  120. #endif /* bit */
  121. #ifndef _UINT8_T
  122. #define _UINT8_T
  123. typedef unsigned char uint8_t;
  124. #endif /* _UINT8_T */
  125. #ifndef _UINT16_T
  126. #define _UINT16_T
  127. typedef unsigned short int uint16_t;
  128. #endif /* _UINT16_T */
  129. #ifndef _UINT32_T
  130. #define _UINT32_T
  131. typedef unsigned long uint32_t;
  132. #endif /* _UINT32_T */
  133. #ifndef _UINT64_T
  134. #define _UINT64_T
  135. #if defined (SDCC) || defined(__SDCC) || defined(__CX51__) || defined(__C51__)
  136. typedef unsigned long int uint64_t; // uint64_t at 64 bit platform with ulong
  137. #else
  138. typedef unsigned long long int uint64_t;
  139. #endif /* uint64_t */
  140. #endif /* _UINT64_T */
  141. typedef signed char int8_t;
  142. typedef signed short int int16_t;
  143. typedef signed int int32_t;
  144. #if defined (SDCC) || defined(__SDCC) || defined(__CX51__) || defined(__C51__)
  145. typedef signed long int int64_t;
  146. #else
  147. typedef signed long long int int64_t;
  148. #endif /* int64_t */
  149. #endif /* __stdint_h */
  150. /******************************* Platform *************************************/
  151. #if defined (__SDCC_SYNTAX_FIX)
  152. #include <stdbool.h>
  153. #include <lint.h>
  154. # warning unrecognized compiler
  155. #define __BIT bool
  156. #define __DATA
  157. #define __IDATA
  158. #define __PDATA
  159. #define __XDATA
  160. #define __CODE
  161. #define __REENTRANT
  162. #define SBIT(name, addr, bit) volatile bool name
  163. #define SFR(name, addr) volatile unsigned char name
  164. #define SFRX(addr) (*(unsigned char volatile *)(addr))
  165. #define SFR16X(addr) (*(unsigned char volatile *)(addr))
  166. #define INTERRUPT(name, vector) void name (void)
  167. #define INTERRUPT_USING(name, vector, regnum) void name (void)
  168. #define __NOP_ATY
  169. #define __WEAK_ATY
  170. #elif defined(SDCC) || defined(__SDCC)
  171. #define __BIT __bit
  172. #define __DATA __data
  173. #define __IDATA __idata
  174. #define __PDATA __pdata
  175. #define __XDATA __xdata
  176. #define __CODE __code
  177. #define __REENTRANT __reentrant
  178. #define SBIT(name, addr, bit) __sbit __at(addr+bit) name
  179. #define SFR(name, addr) __sfr __at(addr) name
  180. #define SFRX(addr) (*(unsigned char volatile __xdata *)(addr))
  181. #define SFR16X(addr) (*(unsigned int volatile __xdata *)(addr))
  182. // #define INTERRUPT(name, vector) void name (void) __interrupt (vector)
  183. // #define INTERRUPT_USING(name, vector, regnum) void name (void) __interrupt (vector) __using (regnum)
  184. #define INTERRUPT(vector) __interrupt (vector)
  185. #define INTERRUPT_USING(vector, regnum) __interrupt (vector) __using (regnum)
  186. #define __NOP_ATY __asm NOP __endasm
  187. #define __WEAK_ATY
  188. #elif defined(__CX51__) || defined(__C51__)
  189. // #warning Use C51
  190. #define __BIT bit
  191. #define __DATA data
  192. #define __IDATA idata
  193. #define __PDATA pdata
  194. #define __XDATA xdata
  195. #define __CODE code
  196. #define __REENTRANT reentrant
  197. #define SBIT(name, addr, bit) sbit name = addr^bit
  198. #define SFR(name, addr) sfr name = addr
  199. #define SFRX(addr) (*(unsigned char volatile xdata *)(addr))
  200. #define SFR16X(addr) (*(unsigned int volatile xdata *)(addr))
  201. // #define INTERRUPT(name, vector) void name (void) interrupt vector
  202. // #define INTERRUPT_USING(name, vector, regnum) void name (void) interrupt vector using regnum
  203. #define INTERRUPT(vector) interrupt vector
  204. #define INTERRUPT_USING(vector, regnum) interrupt vector using regnum
  205. #include <intrins.h> // _nop_()
  206. extern void _nop_(void);
  207. #define __NOP_ATY _nop_()
  208. #define __WEAK_ATY
  209. #elif defined(__ICCARM__) || defined(__CC_ARM)
  210. // #include <stdint.h>
  211. #define __BIT bit
  212. #define __DATA
  213. #define __IDATA
  214. #define __PDATA
  215. #define __XDATA
  216. #define __CODE
  217. #define __NOP_ATY __nop()
  218. #if defined (__ICCARM__)
  219. #define __WEAK_ATY __WEAK __ATTRIBUTES
  220. #elif defined(__CC_ARM)
  221. #define __WEAK_ATY __weak
  222. #endif
  223. #else
  224. #warning Unsupported compiler!
  225. #endif /* PLATFORM */
  226. /******************************* For user *************************************/
  227. // #define DBG_ATY(DBG_CODE, code)
  228. // do{
  229. // #ifdef DBG_CODE
  230. // code
  231. // #endif
  232. // }while(0)
  233. #include "main.h"
  234. // #if defined (__HC32_ATY) || \
  235. // defined(__STM32_SPL_ATY) || \
  236. // defined(__STM32_HAL_ATY) || \
  237. // defined(__STM32_LL_ATY)
  238. // // shield warnings
  239. // #pragma diag_suppress 550 // variable "" was set but never used
  240. // #pragma diag_suppress 177 // function "" was declared but never referenced
  241. // #pragma diag_suppress 186 // pointless comparison of unsigned integer with zero
  242. // #pragma diag_suppress 1035 // single-precision operand implicitly converted to double-precision
  243. // // #pragma diag_suppress 223
  244. // #endif
  245. // #ifdef __STC51_ATY
  246. // #define BIG_ENDIAN // chip in big endian mode, like 51
  247. // #endif
  248. // #if defined (__STC51_ATY)
  249. // #define LOG_ATY(__STRING) UartSendStr(__STRING)
  250. // #elif defined(__HC32_ATY) || \
  251. // defined(__STM32_SPL_ATY) || \
  252. // defined(__STM32_HAL_ATY) || \
  253. // defined(__STM32_LL_ATY)
  254. // #include "HW_UART_ATY.h"
  255. // #include "stdarg.h"
  256. // #define LOG_ATY(__STRING) printf(__STRING) // C99
  257. // #define LOG_ATY__(__STRING, ...) printf(__STRING,##__VA_ARGS__) // C99
  258. // #else
  259. // #define LOG_ATY(__STRING)
  260. // #endif
  261. // #if !defined(__PRINTF_ATY) && !defined(__stdio_h) && !defined(__STM32_HAL_ATY)
  262. // #include "stdarg.h"
  263. // __WEAK_ATY void printf(uint8_t*, ...);
  264. // #endif /* __PRINTF_ATY */
  265. /*
  266. // todo, not tested and need to be adjust
  267. // #include <stdio.h> // printf(only for debug)
  268. #if defined (__HC32_ATY) || \
  269. defined(__STM32_SPL_ATY) || \
  270. defined(__STM32_HAL_ATY) || \
  271. defined(__STM32_LL_ATY)
  272. #include "STM32_HAL_PRINTF_ATY.h"
  273. #include "stdarg.h"
  274. #define LOG_ATY(__STRING, ...) printf(__STRING,##__VA_ARGS__) // C99
  275. #else
  276. #include "HW_UART_ATY.h"
  277. #include "stdarg.h"
  278. #define LOG_ATY(...) UartSendStr(__VA_ARGS__)
  279. #endif
  280. */
  281. // Define device symbol to main header
  282. // #define __STC51_ATY
  283. // #define __STC8G_ATY
  284. // #define __STC8H_ATY
  285. // #define __HC32_ATY
  286. // #define __STM32_SPL_ATY
  287. // #define __STM32_LL_ATY
  288. // #define __STM32_HAL_ATY
  289. // #define __ESP8266_RTOS_ATY
  290. // #define __ESP32_IDF_ATY
  291. // #define __TIMER_CYCLE_ATY
  292. // #define TIMERC_N htim4
  293. // #define TIMERC_N 0
  294. // #define __I2C_HARDWARE_ATY
  295. // #define I2CH_N hi2c1
  296. // #define I2CH_N 0
  297. // #define I2CH_N I2C_NUM_0
  298. // #define __SPI_HARDWARE_ATY
  299. // #define SPIH_N hspi2
  300. // #define SPIH_N 0
  301. // #define __PWM_HARDWARE_ATY
  302. // #define PWMH_N htim1
  303. // #define PWMH_N TIM1
  304. // #define PWMH_N 1
  305. // #define DEBUG_PRINTF_RECEIVE
  306. // #define PRINTF_UART huart3
  307. // #define PRINTF_DMA hdma_usart3_rx
  308. // extern DMA_HandleTypeDef PRINTF_DMA;
  309. /******************************************************************************/
  310. #define _ATY_IO_O 0
  311. #define _ATY_IO_I 1
  312. #define _ATY_HL_L 0
  313. #define _ATY_HL_H 1
  314. #define _ATY_RW_W 0
  315. #define _ATY_RW_R 1
  316. #define _ATY_RW_RW 2
  317. #define _ATY_BUSY 99
  318. #define _ATY_LOCKED 101
  319. #define _ATY_UNLOCKED 102
  320. #if (USE_RTOS == 1U)
  321. #define __ATY_LOCK(__HANDLE__)
  322. #define __ATY_UNLOCK(__HANDLE__)
  323. #else
  324. #define __ATY_LOCK(__HANDLE__) \
  325. do{ \
  326. if((__HANDLE__)->lock == _ATY_LOCKED) { \
  327. return _ATY_BUSY; \
  328. } \
  329. else { \
  330. (__HANDLE__)->lock = _ATY_LOCKED; \
  331. } \
  332. }while (0U)
  333. #define __ATY_UNLOCK(__HANDLE__) \
  334. do{ \
  335. (__HANDLE__)->lock = _ATY_UNLOCKED; \
  336. }while (0U)
  337. #endif /* USE_RTOS */
  338. #endif /* __INCLUDE_ATY_H */
  339. /************************************ etc *************************************/
  340. /* init */
  341. /* use */
  342. /******************************************************************************/
  343. /******************************** End Of File *********************************/