drv_dac.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /*
  2. * Copyright (c) 2006-2025, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-08-19 Mr.Tiger first version
  9. */
  10. #include <rtthread.h>
  11. #include "drv_config.h"
  12. #ifdef RT_USING_DAC
  13. //#define DRV_DEBUG
  14. #define DBG_TAG "drv.dac"
  15. #ifdef DRV_DEBUG
  16. #define DBG_LVL DBG_LOG
  17. #else
  18. #define DBG_LVL DBG_INFO
  19. #endif /* DRV_DEBUG */
  20. #include <rtdbg.h>
  21. #if defined(SOC_SERIES_R7KA8P1)
  22. #define R_DAC_Open R_DAC_B_Open
  23. #define R_DAC_Write R_DAC_B_Write
  24. #define R_DAC_Start R_DAC_B_Start
  25. #define R_DAC_Stop R_DAC_B_Stop
  26. #endif
  27. struct ra_dac_map ra_dac[] =
  28. {
  29. #ifdef BSP_USING_DAC0
  30. {'0', &g_dac0_cfg, &g_dac0_ctrl},
  31. #endif
  32. #ifdef BSP_USING_DAC1
  33. {'1', &g_dac1_cfg, &g_dac1_ctrl},
  34. #endif
  35. };
  36. #ifdef BSP_USING_DAC0
  37. struct rt_dac_device dac0_device;
  38. struct ra_dac_dev _ra_dac0_device = {.ra_dac_device_t = &dac0_device, .ra_dac_map_dev = &ra_dac[0]};
  39. #endif
  40. #ifdef BSP_USING_DAC1
  41. struct rt_dac_device dac1_device;
  42. struct ra_dac_dev _ra_dac1_device = {.ra_dac_device_t = &dac1_device, .ra_dac_map_dev = &ra_dac[1]};
  43. #endif
  44. rt_err_t ra_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel)
  45. {
  46. RT_ASSERT(device != RT_NULL);
  47. struct ra_dac_map *dac = (struct ra_dac_map *)device->parent.user_data;
  48. if (FSP_SUCCESS != R_DAC_Stop((dac_ctrl_t *)dac->g_ctrl))
  49. {
  50. LOG_E("dac%c stop failed.", dac->name);
  51. return -RT_ERROR;
  52. }
  53. return RT_EOK;
  54. }
  55. rt_err_t ra_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel)
  56. {
  57. RT_ASSERT(device != RT_NULL);
  58. struct ra_dac_map *dac = (struct ra_dac_map *)device->parent.user_data;
  59. if (FSP_SUCCESS != R_DAC_Start((dac_ctrl_t *)dac->g_ctrl))
  60. {
  61. LOG_E("dac%c start failed.", dac->name);
  62. return -RT_ERROR;
  63. }
  64. return RT_EOK;
  65. }
  66. rt_err_t ra_dac_write(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value)
  67. {
  68. RT_ASSERT(device != RT_NULL);
  69. struct ra_dac_map *dac = (struct ra_dac_map *)device->parent.user_data;
  70. if (FSP_SUCCESS != R_DAC_Write((dac_ctrl_t *)dac->g_ctrl, *value))
  71. {
  72. LOG_E("dac%c set value failed.", dac->name);
  73. return -RT_ERROR;
  74. }
  75. return RT_EOK;
  76. }
  77. struct rt_dac_ops ra_dac_ops =
  78. {
  79. .disabled = ra_dac_disabled,
  80. .enabled = ra_dac_enabled,
  81. .convert = ra_dac_write,
  82. };
  83. static int ra_dac_init(void)
  84. {
  85. #ifdef BSP_USING_DAC0
  86. _ra_dac0_device.ra_dac_device_t->ops = &ra_dac_ops;
  87. R_DAC_Open((dac_ctrl_t *)_ra_dac0_device.ra_dac_map_dev->g_ctrl, (dac_cfg_t const *)_ra_dac0_device.ra_dac_map_dev->g_cfg);
  88. if (FSP_SUCCESS != rt_hw_dac_register(_ra_dac0_device.ra_dac_device_t, "dac0", &ra_dac_ops, (void *)_ra_dac0_device.ra_dac_map_dev))
  89. {
  90. LOG_E("dac0 register failed");
  91. return -RT_ERROR;
  92. }
  93. #endif
  94. #ifdef BSP_USING_DAC1
  95. _ra_dac1_device.ra_dac_device_t->ops = &ra_dac_ops;
  96. R_DAC_Open((dac_ctrl_t *)_ra_dac1_device.ra_dac_map_dev->g_ctrl, (dac_cfg_t const *) _ra_dac1_device.ra_dac_map_dev->g_cfg);
  97. if (FSP_SUCCESS != rt_hw_dac_register(_ra_dac1_device.ra_dac_device_t, "dac1", &ra_dac_ops, (void *)_ra_dac1_device.ra_dac_map_dev))
  98. {
  99. LOG_E("dac1 register failed");
  100. return -RT_ERROR;
  101. }
  102. #endif
  103. return RT_EOK;
  104. }
  105. INIT_DEVICE_EXPORT(ra_dac_init);
  106. #endif