/** * \brief Set callback for AES * * \param dev_inst Device structure pointer. * \param source Interrupt source. * \param callback callback function pointer. * \param irq_level interrupt level. */ void aes_set_callback(struct aes_dev_inst *const dev_inst, aes_interrupt_source_t source, aes_callback_t callback, uint8_t irq_level) { aes_callback_pointer = callback; irq_register_handler((IRQn_Type)AESA_IRQn, irq_level); aes_enable_interrupt(dev_inst, source); }
/** * \brief Set callback for AES * * \param p_aes Base address of the AES instance. * \param source Interrupt source. * \param callback callback function pointer. * \param irq_level interrupt level. */ void aes_set_callback(Aes *const p_aes, aes_interrupt_source_t source, aes_callback_t callback, uint8_t irq_level) { if (source == AES_INTERRUPT_DATA_READY) { aes_callback_pointer[0] = callback; } else if (source == AES_INTERRUPT_UNSPECIFIED_REGISTER_ACCESS) { aes_callback_pointer[1] = callback; } irq_register_handler((IRQn_Type)AES_IRQn, irq_level); aes_enable_interrupt(p_aes, source); }
/** * \brief The main function. */ int main(void) { uint8_t key; /* Initialize the SAM system */ sysclk_init(); board_init(); /* Initialize the console */ configure_console(); /* Output example information */ printf("-- AES Example --\r\n"); printf("-- %s\n\r", BOARD_NAME); printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); /* Enable the AES module. */ aes_get_config_defaults(&g_aes_cfg); aes_init(AES, &g_aes_cfg); aes_enable(); /* Enable AES interrupt. */ aes_enable_interrupt(AES, AES_INTERRUPT_DATA_READY); /* Display menu */ display_menu(); while (1) { scanf("%c", (char *)&key); switch (key) { case 'h': display_menu(); break; case 'e': printf("GCM mode encryption test.\r\n"); gcm_mode_encryption_test(); break; case 'd': printf("GCM mode decryption test.\r\n"); gcm_mode_decryption_test(); break; default: break; } } }