buf.cpp
上传用户:kepeng103
上传日期:2022-07-27
资源大小:2653k
文件大小:1k
源码类别:

DSP编程

开发平台:

C/C++

  1. #include "..commonhal.h"
  2. #include "buf.h"
  3. #include <stdio.h>
  4. int16 in[2][FRAME_LENGTH];
  5. int16 out[2][FRAME_LENGTH];
  6. volatile int i,j;
  7. volatile int m,n;
  8. int last_read = 0;
  9. int last_write = 0;
  10. void buf_init(void)
  11. {
  12. i = 0;
  13. j = 0;
  14. m = 0;
  15. n = 0;
  16. last_read = 0;
  17. last_write = 0;
  18. }
  19. void data_in(int16 data)
  20. {
  21. static int k = 0;
  22. in[i][j] = data;
  23. if(++j == FRAME_LENGTH) {
  24. j = 0;
  25. i ^= 0x1;
  26. if(++k == 4) {
  27. k = 0;
  28. REG32(MCASP1_PDOUT) ^= 0x10;
  29. }
  30. }
  31. }
  32. int16 data_out(void)
  33. {
  34. static int k = 0;
  35. int16 data = out[m][n];
  36. if(++n == FRAME_LENGTH) {
  37. n = 0;
  38. m ^= 0x1;
  39. if(++k == 4) {
  40. k = 0;
  41. REG32(MCASP1_PDOUT) ^= 0x8;
  42. }
  43. }
  44. return data;
  45. }
  46. int16 *read_data(void)
  47. {
  48. int16 *data;
  49. while(last_read == i)
  50. data = in[last_read];
  51. last_read = i;
  52. return data;
  53. }
  54. void write_data(int16 *data)
  55. {
  56. while(last_write == m);
  57. for(int k=0; k<FRAME_LENGTH; k++)
  58. {out[last_write][k] = data[k];}
  59. last_write = m;
  60. }