IM1253E.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "SysTick.h"
  2. #include "IM1253E.h"
  3. #include "common.h"
  4. #include "uart.h"
  5. #include "stdbool.h"
  6. #define UART1_BUF_SIZE 64
  7. uint8_t Tx_Data_frame_IM1253E[UART1_BUF_SIZE];
  8. extern bool B_Rx_Finish;
  9. extern uint8_t RX_Length;
  10. extern uint8_t Rx_Data_len;
  11. extern uint8_t u8_RX_Index;
  12. extern uint8_t u8_RxBuf[UART1_BUF_SIZE];
  13. uint16_t CRC_calculate_function(uint8_t len)
  14. {
  15. uint8_t i = 0;
  16. uint8_t j = 0;
  17. uint16_t temp0 = 0xffff;
  18. uint16_t temp1 = 0xffff;
  19. for(i = 0;i < len;i++)
  20. {
  21. temp0 = Tx_Data_frame_IM1253E[i] ^ temp0;
  22. temp1 = temp0 >> 1;
  23. for(j = 0;j < 8;j++)
  24. {
  25. if((temp0 & 0x0001) > 0)
  26. {
  27. temp0 = temp1 ^ 0xa001;
  28. }
  29. else
  30. {
  31. temp0 = temp1;
  32. }
  33. temp1 = temp0 >> 1;
  34. }
  35. }
  36. return temp0;
  37. }
  38. void Read_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t len)
  39. {
  40. uint16_t temp0;
  41. u8_RX_Index = 0;
  42. B_Rx_Finish = 0;
  43. RX_Length = len << 2;
  44. RX_Length = RX_Length + 5;
  45. Tx_Data_frame_IM1253E[0] = dev_addr;
  46. Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E;
  47. Tx_Data_frame_IM1253E[2] = reg_addr >> 8;
  48. Tx_Data_frame_IM1253E[3] = reg_addr;
  49. Tx_Data_frame_IM1253E[4] = 0x00;
  50. Tx_Data_frame_IM1253E[5] = len;
  51. temp0 = CRC_calculate_function(6);
  52. Tx_Data_frame_IM1253E[6] = temp0;
  53. Tx_Data_frame_IM1253E[7] = temp0 >> 8;
  54. Start_Send_UartData(Tx_Data_frame_IM1253E,8);
  55. }
  56. void Write_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t *pt,uint8_t len)
  57. {
  58. uint8_t i;
  59. RX_Length = len + 6;
  60. Tx_Data_frame_IM1253E[0] = dev_addr;
  61. Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E;
  62. Tx_Data_frame_IM1253E[2] = reg_addr >> 8;
  63. Tx_Data_frame_IM1253E[3] = reg_addr;
  64. Tx_Data_frame_IM1253E[4] = 0x00;
  65. Tx_Data_frame_IM1253E[5] = len;
  66. Tx_Data_frame_IM1253E[6] = len << 1;
  67. for(i = 0;i < len;i++)
  68. {
  69. Tx_Data_frame_IM1253E[7 + i] = *(pt + i);
  70. }
  71. Tx_Data_frame_IM1253E[7 + len] = CRC_calculate_function(7 + len);
  72. Tx_Data_frame_IM1253E[8 + len] = CRC_calculate_function(7 + len) >> 8;
  73. Start_Send_UartData(Tx_Data_frame_IM1253E,(9 + len));
  74. }