|
C8051F960-B-GM Datasheet, PDF (196/492 Pages) Silicon Laboratories – Ultra Low Power 128K, LCD MCU Family | |||
|
◁ |
C8051F96x
14.6.4.1. CBC Decryption using DMA
Normally, the AES block is used with the DMA. This provides the best performance and lowest power con-
sumption. Code examples are provided in 8051 compiler independent C code using the DMA. It is highly
recommended to use with the code examples. The steps are documented in the datasheet for complete-
ness.
ï® Prepare decryption Key, initialization vector, and data to be decrypted in xram.
ï® The initialization vector should be located immediately before the data to be decrypted to decrypt
multiple blocks.
ï® Reset AES module by clearing bit 2 of AES0BCFG.
ï® Disable the first four DMA channels by clearing bits 0 to 3 in the DMA0EN sfr.
ï® Configure the first DMA channel for the AES0KIN sfr
ï¬ï Select the first DMA channel by writing 0x00 to the DMA0SEL sfr
ï¬ï Configure the first DMA channel to move xram to AES0KIN sfr by writing 0x05 to the DMA0NCF sfr
ï¬ï Write 0x01 to DMA0NMD to enable wrapping
ï¬ï Write the xram location of decryption key to the DMA0NBAH and DMA0NBAL sfrs.
ï¬ï Write the key length in bytes to DMA0NSZL sfr
ï¬ï Clear the DMA0NSZH sfr
ï¬ï Clear the DMA0NAOH and DMA0NAOL sfrs
ï® Configure the second DMA channel for the AES0BIN sfr.
ï¬ï Select the second DMA channel by writing 0x01 to the DMA0SEL sfr.
ï¬ï Configure the second DMA channel to move xram to AES0BIN sfr by writing 0x06 to the DMA0NCF sfr.
ï¬ï Clear DMA0NMD to disable wrapping.
ï¬ï Write the xram address of the data to be decrypted to the DMA0NBAH and DMA0NBAL sfrs.
ï¬ï Write the number of bytes to be decrypted in multiples of 16 bytes to the DMA0NSZH and DMA0NSZL sfrs.
ï¬ï Clear the DMA0NAOH and DMA0NAOL sfrs.
ï® Configure the third DMA channel for the AES0XIN sfr.
ï¬ï Select the third DMA channel by writing 0x02 to the DMA0SEL sfr.
ï¬ï Configure the third DMA channel to move xram to AES0XIN sfr by writing 0x07 to the DMA0NCF sfr.
ï¬ï Clear DMA0NMD to disable wrapping.
ï¬ï Write the xram address of initialization vector to the DMA0NBAH and DMA0NBAL sfrs.
ï¬ï Write the number of bytes to be decrypted in multiples of 16 bytes to the DMA0NSZH and DMA0NSZL sfrs.
ï¬ï Clear the DMA0NAOH and DMA0NAOL sfrs.
ï® Configure the fourth DMA channel for the AES0YOUT sfr
ï¬ï Select the fourth channel by writing 0x03 to the DMA0SEL sfr
ï¬ï Configure the fourth DMA channel to move the contents of the AES0YOUT sfr to xram by writing 0x08 to the
DMA0NCF sfr
ï¬ï Enable transfer complete interrupt by setting bit 7 of DMA0NCF sfr
ï¬ï Clear DMA0NMD to disable wrapping
ï¬ï Write the xram address for decrypted data to the DMA0NBAH and DMA0NBAL sfrs.
ï¬ï Write the number of bytes to be decrypted in multiples of 16 bytes to the DMA0NSZH and DMA0NSZL sfrs.
ï¬ï Clear the DMA0NAOH and DMA0NAOL sfrs.
ï® Clear first four DMA interrupts by clearing bits 0 to 2 in the DMA0INT sfr.
ï® Enable first four DMA channels setting bits 0 to 2 in the DMA0EN sfr
ï® Configure the AES Module data flow for XOR on output data by writing 0x02 to the AES0DCFG sfr.
ï® Write key size to bits 1 and 0 of the AES0BCFG
ï® Configure the AES core for decryption by clearing bit 2 of AES0BCFG
ï® Initiate the decryption operation be setting bit 3 of AES0BCFG
ï® Wait on the DMA interrupt from DMA channel 3
ï® Disable the AES Module by clearing bit 2 of AES0BCFG
ï® Disable the DMA by writing 0x00 to DMA0EN
196
Rev. 1.0
|
▷ |