Forum: Mikrocontroller und Digitale Elektronik CRC calculation unit


von Dirk (Gast)


Lesenswert?

Hallo,
ich brauche bitte eure Hilfe, komme nicht weiter :(
mein Ziel ist, die CRCValue von der ersten vier Werte vom DataBuffer, 
dann von der zweiten vier Werte, dann von der dritten vier Werte usw. zu 
rechnen.

das Programm hier rechnet die CRCValue von alle Werten

Danke!

#define BUFFER_SIZE    114

static const uint32_t DataBuffer[BUFFER_SIZE] =
  {
    0x20423063, 0x408450a5, 0x60c670e7, 0x9129a14a, 0xb16bc18c,
    0xf1ef1231, 0x32732252, 0x52b54294, 0x72f762d6, 0x93398318,
    0xc39cf3ff, 0xe3de2462, 0x34430420, 0x64e674c7, 0x44a45485,
    0x85289509, 0xf5cfc5ac, 0xd58d3653, 0x26721611, 0x063076d7,
    0xb75ba77a, 0x97198738, 0xf7dfe7fe, 0xc7bc48c4, 0x58e56886,
    0x18612802, 0xc9ccd9ed, 0xe98ef9af, 0x89489969, 0xa90ab92b,
    0x6a961a71, 0x0a503a33, 0x2a12dbfd, 0xfbbfeb9e, 0x9b798b58,
    0x6ca67c87, 0x5cc52c22, 0x3c030c60, 0x1c41edae, 0xfd8fcdec,
    0x8d689d49, 0x7e976eb6, 0x5ed54ef4, 0x2e321e51, 0x0e70ff9f,
    0xcffcbf1b, 0x9f598f78, 0x918881a9, 0xb1caa1eb, 0xd10cc12d,
    0x00a130c2, 0x20e35004, 0x40257046, 0x83b99398, 0xa3fbb3da,
    0xe37ff35e, 0x129022f3, 0x32d24235, 0x52146277, 0x7256b5ea,
    0xf56ee54f, 0xd52cc50d, 0x34e224c3, 0x04817466, 0x64475424,
    0xb7fa8799, 0xe75ff77e, 0xc71dd73c, 0x26d336f2, 0x069116b0,
    0x5634d94c, 0xc96df90e, 0xe92f99c8, 0xb98aa9ab, 0x58444865,
    0x18c008e1, 0x28a3cb7d, 0xdb5ceb3f, 0xfb1e8bf9, 0x9bd8abbb,
    0x6a377a16, 0x0af11ad0, 0x2ab33a92, 0xed0fdd6c, 0xcd4dbdaa,
    0x8dc97c26, 0x5c644c45, 0x3ca22c83, 0x1ce00cc1, 0xef1fff3e,
    0xbfba8fd9, 0x9ff86e17, 0x7e364e55, 0x2e933eb2, 0x0ed11ef0
  };

uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
{
  uint32_t index = 0;

  for(index = 0; index < BufferLength; index++)
  {
    CRC->DR = pBuffer[index];
  }
  return (CRC->DR);
}

int main()
{
  /* Compute the CRC of "DataBuffer" */
  CRCValue = CRC_CalcBlockCRC((uint32_t *)DataBuffer, BUFFER_SIZE);
}

von Dirk (Gast)


Lesenswert?

void CRC_ResetDR(void)
{
  /* Reset CRC generator */
  CRC->CR = CR_RESET_Set;
}

von Dirk (Gast)


Lesenswert?

ich habe die funktion mit Zeiger geschrieben. ist folgendes richtig ?

uint32_t CRC_CalcBlockCRC(uint16_t *pBuffer, uint32_t BufferLength)
{
  uint32_t index = 0;

  for(index = 0; index < BufferLength; index++)
  {
    CRC->DR = *(pBuffer+index);
  }
  return (CRC->DR);
}

von U.R. Schmitt (Gast)


Lesenswert?

uint32_t DieErstenVier = CRC_CalcBlockCRC(DataBuffer, 4);#

usw, was auch immer usw dann sein soll

von Dirk (Gast)


Lesenswert?

für DieErstenVier ist ja klar. DataBuffer zeigt auf das erste Element.
wie soll ich dann dieLetzenVier aufrufen ??

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.