txFIFO.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "txFIFO.h"
  2. can_message_t canTxBuffer[CAN_TXBUFFER_SIZE];
  3. TxFIFOCtrl_t TxFIFOCtrl = {
  4. .totalSize = CAN_TXBUFFER_SIZE,
  5. .totalRepeat = 1,
  6. .pBuffer = canTxBuffer
  7. };
  8. uint8_t pushTxFIFO(TxFIFOCtrl_t *ctrl, can_message_t msg)
  9. {
  10. uint8_t ret = 0;
  11. if(ctrl->usedSize <= ctrl->totalSize) {
  12. uint8_t index = (ctrl->index + ctrl->usedSize) % ctrl->totalSize;
  13. memcpy(&ctrl->pBuffer[index], &msg, sizeof(can_message_t));
  14. ctrl->usedSize++;
  15. } else {
  16. ret = 1;
  17. }
  18. return ret;
  19. }
  20. void txFIFOTask(TxFIFOCtrl_t *ctrl)
  21. {
  22. if(ctrl->usedSize > 0) {
  23. if(ctrl->usedRepeat != ctrl->totalRepeat) {
  24. // user handle begin
  25. // if(CAN0_TxBufferIsBusy(0)) return ;
  26. // can_send(ctrl->pBuffer[ctrl->index].id, ctrl->pBuffer[ctrl->index].data, ctrl->pBuffer[ctrl->index].dlc);
  27. // user handle end
  28. ctrl->usedRepeat++;
  29. if(ctrl->usedRepeat >= ctrl->totalRepeat) {
  30. ctrl->usedRepeat = 0;
  31. ctrl->index++;
  32. ctrl->usedSize--;
  33. if(ctrl->index >= ctrl->totalSize) ctrl->index = 0;
  34. }
  35. }
  36. }
  37. }