crc.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**************************************************************************//**
  2. * @file crc.c
  3. * @version V1.00
  4. * @brief M480 CRC driver source file
  5. *
  6. * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
  7. *****************************************************************************/
  8. #include "NuMicro.h"
  9. /** @addtogroup Standard_Driver Standard Driver
  10. @{
  11. */
  12. /** @addtogroup CRC_Driver CRC Driver
  13. @{
  14. */
  15. /** @addtogroup CRC_EXPORTED_FUNCTIONS CRC Exported Functions
  16. @{
  17. */
  18. /**
  19. * @brief CRC Open
  20. *
  21. * @param[in] u32Mode CRC operation polynomial mode. Valid values are:
  22. * - \ref CRC_CCITT
  23. * - \ref CRC_8
  24. * - \ref CRC_16
  25. * - \ref CRC_32
  26. * @param[in] u32Attribute CRC operation data attribute. Valid values are combined with:
  27. * - \ref CRC_CHECKSUM_COM
  28. * - \ref CRC_CHECKSUM_RVS
  29. * - \ref CRC_WDATA_COM
  30. * - \ref CRC_WDATA_RVS
  31. * @param[in] u32Seed Seed value.
  32. * @param[in] u32DataLen CPU Write Data Length. Valid values are:
  33. * - \ref CRC_CPU_WDATA_8
  34. * - \ref CRC_CPU_WDATA_16
  35. * - \ref CRC_CPU_WDATA_32
  36. *
  37. * @return None
  38. *
  39. * @details This function will enable the CRC controller by specify CRC operation mode, attribute, initial seed and write data length. \n
  40. * After that, user can start to perform CRC calculate by calling CRC_WRITE_DATA macro or CRC_DAT register directly.
  41. */
  42. void CRC_Open(uint32_t u32Mode, uint32_t u32Attribute, uint32_t u32Seed, uint32_t u32DataLen)
  43. {
  44. CRC->SEED = u32Seed;
  45. CRC->CTL = u32Mode | u32Attribute | u32DataLen | CRC_CTL_CRCEN_Msk;
  46. /* Setting CHKSINIT bit will reload the initial seed value(CRC_SEED register) to CRC controller */
  47. CRC->CTL |= CRC_CTL_CHKSINIT_Msk;
  48. }
  49. /**
  50. * @brief Get CRC Checksum
  51. *
  52. * @param[in] None
  53. *
  54. * @return Checksum Result
  55. *
  56. * @details This macro gets the CRC checksum result by current CRC polynomial mode.
  57. */
  58. uint32_t CRC_GetChecksum(void)
  59. {
  60. uint32_t ret;
  61. switch(CRC->CTL & CRC_CTL_CRCMODE_Msk)
  62. {
  63. case CRC_CCITT:
  64. case CRC_16:
  65. ret = (CRC->CHECKSUM & 0xFFFFU);
  66. break;
  67. case CRC_32:
  68. ret = (CRC->CHECKSUM);
  69. break;
  70. case CRC_8:
  71. ret = (CRC->CHECKSUM & 0xFFU);
  72. break;
  73. default:
  74. ret = 0U;
  75. break;
  76. }
  77. return ret;
  78. }
  79. /*@}*/ /* end of group CRC_EXPORTED_FUNCTIONS */
  80. /*@}*/ /* end of group CRC_Driver */
  81. /*@}*/ /* end of group Standard_Driver */
  82. /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/