ls1b_public.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-09-06 勤为本 first version
  9. */
  10. // 一些常用的、共用的接口
  11. #ifndef __LOONGSON_PUBLIC_H
  12. #define __LOONGSON_PUBLIC_H
  13. #include <stdio.h>
  14. // pmon提供的打印函数,见main()函数
  15. struct callvectors {
  16. int (*open) (char *, int, int);
  17. int (*close) (int);
  18. int (*read) (int, void *, int);
  19. int (*write) (int, void *, int);
  20. long long (*lseek) (int, long long, int);
  21. int (*printf) (const char *, ...);
  22. void (*cacheflush) (void);
  23. char *(*gets) (char *);
  24. };
  25. #define myprintf (*callvec->printf)
  26. #define mygets (*callvec->gets)
  27. extern struct callvectors *callvec;
  28. #define MIN(a, b) ((a) > (b) ? (b) : (a))
  29. #define MAX(a, b) ((a) > (b) ? (a) : (b))
  30. #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
  31. typedef enum
  32. {
  33. FALSE=0,
  34. TRUE=1
  35. }BOOL;
  36. /*
  37. * 将指定寄存器的指定位置1
  38. * @reg 寄存器地址
  39. * @bit 需要置1的那一bit
  40. */
  41. void reg_set_one_bit(volatile unsigned int *reg, unsigned int bit);
  42. /*
  43. * 将指定寄存器的指定位清零
  44. * @reg 寄存器地址
  45. * @bit 需要清零的那一bit
  46. */
  47. void reg_clr_one_bit(volatile unsigned int *reg, unsigned int bit);
  48. /*
  49. * 获取指定寄存器的指定位的值
  50. * @reg 寄存器地址
  51. * @bit 需要读取值的那一bit
  52. * @ret 指定位的值
  53. */
  54. unsigned int reg_get_bit(volatile unsigned int *reg, unsigned int bit);
  55. /*
  56. * 向寄存器中写入8bit(一个字节)数据
  57. * @data 待写入的数据
  58. * @addr 寄存器地址
  59. */
  60. void reg_write_8(unsigned char data, volatile unsigned char *addr);
  61. /*
  62. * 从寄存器读出8bit(一个字节)数据
  63. * @addr 寄存器地址
  64. * @ret 读出的数据
  65. */
  66. unsigned char reg_read_8(volatile unsigned char *addr);
  67. /*
  68. * 向寄存器中写一个32bit的数据
  69. * @data 待写入的数据
  70. * @addr 寄存器地址
  71. */
  72. void reg_write_32(unsigned int data, volatile unsigned int *addr);
  73. /*
  74. * 从寄存器读出一个32bit数据
  75. * @addr 寄存器地址
  76. * @ret 读出的数据
  77. */
  78. unsigned int reg_read_32(volatile unsigned int *addr);
  79. /**
  80. * ffs - find first bit set
  81. * @x: the word to search
  82. */
  83. int ls1b_ffs(int x);
  84. /*
  85. * fls - find last (most-significant) bit set
  86. * @x: the word to search
  87. *
  88. * This is defined the same way as ffs.
  89. * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
  90. */
  91. int ls1b_fls(int x);
  92. #endif