The following section describe a simple cryptographic flow for this engine.
uint8_t buf_dst[16] = { 0 };
uint8_t buf_src[16] = { 0x18, 0x35, 0x9B, 0x75, 0x18, 0x6F, 0x33, 0xBE,
0x22, 0x0A, 0x3D, 0xB7, 0x66, 0xFD, 0x98, 0x35 };
/* Enable CRYPTOCELL subsystem */
NRF_CRYPTOCELL->ENABLE = CRYPTOCELL_ENABLE_ENABLE_Enabled;
/* Enable engine and DMA clock */
NRF_CC_MISC->CHACHA_CLK = CC_MISC_CHACHA_CLK_ENABLE_Enable;
NRF_CC_MISC->DMA_CLK = CC_MISC_DMA_CLK_ENABLE_Enable;
/* Wait until crypto engine is Idle */
while (NRF_CC_CTL->CRYPTO_BUSY == CC_CTL_CRYPTO_BUSY_STATUS_Busy) { }
/* Configure CHACHA as cryptographic flow */
NRF_CC_CTL->CRYPTO_CTL = CC_CTL_CRYPTO_CTL_MODE_ChaChaActive;
/* Configure testing NONCE */
NRF_CC_CHACHA->CHACHA_IV[0] = 0xBBBBAAAA;
NRF_CC_CHACHA->CHACHA_IV[1] = 0x22221111;
/* Load the CHACHA test key value into the engine */
NRF_CC_CHACHA->CHACHA_KEY[0] = 0x51515151;
NRF_CC_CHACHA->CHACHA_KEY[1] = 0x52525252;
NRF_CC_CHACHA->CHACHA_KEY[2] = 0x53535353;
NRF_CC_CHACHA->CHACHA_KEY[3] = 0x54545454;
NRF_CC_CHACHA->CHACHA_KEY[4] = 0x51515151;
NRF_CC_CHACHA->CHACHA_KEY[5] = 0x52525252;
NRF_CC_CHACHA->CHACHA_KEY[6] = 0x53535353;
NRF_CC_CHACHA->CHACHA_KEY[7] = 0x54545454;
/* Configure CHACHA mode - using default (0x0), adding new message init */
NRF_CC_CHACHA->CHACHA_CONTROL =
(CC_CHACHA_CHACHA_CONTROL_INIT_Enable <<
CC_CHACHA_CHACHA_CONTROL_INIT_Pos);
/* Configure DMA output destination address */
NRF_CC_DOUT->DST_MEM_ADDR = (uint32_t) buf_dst;
NRF_CC_DOUT->DST_MEM_SIZE = (uint32_t) sizeof(buf_dst);
/* Configure DMA input source address to start the cryptographic operation */
NRF_CC_DIN->SRC_MEM_ADDR = (uint32_t) buf_src;
NRF_CC_DIN->SRC_MEM_SIZE = (uint32_t) sizeof(buf_src);
/* Wait on DOUT DMA interrupt */
while(!(NRF_CC_HOST_RGF->IRR & CC_HOST_RGF_IRR_DOUT_TO_MEM_INT_Msk)) {}