PikaStdDevice_DAC.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "PikaStdDevice_DAC.h"
  2. #include "PikaStdDevice_common.h"
  3. static pika_dev* _get_dev(PikaObj* self) {
  4. pika_dev* dev = PIKA_HAL_OBJ2DEV(self);
  5. if (NULL != dev) {
  6. return dev;
  7. }
  8. dev = pika_hal_open(PIKA_HAL_DAC, obj_getStr(self, "pin"));
  9. if (NULL == dev) {
  10. __platform_printf("Error: open DAC '%s' failed.\r\n",
  11. obj_getStr(self, "pin"));
  12. }
  13. obj_setPtr(self, "pika_dev", dev);
  14. return dev;
  15. }
  16. void PikaStdDevice_DAC_enable(PikaObj* self) {
  17. pika_dev* dev = _get_dev(self);
  18. pika_hal_DAC_config cfg = {0};
  19. pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg);
  20. pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
  21. }
  22. void PikaStdDevice_DAC_setPin(PikaObj* self, char* pin) {
  23. obj_setStr(self, "pin", pin);
  24. }
  25. void PikaStdDevice_DAC_disable(PikaObj* self) {
  26. pika_dev* dev = _get_dev(self);
  27. pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
  28. }
  29. void PikaStdDevice_DAC_init(PikaObj* self) {
  30. obj_setStr(self, "pin", "PA0");
  31. }
  32. void PikaStdDevice_DAC___init__(PikaObj* self) {
  33. PikaStdDevice_DAC_init(self);
  34. }
  35. void PikaStdDevice_DAC_write(PikaObj* self, pika_float val) {
  36. pika_dev* dev = _get_dev(self);
  37. pika_hal_DAC_config* cfg = (pika_hal_DAC_config*)dev->ioctl_config;
  38. uint32_t val_i = (val / cfg->vref) * cfg->max;
  39. pika_hal_write(dev, &val_i, sizeof val_i);
  40. }
  41. void PikaStdDevice_DAC_close(PikaObj* self) {
  42. pika_dev* dev = _get_dev(self);
  43. pika_hal_close(dev);
  44. }